2

我正在创建一个这样的digitsauthconfig:

private DigitsAuthConfig createDigitsAuthConfig() {
    return new DigitsAuthConfig.Builder()
            .withAuthCallBack(createAuthCallback())
            .withPhoneNumber("+91")
            .withThemeResId(R.style.CustomDigitsTheme)
            .build();
}

其中 authcallback 通过以下方式返回:

private AuthCallback createAuthCallback() {
    return new AuthCallback() {
        @Override
        public void success(DigitsSession session, String phoneNumber) {
            doIfSuccessfulOtpVerification();
        }

        @Override
        public void failure(DigitsException exception) {
            doIfNotSuccessfulOtpVerification();
        }
    };
}

我使用带有事件侦听器的按钮启动该过程:

digitsButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Digits.authenticate(createDigitsAuthConfig());
        }
    });

问题是,一旦我的电话号码得到验证,它就会回到显示按钮的活动并且什么都不做。从技术上讲,永远不会调用 authcallback,无论成功与否。但是如果我再次单击该按钮,则会调用 authcallback 而无需重复验证步骤。所以现在我需要点击按钮两次。周围的方法是什么?

4

3 回答 3

4

最后我得到了解决这个问题的方法,它也会对你有所帮助。

在调用下面提到的类似之前,您需要删除 ActiveSession。setCallback(authCallback)它将从数字中删除现有会话(如果您已经输入了您的电话号码并获得了 OTP)。此会话将不允许您进行另一个会话来生成 OTP。所以,我们必须删除它。如果以前没有任何会话,它将起作用。

    DigitsAuthButton digitsButton = (DigitsAuthButton) findViewById(R.id.auth_button);
    Digits.getSessionManager().clearActiveSession();
    digitsButton.setCallback(((WyzConnectApp) getApplication()).getAuthCallback());
于 2016-03-15T12:59:33.860 回答
0

Digits 更改了它引用 Digits#authenticate 调用中传递的 AuthCallback 的方式。
现在 Digits 持有一个弱引用(以避免内存泄漏),除非您持有一个强引用,否则 AuthCallback 将被垃圾收集,并且流的结果将永远不会传播。
您需要在 Application 上下文中定义 AuthCallback,然后在您的活动中使用此回调,它应该可以工作。
请查看有关如何执行此操作的文档

于 2016-09-30T06:17:34.357 回答
0

我知道它很晚,但可能对初学者有帮助。要验证会话是否已经处于活动状态,请将此代码放入您onCreate初始化数字电话号码验证按钮的活动中:

 TwitterAuthConfig authConfig = new TwitterAuthConfig(TWITTER_KEY, TWITTER_SECRET);
            Fabric.with(this, new TwitterCore(authConfig), new Digits.Builder().build());
    if (Digits.getActiveSession() != null) {
                Intent ss = new Intent(CurrentActivity.this, SecondActivity.class);
                startActivity(ss);
                finish();
            }
于 2017-05-14T20:13:37.563 回答