【问题标题】:Firebase Android Auth object no callbacks firingFirebase Android Auth 对象没有触发回调
【发布时间】:2016-09-19 10:45:21
【问题描述】:

我一直在阅读 Firebase 文档以在我的 android 应用中设置用户身份验证系统。然而,由于某种原因,我的 FirebaseAuth 对象上似乎没有任何回调正在运行!

例如,按照here 的指示设置 Facebook 身份验证

private void handleFacebookAccessToken(AccessToken token) {
    Log.d("AUTH", "handleFacebookAccessToken:" + token.getToken());
    // ...
    AuthCredential credential = FacebookAuthProvider.getCredential(token.getToken());
    Log.d("AUTH", "Credential: "+credential);
    mAuth.signInWithCredential(credential)
            .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    Log.d("AUTH", "signInWithCredential:onComplete:" + task.isSuccessful());

                    // If sign in fails, display a message to the user. If sign in succeeds
                    // the auth state listener will be notified and logic to handle the
                    // signed in user can be handled in the listener.
                    if (!task.isSuccessful()) {
                        Log.w("AUTH", "signInWithCredential", task.getException());
                        Toast.makeText(LoginActivity.this, "Authentication failed.",
                                Toast.LENGTH_SHORT).show();
                    }

                    // ...
                }
            });
}

Facebook 方面一切正常,但在使用检索到的 fb 凭据登录时,signInWithCredential 函数不会运行任何回调,而且我的用户数据库中似乎没有任何事情发生。

此外,我尝试了更简单的方法

mAuth.createUserWithEmailAndPassword(etUserID.getText().toString(), etPassword.getText().toString());

也没有任何反应。我已经在我的 Firebase 控制台中启用了这两个提供程序,并为该项目下载了最新的 google-services.json 文件。我错过了什么吗?

编辑:刚刚尝试运行快速启动身份验证演示,但效果不佳。我确实在我的模拟器上看到,除非我更新谷歌服务,否则这个应用程序将无法运行。这是导致此错误的原因吗?我尝试在各种模拟器上更新谷歌服务,但只是返回一个错误。

【问题讨论】:

  • 我认为问题与回调未完成有关,因为没有回调触发......类似于这个问题:stackoverflow.com/questions/29975024/…
  • 我也看到了。尝试了自定义和匿名身份验证,它们都不起作用。只是不调用回调。

标签: android facebook firebase firebase-authentication


【解决方案1】:

只能在真正的 android 设备上运行,但在模拟器上没有运气。

对于设备,您需要在应用的 gradle 文件中添加以下依赖项:

compile 'com.google.android.gms:play-services-auth:9.0.2'

我没有测试过,但是如果你用更新的谷歌播放服务更新模拟器图像,它也应该可以工作。

希望对你有帮助。

【讨论】:

    【解决方案2】:

    解决了感谢@feroult 帖子和其他资源。在我的情况下,OnCompleteListener 在我使用新版本的 Play Services Library 和 Firebase 库更新 build.gradle 后从未被调用过。解决方案是更新安装在模拟器上的 Play Services App。

    在我的例子中,它开始使用安装在模拟器上的 11.0.4 版本的 Play 服务库和 11.3.02 版本的 Play 服务应用程序。

    【讨论】:

    • 截图很有帮助!更新 google play 服务也为我解决了这个问题。
    【解决方案3】:

    问题似乎是由某些模拟器不支持最新版本的 Google Play 服务引起的! (您将在 logcat 中看到一个错误)带有 Google API 的 Galaxy Nexus 5x API 23 似乎适用于登录。

    【讨论】:

    • 你能弄清楚这个吗?我正在运行 Nexus 5,并且 task.isSuccessful() 总是错误的。不管我做什么,现在都不知道该怎么办?
    • 您在获取凭据时一定做错了。我什至在启动 onComplete 时遇到了问题,但我猜这对你有用,你正在检查 task.isSuccessful() 那里的值。
    【解决方案4】:

    我遇到了同样的问题,最终我忘记在 firebase 控制台中启用它

    【讨论】:

      【解决方案5】:

      在物理设备上,我确实需要更新 Google Play 服务才能让回调正常工作

      【讨论】:

        【解决方案6】:

        我在这里遇到了同样的问题,解决方法很简单:停止使用模拟器并开始使用物理设备来测试应用程序。我不知道为什么,但似乎模拟器在处理 firebase 时遇到了一些问题:/

        【讨论】:

          猜你喜欢
          • 2021-08-18
          • 2014-01-26
          • 1970-01-01
          • 2015-10-08
          • 1970-01-01
          • 1970-01-01
          • 2023-02-12
          • 1970-01-01
          • 2014-03-28
          相关资源
          最近更新 更多