com.google.android.gms.common.api.ApiException: 16:
com.google.android.gms.common.api.ApiException: 16:
我尝试了解如何在我的 android 应用程序中使用 google 登录,但我发现 com.google.android.gms.common.api.ApiException: 16
而且我在 stackoveflow 上找不到答案,它是什么以及为什么我抓住它。在我阅读的文档中,它 "was canceled by user",但我的 google 帐户接受安装应用程序
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()
}
}
}
我关注了this guide。做了项目的配置。
如果重要的话,我为此使用 VDS。帐户是在同一个地方创建的
这里是堆栈跟踪:
com.google.android.gms.common.api.ApiException: 16:
at com.google.android.gms.common.internal.ApiExceptionUtil.fromStatus(Unknown Source)
at com.google.android.gms.auth.api.signin.GoogleSignIn.getSignedInAccountFromIntent(Unknown Source)
at foryou.friendly.alisa.alisa.MainActivity.onActivityResult(MainActivity.kt:47)
at android.app.Activity.dispatchActivityResult(Activity.java:7124)
at android.app.ActivityThread.deliverResults(ActivityThread.java:4173)
at android.app.ActivityThread.handleSendResult(ActivityThread.java:4220)
at android.app.ActivityThread.-wrap20(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1579)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:163)
at android.app.ActivityThread.main(ActivityThread.java:6228)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:904)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:794)
我遇到了同样的问题,开始 activity 结果一直返回 RESULT_CANCELED 和错误代码 16。问题是我在 Google Cloud Platform Console 中的客户端配置。我使用的是常规调试和发布 api 键。当我使用 网络应用程序 作为我的 Google 控制台配置时,结果返回 OK
。
希望对您有所帮助。
可能来晚了,但经过 4 个多小时的调试,我意识到:
1.- 在 OAuth 客户端 ID 列表下添加一个带有您的签名证书指纹的 Android 客户端。这是强制性的。
2.- 在您的代码中添加 Web 应用程序客户端 ID,以防您需要获取 ID 令牌
// ID and basic profile are included in DEFAULT_SIGN_IN
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken("YOUR_CLIENT_ID")
.requestEmail()
.build();
希望对您有所帮助
遇到了同样的问题,原来我没有在 firebase 项目设置 上设置 支持邮件。
如果是这种情况,firebase 将在尝试时向您显示编辑项目设置在 Firebase 身份验证 上启用Google 登录。您可以从 firebase
复制您的客户端 ID
对我来说,唯一有用的是提供 2 个 oauth 客户端 ID。 Web 应用程序客户端 ID 和 android 客户端 ID
在我的 android 应用程序中,我使用 Web 应用程序的客户端 ID 和客户端密码。即使我没有在我的应用程序中的任何地方使用 android 客户端 ID,它仍然是必需的。即,如果我在 google api 控制台中删除 oauth android 客户端,即使我没有在我的应用程序中的任何地方使用该客户端 ID,我的应用程序也会停止工作。
这对我来说完全没有意义!去搞清楚 。但到目前为止,这是唯一有效的方法。
un-freaking-believable.
我正在使用 Flutter 开发一个 Android 应用程序,尝试集成 Google 登录并遇到与 ApiException 相同的问题:16 和 SIGN_IN_FAILED(而不是 RESULT_CANCELED)。
Firebase 上的应用程序类型设置为 android。
就我而言,经过数小时的调试后,结果证明这是一个错误的 SHA-1 问题。
我从我的项目中提取 SHA-1 密钥并更新 Firebase 控制台后,它就起作用了。
我使用了从下载项目设置中找到的不同的 oauth id 密钥,并在项目中添加了 client 3 密钥。
我尝试了解如何在我的 android 应用程序中使用 google 登录,但我发现 com.google.android.gms.common.api.ApiException: 16 而且我在 stackoveflow 上找不到答案,它是什么以及为什么我抓住它。在我阅读的文档中,它 "was canceled by user",但我的 google 帐户接受安装应用程序
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()
}
}
}
我关注了this guide。做了项目的配置。 如果重要的话,我为此使用 VDS。帐户是在同一个地方创建的
这里是堆栈跟踪:
com.google.android.gms.common.api.ApiException: 16:
at com.google.android.gms.common.internal.ApiExceptionUtil.fromStatus(Unknown Source)
at com.google.android.gms.auth.api.signin.GoogleSignIn.getSignedInAccountFromIntent(Unknown Source)
at foryou.friendly.alisa.alisa.MainActivity.onActivityResult(MainActivity.kt:47)
at android.app.Activity.dispatchActivityResult(Activity.java:7124)
at android.app.ActivityThread.deliverResults(ActivityThread.java:4173)
at android.app.ActivityThread.handleSendResult(ActivityThread.java:4220)
at android.app.ActivityThread.-wrap20(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1579)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:163)
at android.app.ActivityThread.main(ActivityThread.java:6228)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:904)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:794)
我遇到了同样的问题,开始 activity 结果一直返回 RESULT_CANCELED 和错误代码 16。问题是我在 Google Cloud Platform Console 中的客户端配置。我使用的是常规调试和发布 api 键。当我使用 网络应用程序 作为我的 Google 控制台配置时,结果返回 OK
。
希望对您有所帮助。
可能来晚了,但经过 4 个多小时的调试,我意识到:
1.- 在 OAuth 客户端 ID 列表下添加一个带有您的签名证书指纹的 Android 客户端。这是强制性的。
2.- 在您的代码中添加 Web 应用程序客户端 ID,以防您需要获取 ID 令牌
// ID and basic profile are included in DEFAULT_SIGN_IN
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken("YOUR_CLIENT_ID")
.requestEmail()
.build();
希望对您有所帮助
遇到了同样的问题,原来我没有在 firebase 项目设置 上设置 支持邮件。
如果是这种情况,firebase 将在尝试时向您显示编辑项目设置在 Firebase 身份验证 上启用Google 登录。您可以从 firebase
复制您的客户端 ID对我来说,唯一有用的是提供 2 个 oauth 客户端 ID。 Web 应用程序客户端 ID 和 android 客户端 ID
在我的 android 应用程序中,我使用 Web 应用程序的客户端 ID 和客户端密码。即使我没有在我的应用程序中的任何地方使用 android 客户端 ID,它仍然是必需的。即,如果我在 google api 控制台中删除 oauth android 客户端,即使我没有在我的应用程序中的任何地方使用该客户端 ID,我的应用程序也会停止工作。
这对我来说完全没有意义!去搞清楚 。但到目前为止,这是唯一有效的方法。
un-freaking-believable.
我正在使用 Flutter 开发一个 Android 应用程序,尝试集成 Google 登录并遇到与 ApiException 相同的问题:16 和 SIGN_IN_FAILED(而不是 RESULT_CANCELED)。
Firebase 上的应用程序类型设置为 android。
就我而言,经过数小时的调试后,结果证明这是一个错误的 SHA-1 问题。
我从我的项目中提取 SHA-1 密钥并更新 Firebase 控制台后,它就起作用了。
我使用了从下载项目设置中找到的不同的 oauth id 密钥,并在项目中添加了 client 3 密钥。