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 が呼び出されます。そのため、現在、ボタンを 2 回クリックする必要があります。それを回避する方法は何ですか?

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 に答える