我一直在浏览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文件。我错过了什么吗?
编辑:刚试过运行快速启动身份验证演示,但它也不能正常工作。我确实在我的模拟器上看到,除非我更新谷歌服务,否则这个应用程序将无法运行。这是导致此错误的原因吗?我尝试在各种模拟器上更新谷歌服务,只是返回错误。
答案 0 :(得分:6)
只在真正的Android设备上工作,但对模拟器没有幸运。
对于设备,您需要在app gradle文件中添加以下依赖项:
compile 'com.google.android.gms:play-services-auth:9.0.2'
我还没有通过测试,但似乎如果您使用较新的Google Play服务更新模拟器图片,它也应该有效。
希望它有所帮助。
答案 1 :(得分:4)
解决了这个问题感谢@feroult的帖子和其他资源。在我的情况下,在使用新版Play Services Library和Firebase库更新build.gradle后,OnCompleteListener
从未被调用过。解决方案是更新模拟器上安装的Play服务应用程序。
在我的情况下,它开始使用 11.0.4 版本的Play服务库和 11.3.02 版本的模拟器上安装的Play服务应用程序。
答案 2 :(得分:3)
似乎这个问题是由某些不支持最新版Google Play服务的模拟器引起的! (你会在logcat中看到一个错误)带有Google API的Galaxy Nexus 5x API 23似乎可以使用登录。
答案 3 :(得分:0)
答案 4 :(得分:0)
在物理设备上,我确实需要更新Google Play服务才能让回调正常工作
答案 5 :(得分:0)
我在这里遇到了同样的问题,解决方案非常简单:停止使用模拟器并开始使用物理设备来测试应用程序。我不知道为什么,但似乎模拟器在处理firebase时遇到了一些问题:/