Google 登录但结果代码为 0

问题描述 投票:0回答:9

我想为我的应用程序创建一个 Google 标志,但我的结果代码

onActivityResult()
是 0

在我的

onCreate()
方法中,我像这样启动函数
startSignInIntent()

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //some other stuff
        view.loadUrl(myURL);
        startSignInIntent();
}

这是

startSignInIntent()

private void startSignInIntent() {
        GoogleSignInClient signInClient = GoogleSignIn.getClient(this,
                GoogleSignInOptions.DEFAULT_SIGN_IN);
        Intent intent = signInClient.getSignInIntent();
        startActivityForResult(intent, RC_SIGN_IN);
    }

这是

onActivityResult()

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        Log.d(TAG, "data : " + resultCode + " | " + data  + " || " + RC_SIGN_IN + " ||| " + requestCode);
        if (requestCode == RC_SIGN_IN) {
            GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
            if (result.isSuccess()) {
                // The signed in account is stored in the result.
                GoogleSignInAccount signedInAccount = result.getSignInAccount();
            } else {
                String message = result.getStatus().getStatusMessage();
                if (message == null || message.isEmpty()) {
                    Toast.makeText(this, "Login failed", Toast.LENGTH_LONG).show();
                }
                new AlertDialog.Builder(this).setMessage(message)
                        .setNeutralButton(android.R.string.ok, null).show();
            }
        }

这是函数中日志的结果

onActivityResult()

0 |意图{(有额外内容)}|| 2 ||| 2

选择帐户后,我可以在弹出窗口中选择我的帐户。我得到这个屏幕,但当我看到登录已经失败时。看照片:

android webview google-play-services google-signin
9个回答
19
投票

我也遇到了同样的错误,requestCode 始终为 0 (RESULT_CANCELED)。

决定在 firebase 控制台中启用 google 登录。

Firebase 控制台 -> 您的项目 -> 身份验证 -> 提供商 -> Google -> 并将其打开。

就我而言,链接是这样的

https://console.firebase.google.com/u/0/project/{项目名称}/authentication/providers


11
投票

尝试检查您是否为您的应用程序正确配置了正确的 OAuth 密钥。根据这个相关的SO post,OP注意到身份验证密钥也与创建问题的其他项目相关联。

您还可以查看以下Try Sign-In for Android的实现,了解代码实现:

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    // Result returned from launching the Intent from GoogleSignInClient.getSignInIntent(...);
    if (requestCode == RC_SIGN_IN) {
        // The Task returned from this call is always completed, no need to attach
        // a listener.
        Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);
        handleSignInResult(task);
    }
}

另外,OP提供了一些额外的信息,您在测试时需要确保您已经签署了APK。有关详细信息,请参阅有关签署您的应用程序的文档。

希望这有帮助。


4
投票

我在使用 Android 模拟器时也遇到了同样的问题。事实证明,模拟器已与互联网断开连接,这就是为什么 firebase 会抛出上述错误。


4
投票

确保将 OAuth 同意屏幕的发布状态设置为 生产状态而不是测试状态


2
投票

我想分享我的经验,尽管它不适用于原始案例。我的搜索到达这里是因为我遇到了同样的问题 - startActivityForResult 立即返回,结果代码 = 0。

我的原因是包名错误。我有一个有几个变体的应用程序,每个变体都有不同的包名称。 Google 登录要求 Android 应用程序的包名称与 Google API 控制台的 Android 项目的包名称之一匹配。我为一种变体建立了一个项目,但没有为其他变体建立一个项目。当我为 Google API 控制台创建项目后,登录就开始完美运行。


1
投票

就我而言,我忘记将项目 ID 添加到 AndroidManifest.xml 中。 因此:

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

并在文件夹 res/values 中创建文件 ids.xml 并设置项目的 ID

<string name="app_id" translatable="false">numberOfProject</string>

0
投票

我专门在 android jellybean 上发生了这种情况,事实证明,如果我使用的登录活动启动模式不是清单中的标准或单顶模式,则 onActivityResult() 将立即返回,而无需实际等待结果。

 <activity
       android:name=".SignInActivity"
        android:excludeFromRecents="true"
        android:exported="true"
        android:launchMode="singleTop"
        android:permission="com.google.firebase.auth.api.gms.permission.LAUNCH_FEDERATED_SIGN_IN"
        tools:replace="android:launchMode"/>

0
投票

刚刚修复了这个问题...我试图清理凭证中的一些 OAuth ID,但删除了一个错误的 ID。

我发现此设置将创建 2 个 OAuth 2.0 客户端 ID:

  • OAuth 客户端(类型:Android)
  • Web 客户端(为 Google 登录自动创建)(类型:Web 应用程序)<- the one I missed

0
投票

Play 商店有 Sha-1 密钥;您需要将该密钥添加到您的 Firebase 项目中。并且在 Firebase 中,您需要接受 Google 身份验证。

© www.soinside.com 2019 - 2024. All rights reserved.