实施 Firebase 电话身份验证时出现 UserCancellationException

时间:2021-03-04 04:04:44

标签: java android firebase firebase-authentication

我第一次尝试实现 Firebase 手机身份验证时遇到问题,我正在使用 FirebaseUI 来执行此操作,但每次我在手机上运行该应用程序 (Huewei y9 2019) 并输入我的号码并单击在验证电话号码上,我在没有按后退按钮的情况下得到了一个空响应,它不断将我发送回登录页面。

我已阅读有关通过 FirebaseUI 实施电话身份验证的文档和许多主题,并且已完成所有步骤,包括在我的 Firebase 身份验证登录方法的方法中添加电话,将 SHA-1 和 SHA-256 添加到我的 Firebase 项目,下载 Google-Services.json 文件并将其添加到我的项目中,我还尝试启用/禁用 Android Device Check API 为我的应用启用 Safteynet,但没有任何变化。

我不得不说尝试使用 FirebaseUI 实现 Google、Twitter 和电子邮件身份验证,除了电话身份验证外,一切正常。

我希望找到可以帮助我理解这个问题并解决它的人?。

这是我的主要活动代码:

package com.development.myfirebaseapp;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.constraintlayout.widget.ConstraintLayout;
import androidx.constraintlayout.widget.ConstraintSet;
import android.annotation.SuppressLint;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import com.firebase.ui.auth.AuthUI;
import com.firebase.ui.auth.IdpResponse;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import java.util.Arrays;
import java.util.List;



public class MainActivity extends AppCompatActivity {

final Context context = this;

List<AuthUI.IdpConfig> providers;

private final static int SIGN_IN_INTENT_REQUESTCODE = 1;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    createSignInMethods();
}

public void createSignInMethods()
{
            providers = Arrays.asList(
            new AuthUI.IdpConfig.PhoneBuilder().build(),
            new AuthUI.IdpConfig.EmailBuilder().build(),
            new AuthUI.IdpConfig.GoogleBuilder().build(),
            new AuthUI.IdpConfig.TwitterBuilder().build());

    startActivityForResult(AuthUI.getInstance().createSignInIntentBuilder()
            .setAvailableProviders(providers)
            .build(), SIGN_IN_INTENT_REQUESTCODE);

}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
    super.onActivityResult(requestCode,resultCode,data);

    if(requestCode == SIGN_IN_INTENT_REQUESTCODE)
    {
        IdpResponse response = IdpResponse.fromResultIntent(data);

        if(resultCode == RESULT_OK)
        {
            FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();

            Toast.makeText(context,"Successfully signed in",Toast.LENGTH_SHORT).show();

        }
        else
        {
            int errorCode = response.getError().getErrorCode();

            Log.d("authErrorCode",String.valueOf(errorCode));

            Toast.makeText(context,"Failed to sign in",Toast.LENGTH_SHORT).show();
        }
    }
 }
    
}

这是我的 App Build.gradle 文件:

apply plugin: 'com.android.application'
apply plugin: 'com.google.gms.google-services'

android {
compileSdkVersion 29
buildToolsVersion "29.0.2"

defaultConfig {
    applicationId "com.development.myfirebaseapp"
    minSdkVersion 18
    targetSdkVersion 29
    versionCode 1
    versionName "1.0"

    testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}

buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
    }
 }

}

dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])

implementation 'androidx.appcompat:appcompat:1.2.0'
implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test.ext:junit:1.1.2'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'

implementation platform('com.google.firebase:firebase-bom:26.5.0')
implementation 'com.firebaseui:firebase-ui-auth:6.4.0'
implementation 'com.twitter.sdk.android:twitter-core:3.1.1'
}

最后是我的日志文件:

2021-03-04 05:03:29.600 20159-20159/? E/AuthUI: A sign-in error occurred.
com.firebase.ui.auth.data.model.UserCancellationException: Unknown error
    at com.firebase.ui.auth.data.remote.PhoneSignInHandler.onActivityResult(PhoneSignInHandler.java:39)
    at com.firebase.ui.auth.ui.idp.AuthMethodPickerActivity.onActivityResult     (AuthMethodPickerActivity.java:383)
    at android.app.Activity.dispatchActivityResult(Activity.java:7797)
    at android.app.ActivityThread.deliverResults(ActivityThread.java:5071)
    at android.app.ActivityThread.performResumeActivity(ActivityThread.java:4409)
    at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:4470)
    at android.app.servertransaction.ResumeActivityItem.execute(ResumeActivityItem.java:51)
    at android.app.servertransaction.TransactionExecutor.executeLifecycleState     (TransactionExecutor.java:145)
    at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:70)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2199)
    at android.os.Handler.dispatchMessage(Handler.java:112)
    at android.os.Looper.loop(Looper.java:216)
    at android.app.ActivityThread.main(ActivityThread.java:7625)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:524)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:987)

1 个答案:

答案 0 :(得分:0)

以防万一有人再次遇到这个问题,我将 Firebase Bom 更新到最新版本 (26.6.0) 并将 FirebaseUI Auth 更新到版本 (7.1.1),最后我的问题解决了?