我通过 Firebase 在 Android Studio 中使用电话身份验证, 我在 Firebase 项目中启用了电话登录并添加 SHA-1 和 SHA-256。 这是我的所有依赖项:
dependencies {
implementation 'androidx.appcompat:appcompat:1.2.0'
implementation 'com.google.android.material:material:1.2.1'
implementation 'androidx.constraintlayout:constraintlayout:2.0.2'
testImplementation 'junit:junit:4.13.1'
implementation 'com.hbb20:ccp:2.4.0'
implementation 'com.google.firebase:firebase-auth:20.0.0'
implementation 'com.google.firebase:firebase-analytics'
implementation platform('com.google.firebase:firebase-bom:26.0.0')
implementation 'com.google.android.gms:play-services-safetynet:17.0.0'
androidTestImplementation 'androidx.test.ext:junit:1.1.2'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
}
这是错误日志:
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.securechat, PID: 24159
java.lang.NoClassDefFoundError: Failed resolution of: Landroidx/browser/customtabs/CustomTabsIntent$Builder;
at com.google.firebase.auth.internal.RecaptchaActivity.zza(com.google.firebase:firebase-auth@@20.0.0:92)
at com.google.firebase.auth.api.internal.zzeq.zza(com.google.firebase:firebase-auth@@20.0.0:79)
at com.google.firebase.auth.api.internal.zzeq.onPostExecute(com.google.firebase:firebase-auth@@20.0.0:88)
at android.os.AsyncTask.finish(AsyncTask.java:695)
at android.os.AsyncTask.access$600(AsyncTask.java:180)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:712)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6692)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
Caused by: java.lang.ClassNotFoundException: Didn't find class "androidx.browser.customtabs.CustomTabsIntent$Builder" on path: DexPathList[[zip file "/data/app/com.example.securechat-GUvvd01g4yeRO2eP4pBFfA==/base.apk"],nativeLibraryDirectories=[/data/app/com.example.securechat-GUvvd01g4yeRO2eP4pBFfA==/lib/arm64, /system/lib64, /vendor/lib64]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:134)
at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
at com.google.firebase.auth.internal.RecaptchaActivity.zza(com.google.firebase:firebase-auth@@20.0.0:92)
at com.google.firebase.auth.api.internal.zzeq.zza(com.google.firebase:firebase-auth@@20.0.0:79)
at com.google.firebase.auth.api.internal.zzeq.onPostExecute(com.google.firebase:firebase-auth@@20.0.0:88)
at android.os.AsyncTask.finish(AsyncTask.java:695)
at android.os.AsyncTask.access$600(AsyncTask.java:180)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:712)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6692)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
实施
androidx.browser:browser:1.2.0
使用这个依赖来解决问题。
在新的 Firebase 身份验证版本中,他们进行了重大更改,例如用于人工验证的 Recaptcha 、SafetyNet。通过添加
实现“androidx.browser:浏览器:1.3.0”
它解决了我的问题,但用户体验不好,因为 firebase 正在打开浏览器来验证 reCAPTCHA,这在应用程序流程中看起来很奇怪。
Firebase 引用“仅当 SafetyNet 不可用或您的设备未通过可疑检查时才会触发 reCAPTCHA 流程。尽管如此,您应该确保这两种情况都能正常工作。” 因此,要启用 SafetyNet,请按照以下步骤操作,或者您也可以访问 Firebase Auth 了解更多信息。
进入谷歌云控制台,选择您的项目。
单击导航菜单并选择 API 和服务,然后选择仪表板。
点击启用api和服务并启用api” Android 设备验证”。
在firebase项目设置中添加SHA 256。(调试和 释放两者)
下载并替换项目中最新的 google-services.json 文件。
如果有人来自
react-native
,在四处搜寻后我找到了这个临时解决方案。
添加以下内容
implementation "androidx.browser:browser:1.2.0"
进入
android/app/build.gradle
依赖关系解决了问题。
您需要将 CustomTabs 添加到您的项目中,以便您的移动应用程序可以使用 CustomTabs 访问浏览器
implementation 'com.android.support:customtabs:28.0.0'
同样的事情也发生在我身上。我所做的基本上删除了以下行-
implementation platform('com.google.firebase:firebase-bom:26.0.0')
将此依赖项添加到您的“build.gradle”文件中...
implementation 'com.android.support:customtabs:28.0.0-alpha3'
由于您使用
firebase-bom
依赖项,因此 that 库决定了您使用的所有 Firebase SDK 的版本。这意味着您不应在 gradle 文件中指定任何其他 Firebase SDK 的版本号。
因此从
firebase-auth
中删除版本号:
implementation 'com.google.firebase:firebase-auth'
implementation 'com.google.firebase:firebase-analytics'
implementation platform('com.google.firebase:firebase-bom:26.0.0')
请按照以下步骤操作:
在 Google Cloud 控制台中,为您的项目启用 Android DeviceCheck API。
获取以下框架的 SHA-256 指纹:
转到 Firebase 控制台的设置页面,选择您的项目并为您的应用设置 SHA-256 指纹。
重新运行应用程序。
有关更多信息,请访问启用应用程序验证文档。
伙计们,我找到了一种方法,只需按照步骤操作即可。 在 firebase 的“电话身份验证文档”中,您将找到该选项(2.启用应用程序验证) 请按照以下步骤操作:
点击启用 AndroidDevice check API。
然后添加您的 SHA-256。 (Gradle 在您的右侧
android studio->Tasks->android->signingReports.
)
您将获得适用于您的应用程序的 SHA-256。
在您的 build.gradle 文件中添加此依赖项...
implementation platform('com.google.firebase:firebase-bom:26.2.0')
现在,在项目设置中添加 SHA-256(Android studio->Tasks->android->signingReports 右侧的 Gradle)。
以下步骤非常重要...
在此单击“查看全部”以获取“Android 设备验证”选项卡。
模拟器无法测试,你用的是真机吗?如果您想从模拟器进行测试,请查看此内容https://firebase.flutter.dev/docs/auth/phone/#testing
只需添加这一行:
implementation "androidx.browser:browser:1.3.0"
它会解决你的问题。确保还在 Firebase 中添加 SHA-256。