我尝试学习如何在我的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()
}
}
}
答案 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密钥。