Android Google登录失败,

时间:2018-12-10 22:32:56

标签: android google-play-services

因此,对此有很多问题,而且似乎有很多(有些矛盾)文档。

我只是想让用户登录以将分数提交到我的应用程序中的Google Play服务排行榜上。

因此他们按“显示排行榜”,然后我开始登录检查过程:

public void displayLeaderboard()
{
    if (checkPlayServices() == true)
    {
        // First, sign in.
        GoogleSignInAccount account = GoogleSignIn.getLastSignedInAccount(this);

        if (account == null)
        {
            // Need to get sign-in client?
            if (_googleSignInClient == null)
            {
                // Configure sign-in to request the user's ID, email address, and basic profile. ID and basic profile are included in DEFAULT_SIGN_IN.
                GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN).build();
                _googleSignInClient = GoogleSignIn.getClient(this, gso);
            }

            Intent signInIntent = _googleSignInClient.getSignInIntent();
            startActivityForResult(signInIntent, CALLBACK_SIGN_IN_TO_GOOGLE_ACCOUNT);
        }
        else
        {
            actualDisplayLeaderboard(account);
        }
    }
}

因此onActivityResult()确实捕获了回调,到目前为止效果很好:

protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == CALLBACK_SIGN_IN_TO_GOOGLE_ACCOUNT)
    {
        // Result returned from launching the Intent from GoogleSignInClient.getSignInIntent()
        Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);
        try
        {
            GoogleSignInAccount account = task.getResult(ApiException.class);
        // THIS IS WHERE IT FAILS
        // **********************

            // Signed in successfully.
            // ...
        }
        catch (ApiException e)
        {
            // The ApiException status code indicates the detailed failure reason.
            // Please refer to the GoogleSignInStatusCodes class reference for more information.
            System.out.println("Failed to sign in.");
            String message = e.getMessage();
            System.out.println(message);
            e.printStackTrace();
        }
    }
}

如上所述,这就是失败的地方。

12-10 17:24:54.877 12571-12571/*.*.* W/System.err: com.google.android.gms.common.api.ApiException: 12501: 
12-10 17:24:54.877 12571-12571/*.*.* W/System.err:     at com.google.android.gms.common.internal.ApiExceptionUtil.fromStatus(Unknown Source)
12-10 17:24:54.877 12571-12571/*.*.* W/System.err:     at com.google.android.gms.auth.api.signin.GoogleSignIn.getSignedInAccountFromIntent(Unknown Source)
12-10 17:24:54.887 12571-12571/org.fortheloss.sticknodespro W/System.err:     at *.*.*.AndroidLauncher.onActivityResult(AndroidLauncher.java:1013)

查看登录示例和页首横幅,我的代码看起来完全相同。

我觉得我对所有的Firebase控制台和/或Google Play服务控制台(他们已经知道了,这真是一团糟)都误入歧途了OAUTH和SHA-1东西我不知道自己需要什么,我想要什么不需要,到处都是,仍然无法使用。有些事情是针对“ Web应用程序”的-这不是Web应用程序-无论如何我都有凭据,放在应用程序中,等等-没关系,仍然不起作用。

任何指向正确方向的人都会受到赞赏。

1 个答案:

答案 0 :(得分:0)

通常,答案是在发布问题后出现的。

这是解决方法

            GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN).requestIdToken(getString(R.string.server_client_id)).requestScopes(Games.SCOPE_GAMES_LITE).build();

R.string.server_client_id的描述如此处https://developers.google.com/identity/sign-in/android/start-integrating#get_your_backend_servers_oauth_20_client_id

(起初,它带给我的页面是用于我的应用程序的另一个版本的,因此,当我使用该凭据时,它显然不起作用。然后,我意识到我需要创建一个发布版本(使用我的释放密钥库)以使其正常工作。)

示例项目无法显示/提及^

他们甚至没有使用requestIdToken(...)

编辑:原因……尽管几乎在每个类似的StackOverflow答案中都使用了它,但不使用requestIDToken的原因是因为您不应该这样做。适用于Android应用程序。这是因为您应该在Android清单(从Google Play服务控制台链接的应用程序部分获取的app_id)中拥有此功能

<meta-data android:name="com.google.android.gms.games.APP_ID" android:value="@string/app_id" />
        <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version"/>

如果您不包含Google Play服务,Google Play服务会大吼大叫的话,那将是一个很好的选择...