关于这个模糊的错误代码,已经有几个问题了,但是没有人为我解决这个问题,所以我会再试一次。首先,这是用于登录的样板代码。
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestEmail()
.requestServerAuthCode("web app client ID copied from Dev API Console", false)
.build();
mGoogleApiClient = new GoogleApiClient.Builder(this).enableAutoManage(this, this).addApi(Auth
.GOOGLE_SIGN_IN_API, gso).build();
Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient);
startActivityForResult(signInIntent, RC_SIGN_IN);使用此代码,我将得到一个对话框,并可以选择适当的用户帐户。耶!但是,我在onActivityResult中得到了一个已取消的代码,所以我检查logcat并注意到标题中的错误消息。然后,我寻找其他人与这个问题,但一直未能找到问题是什么,在我的情况下。
因此,让我们检查一下其他帖子中常见的问题。
为了便于搜索,在标题中的logcat错误消息之后,我得到了下面的logcat打印。
您有错误的OAuth2相关配置,请检查。详细错误: INVALID_AUDIENCE
发布于 2017-03-07 21:22:13
Web客户端ID必须在与Firebase相同的用户帐户中生成,而不是在Play Store帐户中生成。在我的例子中,这两个帐户是分开的,Google抛出这个错误,而不是正确地链接信息。我的Firebase帐户链接到我的Play Store帐户,但这显然并不意味着web客户端ID将被共享。我尝试了其他一些解决方案,比如链接API帐户,但这也不起作用。必须在与Firebase帐户相同的API Manager帐户中使用的同一个项目Firebase中创建Web客户端ID。
发布于 2017-03-07 04:40:50
问题在于您的client_id,对于google process.Delete,来自当前project.Then的文件添加了一个新实例。这一次要小心注意身份。使用android生成防火墙的设置。您必须有一个具有多个客户is的项目,其中一个用于android应用程序,带有SHA。最安全的选择是删除google console.Then中的当前项目,在android、go tools= > firebase中重新创建it.Then,然后选择要集成的设置。我不建议人工添加。
发布于 2017-03-07 08:53:26
实现到您的活动
GoogleApiClient.OnConnectionFailedListener设置这些私有变量
private GoogleApiClient mGoogleApiClient;
private FirebaseAuth mFirebaseAuth;
private FirebaseAuth mFirebaseAuth;
private static final int RC_SIGN_IN = 9001;在中配置Google签名
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken(SignInActivity.this.getResources().getString(R.string.default_web_client_id))
.requestEmail()
.build();
mGoogleApiClient = new GoogleApiClient.Builder(this)
.enableAutoManage(this /* FragmentActivity */, this /* OnConnectionFailedListener */)
.addApi(Auth.GOOGLE_SIGN_IN_API, gso)
.build();初始化FirebaseAuth
mFirebaseAuth = FirebaseAuth.getInstance();
mFirebaseUser = mFirebaseAuth.getCurrentUser();
if (mFirebaseUser == null) {
// Not signed in, launch the Sign In activity
} else {
// Already signed in, launch the Home activity
//You can use mFirebaseUser.getDisplayName() / getUid() / getEmail() /getPhotoUrl()
}符号在方法中的应用
private void signIn() {
Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient);
startActivityForResult(signInIntent, RC_SIGN_IN);
}onActivityResult()
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Log.e("Data",data.getExtras().toString());
// Result returned from launching the Intent from GoogleSignInApi.getSignInIntent(...);
if (requestCode == RC_SIGN_IN) {
GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
Log.e("Result","status "+result.getStatus()+"Success"+result.isSuccess()+" "+result.getSignInAccount());
if (result.isSuccess()) {
// Google Sign In was successful, authenticate with Firebase
GoogleSignInAccount account = result.getSignInAccount();
firebaseAuthWithGoogle(account);
} else {
// Google Sign In failed
Log.e(TAG, "Google Sign In failed.");
}
}
}firebaseAuthWithGoogle
private void firebaseAuthWithGoogle(GoogleSignInAccount acct) {
Log.d(TAG, "firebaseAuthWithGoogle:" + acct.getId());
AuthCredential credential = GoogleAuthProvider.getCredential(acct.getIdToken(), null);
mFirebaseAuth.signInWithCredential(credential)
.addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
Log.d(TAG, "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(TAG, "signInWithCredential", task.getException());
Toast.makeText(SignInActivity.this, "Authentication failed.",
Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(SignInActivity.this, "Authentication Successful.",
Toast.LENGTH_SHORT).show();
}
}
});
}onConnectionFailed()
@Override
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
// An unresolvable error has occurred and Google APIs (including Sign-In) will not
// be available.
Log.d(TAG, "onConnectionFailed:" + connectionResult);
Toast.makeText(this, "Google Play Services error.", Toast.LENGTH_SHORT).show();
}签出方法
private void signOut() {
Auth.GoogleSignInApi.signOut(mGoogleApiClient).
setResultCallback(new ResultCallback<Status>() {
@Override
public void onResult(@NonNull Status status) {
}
});
mFirebaseAuth.signOut();
}把日志保存在每一点上。如果你把所有的要点与你所做的清单正确地结合起来,它就会起作用。
https://stackoverflow.com/questions/42278223
复制相似问题