我正在尝试将我的应用程序中的PlayGames登录服务与firebase一起使用,但是当我这样做时,始终会出现此错误:
“ com.google.firebase.auth.FirebaseAuthInvalidCredentialsException: 提供的身份验证凭证格式错误或已过期。“
我尝试过:
1-检查其他输入方法是否有效,是的,使用google服务帐户登录非常有效,该帐户显示在firebase用户部分。
2-我检查了错误代码“ ERROR_INVALID_CREDENTIAL”以找到一些解释。但是我发现的唯一信息与我在例外中获得的信息相同。
异常错误:
提供的身份验证凭证格式错误或已过期。 [ 失败 从https://www.googleapis.com/games/v1/players/me获取资源, http状态:403,http响应:{“错误”:{“错误”:[{ “ domain”:“ global”, “ reason”:“禁止”, “ message”:“禁止”}],“代码”:403,“ message”:>“ Forbidden”}}]]
我知道403错误只是凭据格式错误导致的拒绝登录。
3-我生成了一个签名的APK,以检查googleGames是否拒绝登录,因为我正在使用android调试器在设备上进行测试。但是错误仍然存在,我的设备中安装了已签名的apk。
4-我检查了服务器提供的密钥是否已过期(发送证书之前需要1行),并且该函数返回“ false”。 “ acct.isExpired()”
5-我设置了一个断点,以检查“凭据”是否正确获得了AuthCode,是的,密钥完全在其中。
6-在console.developer.google.com中,我有40个请求,从我的项目到“ Google Play游戏服务” API的调用都有100%错误。在另一个IdentityToolKit API中,我有70次调用,发生了0%错误。
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestEmail()
.requestServerAuthCode("xxx.apps.googleusercontent.com",true)
.build();
GoogleSignInClient signInClient = GoogleSignIn.getClient(this,gso);
Intent intent = signInClient.getSignInIntent();
startActivityForResult(intent, RC_SIGN_IN);
}
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == RC_SIGN_IN) {
Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);
try {
// Google Sign In was successful, authenticate with Firebase
GoogleSignInAccount account = task.getResult(ApiException.class);
firebaseAuthWithPlayGames(account);
} catch (ApiException e) {
// Google Sign In failed, update UI appropriately
Log.w(TAG, "Google sign in failed", e);
}
}
}
private void firebaseAuthWithPlayGames(GoogleSignInAccount acct) {
mAuth = FirebaseAuth.getInstance();
FirebaseUser currentUser = mAuth.getCurrentUser();
AuthCredential credential = PlayGamesAuthProvider.getCredential(acct.getServerAuthCode());
Log.d(TAG, "firebaseAuthWithPlayGames4:" + acct.isExpired());
mAuth.signInWithCredential(credential)
.addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()) {
Log.d(TAG, "signInWithCredential:success");
FirebaseUser user = mAuth.getCurrentUser();
} else {
//here get the exception error always
Log.w(TAG, "signInWithCredential:failure", task.getException());
Toast.makeText(MainActivity.this, "Authentication failed.", Toast.LENGTH_SHORT).show();
}
}
});
}
什么是格式错误?我如何才能获得良好的认证证书?我必须在凭证中添加更多信息吗?我在firebase或开发人员控制台中缺少某些配置吗?