Android otp验证成功/失败时未调用回调
我正在创建一个DigitAuthConfig,如下所示:Android otp验证成功/失败时未调用回调,android,twitter-digits,Android,Twitter Digits,我正在创建一个DigitAuthConfig,如下所示: private DigitsAuthConfig createDigitsAuthConfig() { return new DigitsAuthConfig.Builder() .withAuthCallBack(createAuthCallback()) .withPhoneNumber("+91") .withThemeResId(R.style.Cus
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而不重复验证步骤。所以现在我需要点击按钮两次。
解决这个问题的办法是什么?我终于找到了解决这个问题的办法,希望它也能对你有所帮助 在调用下面提到的
setCallback(authCallback)
之前,您需要删除ActiveSession。它将从digits中删除现有会话(如果您已输入电话号码并获得OTP)。此会话将不允许您进行另一个会话以生成OTP。所以,我们必须移除它。如果之前没有任何会议,它将起作用
DigitsAuthButton digitsButton = (DigitsAuthButton) findViewById(R.id.auth_button);
Digits.getSessionManager().clearActiveSession();
digitsButton.setCallback(((WyzConnectApp) getApplication()).getAuthCallback());
Digits更改了它引用在Digits#authenticate调用中传递的AuthCallback的方式。
现在Digits持有弱引用(以避免内存泄漏),除非持有强引用,否则AuthCallback将被垃圾收集,流的结果将永远不会传播。
您需要在应用程序上下文中定义AuthCallback,然后在活动中使用此回调,它应该可以工作。
请检查如何执行此操作我知道时间已晚,但可能对初学者有所帮助。要验证会话是否已处于活动状态,请将此代码放入初始化了“数字电话号码验证”按钮的活动的
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();
}
连我都有同样的问题。你找到解决办法了吗?@Yahya