android 位 success/failure otp 验证未调用 authcallback
Digits android authcallback not called on success/failure otp verification
我正在创建一个像这样的 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());
}
});
问题是,一旦我的 phone 号码通过验证,它就会返回显示按钮的 activity 并且什么都不做。从技术上讲,authcallback 永远不会被调用,无论成功与否。但是,如果我再次单击该按钮,则会在不重复验证步骤的情况下调用 authcallback。所以现在我需要点击按钮两次。
解决方法是什么?
终于找到了解决这个问题的办法,希望对你也有帮助。
您需要在调用 setCallback(authCallback)
之前删除 ActiveSession,因为 below.It 会删除现有会话(如果您已经输入了 phone 号码并获得了 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,然后在您的 activity 中使用此回调,它应该可以工作。
请查看 documentation 如何执行此操作
我知道已经晚了,但可能有助于 beginner.To 验证会话是否已激活,请将此代码放入 activity 的 onCreate
中,其中数字 phone号码验证按钮初始化:
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();
}
我正在创建一个像这样的 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());
}
});
问题是,一旦我的 phone 号码通过验证,它就会返回显示按钮的 activity 并且什么都不做。从技术上讲,authcallback 永远不会被调用,无论成功与否。但是,如果我再次单击该按钮,则会在不重复验证步骤的情况下调用 authcallback。所以现在我需要点击按钮两次。 解决方法是什么?
终于找到了解决这个问题的办法,希望对你也有帮助。
您需要在调用 setCallback(authCallback)
之前删除 ActiveSession,因为 below.It 会删除现有会话(如果您已经输入了 phone 号码并获得了 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,然后在您的 activity 中使用此回调,它应该可以工作。
请查看 documentation 如何执行此操作
我知道已经晚了,但可能有助于 beginner.To 验证会话是否已激活,请将此代码放入 activity 的 onCreate
中,其中数字 phone号码验证按钮初始化:
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();
}