com.google.android.gms.common.api.ApiException:16:

时间:2018-09-19 14:05:30

标签: android google-signin googlesigninaccount

我尝试学习如何在我的Android应用程序中使用Google登录,但是我发现 com.google.android.gms.common.api.ApiException:16 而且我在stackoveflow上找不到答案,它是什么,为什么我抓住了它。在我阅读的文档中,它“被用户取消了”,但是我的Google帐户同意安装应用程序

models.ManyToManyField()

我关注了this guide。做了项目的配置。 如果有关系,我可以使用VDS。帐户是在同一位置创建的

这是stackTrace:

import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import com.google.android.gms.auth.api.signin.GoogleSignIn
import com.google.android.gms.auth.api.signin.GoogleSignInOptions
import com.google.android.gms.auth.api.signin.GoogleSignInAccount
import android.content.Intent
import com.google.android.gms.tasks.Task
import com.google.android.gms.common.api.ApiException

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val gso = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                .requestEmail()
                .build()

        val mGoogleSignInClient = GoogleSignIn.getClient(this, gso)
        val account = GoogleSignIn.getLastSignedInAccount(this)
        if(account != null){
            Log.e("!!!", account.email)
        } else {
            val signInIntent = mGoogleSignInClient.signInIntent
            startActivityForResult(signInIntent, 0)
        }
    }

    public override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)

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

    private fun handleSignInResult(completedTask: Task<GoogleSignInAccount>) {
        try {
            val account = completedTask.getResult(ApiException::class.java)

            // Signed in successfully, show authenticated UI.
            Log.e("!!!", account.email)
        } catch (e: ApiException) {
            e.printStackTrace()
        }

    }

}

6 个答案:

答案 0 :(得分:6)

我遇到了同样的问题,开始活动结果一直返回RESULT_CANCELED和errorCode16。问题是我在Google Cloud Platform Console中的客户端配置。我正在使用常规的调试和发布api密钥。当我将网络应用用作Google控制台配置时,结果返回OK

希望有帮助。

答案 1 :(得分:1)

遇到同样的问题,原来我没有在 firebase项目设置上设置支持邮件

在这种情况下, firebase 会在尝试启用 Google 标志时向您显示 编辑项目设置 输入。您可以从Firebase复制客户端ID

答案 2 :(得分:0)

在这里参加聚会可能有点晚,但是经过4个多小时的调试,我意识到:

1.-在OAuth客户端ID列表下添加带有签名证书指纹的Android客户端。这是强制性的。

2.-在您的代码中添加Web应用程序客户端ID,以防您需要获取ID令牌

\

希望有帮助

答案 3 :(得分:0)

对我来说,唯一有效的方法是提供 2个oauth客户端ID 。一个Web应用程序客户端ID和一个android客户端ID

在我的Android应用程序中,我使用Web应用程序的客户端ID和客户端密码。即使我在我的应用中的任何地方都没有使用android客户端ID,它仍然是必需的。即,如果我在Google api控制台中删除了oauth android客户端,则我的应用将停止运行,即使我在我的应用中也不会使用该客户端ID。

这对我来说绝对没有任何意义!去搞清楚 。到目前为止,这是唯一有效的方法。

让人难以置信。

答案 4 :(得分:0)

我正在使用Flutter开发一个Android应用程序,试图集成Google登录并遇到 ApiException:16 SIGN_IN_FAILED (而不是RESULT_CANCELED)的相同问题。 / p>

Firebase上的应用程序类型设置为android。

就我而言,经过数小时的调试,事实证明这是错误的 SHA-1问题

从我的项目中提取SHA-1密钥并更新Firebase控制台后,它便开始工作。

答案 5 :(得分:0)

我使用了一个不同的oauth id密钥,该密钥是从下载项目设置中找到的,并在项目中添加了客户端3密钥。