首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android错误:"GetToken状态代码:INVALID_AUDIENCE失败“

Android错误:"GetToken状态代码:INVALID_AUDIENCE失败“
EN

Stack Overflow用户
提问于 2017-02-16 15:31:54
回答 3查看 5.8K关注 0票数 14

关于这个模糊的错误代码,已经有几个问题了,但是没有人为我解决这个问题,所以我会再试一次。首先,这是用于登录的样板代码。

代码语言:javascript
复制
      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并注意到标题中的错误消息。然后,我寻找其他人与这个问题,但一直未能找到问题是什么,在我的情况下。

因此,让我们检查一下其他帖子中常见的问题。

  • Firebase控制台显示我的应用程序注册了正确的SHA-1和SHA-256指纹。
  • 发行版和调试版本都使用相同的密钥存储库。
  • 在Google管理器中,配置了我的"OAuth同意屏幕“。
  • 我还验证了授权重定向URI的域
  • 我重新下载了Firebase GoogleServices.json文件,只是为了确保
  • 没有包名问题。事实上,在这个应用程序上运行得很好
  • 在Play Store控制台中,我的OAuth客户端显示在"Settings->API access“中。
  • 我的Firebase项目在Play Store dev控制台“链接帐户”设置部分中链接
  • 我已经等了10个小时了,只是想看看Google的后端是否需要时间来设置它

为了便于搜索,在标题中的logcat错误消息之后,我得到了下面的logcat打印。

您有错误的OAuth2相关配置,请检查。详细错误: INVALID_AUDIENCE

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-03-07 21:22:13

Web客户端ID必须在与Firebase相同的用户帐户中生成,而不是在Play Store帐户中生成。在我的例子中,这两个帐户是分开的,Google抛出这个错误,而不是正确地链接信息。我的Firebase帐户链接到我的Play Store帐户,但这显然并不意味着web客户端ID将被共享。我尝试了其他一些解决方案,比如链接API帐户,但这也不起作用。必须在与Firebase帐户相同的API Manager帐户中使用的同一个项目Firebase中创建Web客户端ID。

票数 2
EN

Stack Overflow用户

发布于 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,然后选择要集成的设置。我不建议人工添加。

票数 0
EN

Stack Overflow用户

发布于 2017-03-07 08:53:26

实现到您的活动

代码语言:javascript
复制
GoogleApiClient.OnConnectionFailedListener

设置这些私有变量

代码语言:javascript
复制
private GoogleApiClient mGoogleApiClient;
private FirebaseAuth mFirebaseAuth;
private FirebaseAuth mFirebaseAuth;
private static final int RC_SIGN_IN = 9001;

中配置Google签名

代码语言:javascript
复制
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

代码语言:javascript
复制
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()

    }

符号在方法中的应用

代码语言:javascript
复制
private void signIn() {
    Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient);
    startActivityForResult(signInIntent, RC_SIGN_IN);
}

onActivityResult()

代码语言:javascript
复制
@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

代码语言:javascript
复制
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()

代码语言:javascript
复制
 @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();
}

签出方法

代码语言:javascript
复制
private void signOut() {
        Auth.GoogleSignInApi.signOut(mGoogleApiClient).
                setResultCallback(new ResultCallback<Status>() {
                    @Override
                    public void onResult(@NonNull Status status) {
                    }
                });
        mFirebaseAuth.signOut();
}

把日志保存在每一点上。如果你把所有的要点与你所做的清单正确地结合起来,它就会起作用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42278223

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档