com.google.android.gms.common.api.ApiException:12500
Posted
技术标签:
【中文标题】com.google.android.gms.common.api.ApiException:12500【英文标题】:com.google.android.gms.common.api.ApiException: 12500 【发布时间】:2019-03-18 00:23:01 【问题描述】:这是我的第一次尝试....试图找到过去 2 天的问题。 我正在尝试将 google 登录集成到 android 应用程序中,但是如下: com.google.android.gms.common.api.ApiException: 12500
遵循以下代码: https://firebase.google.com/docs/auth/android/google-signin
确保开发控制台中存在 oauth 客户端 ID,并按照其他帖子中的建议使用来自 ~/.android/debug.keystore 的正确 SHA-1 指纹。
在应用级别使用最新的播放服务 49 和 build.gradle:实现 'com.google.android.gms:play-services-auth:16.0.1'
在项目级 build.gradle 中使用以下代码:
buildscript // ... 依赖项 // ... 类路径 'com.google.gms:google-services:4.1.0' // google-services 插件
public class SignUpActivity extends AppCompatActivity
private GoogleSignInClient gsc;
private FirebaseAuth firebaseAuth;
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_signup);
GoogleSignInOptions gso = new GoogleSignInOptions
.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken(String.valueOf(R.string.gplus_api_client_id))
.requestEmail()
.build();
gsc = GoogleSignIn.getClient(this, gso);
//Initialize firebase authentication
firebaseAuth = FirebaseAuth.getInstance();
@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);
private void handleSignInResult(Task < GoogleSignInAccount > completedTask)
try
//Sign in Successful
GoogleSignInAccount account = completedTask.getResult(ApiException.class);
Log.w("SignUpActivity/handleSignInResult", "Trying signing in with Google... " + account);
firebaseAuthWithGoogle(account);
// Signed in successfully, show authenticated UI.
// Log.w("SignUpActivity/handleSignInResult", "Google sign in successful for account " + account);
catch (ApiException e)
// The ApiException status code indicates the detailed failure reason.
// Please refer to the GoogleSignInStatusCodes class reference for more information.
Log.w("SignUpActivity/handleSignInResult", "Google sign in failed with exception: " + e);
private void firebaseAuthWithGoogle(GoogleSignInAccount account)
Log.i("SignUpActivity/firebaseAuthWithGoogle", "Signed in as : " + account.getId());
AuthCredential credential = GoogleAuthProvider.getCredential(account.getIdToken(), null);
firebaseAuth.signInWithCredential(credential)
.addOnCompleteListener(this, new OnCompleteListener < AuthResult > ()
@Override
public void onComplete(@NonNull Task < AuthResult > task)
if (task.isSuccessful())
FirebaseUser user = firebaseAuth.getCurrentUser();
Log.i("SignUpActivity/firebaseAuthWithGoogle", "Sign in successful for user : " + user);
else
Log.e("SignUpActivity/firebaseAuthWithGoogle", "User Authentication failed.");
Snackbar.make(findViewById(R.id.view_signup), "Authentication failed.", Snackbar.LENGTH_SHORT);
);
【问题讨论】:
***.com/questions/47632035/google-sign-in-error-12500 昨天已经关注这些...确保在 build.gradle 中更新了当前版本的 auth api 和 firebase,使用正确的 sha1 密钥设置了 clientid 【参考方案1】:我有这个问题。并且已经解决了。 SHA1 调试和发布都已添加到 Firebase 控制台,但仍然无法正常工作。此外,我尝试只进行 SHA1 调试,但仍然无法正常工作。经过这么多尝试和错误,我通过完成凭据菜单中的“oAuth同意屏幕”信息解决了这个问题,步骤如下:
-
登录 Google Console Cloud
选择与当前 Firebase 项目相关的当前项目
导航到 API 和服务
点击凭据菜单
点击“oAuth 同意屏幕”
添加应用程序徽标、应用程序主页链接和应用程序隐私政策链接。要添加这两个链接,您只需从“oAuth 同意屏幕”的授权域部分复制和粘贴,例如:your-app-abc123.firebaseapp.com
【讨论】:
我的英雄!让我免于 2 天的头部撞击。 如果我没有网络应用怎么办?【参考方案2】:按照谷歌开发者文档,其中明确给出一步一步的说明 如何将 google 登录集成到 Android 应用中。
https://developers.google.com/identity/sign-in/android/start 重要
-
检查您是否已在 google 控制台中启用 Google plus API。
在将您的项目配置到 Google sing 中后,它应该连接到 Firebase。您只想在 firebase 上选择您的项目。
将 JSON 文件包含到您的项目浏览器中。
YOUR_SERVER_CLIENT_ID
检查您是否提供了正确的服务器客户端 ID。
【讨论】:
【参考方案3】:我为同样的错误 12500 苦苦挣扎了好几个小时。 显然您需要在此页面上填写所有必需的信息(应用名称、徽标、电子邮件、授权域) https://console.developers.google.com/apis/credentials 在 OAuth 同意屏幕选项卡上
【讨论】:
【参考方案4】:基本上,问题出在控制台上的SHA1
键上,请重新生成它并再次正确放置相同的项目。
1)作为答案,请确保您实际签名的 Android apk 具有与您在 Firebase 项目的 Android 集成部分(您可以下载 google-services.json
的页面)的控制台中指定的指纹相同的 SHA1 指纹
2) 最重要的是,转到您的 Firebase 项目的设置(齿轮图标位于左上角的概览右侧。然后切换到帐户链接标签。在该标签上,将 Google Play 链接到您的项目。
【讨论】:
【参考方案5】:如果尝试了上述所有方法后仍然无法登录,您也可以尝试在真机上运行代码。我花了两天时间尝试使用 android studio 模拟器登录。如果您在真实设备上成功登录,则需要在您的模拟器上更新 google play 服务。
【讨论】:
【参考方案6】:我在寻找这个错误的解决方案时正在使用Android模拟器。我尝试过的事情如下:
-
已创建 SHA1 证书。
通过添加应用程序徽标和支持电子邮件更新了 oAuthConsent 屏幕。
但是直到我从android模拟器切换到物理android设备之前,上述方法都不起作用。 希望这个答案可能对某人有所帮助。
学习愉快!【讨论】:
【参考方案7】:我现在遇到了同样的问题。经过一些调试,我发现我错过了在身份验证下启用谷歌登录方法。启用后就可以正常使用了。
【讨论】:
【参考方案8】:对于这个问题的最终结果,我确定您现在正在拉伸头发并一直在思考为什么它仍然不起作用。让我分享一下对我有用的东西。
在您完成以下所有操作后,仍然无法正常工作(得到所有强大的 12500 错误):
-
检查 Firebase 项目设置中的调试 SHA-1 密钥
更新了您项目中的 google-service.json
更新了您在 Firebase 项目中的支持电子邮件
更新了您的隐私链接、服务条款链接、应用程序徽标
Google API 控制台中的 Oath2 同意页面
在您的 Android 物理设备中运行
所以:
所以基本上在您的 Google API 控制台中,您将拥有 2 个 OAuth 2.0 客户端 ID。您将在这里有 2 件商品。当你点击里面时,会有一个URI,为你设置your-project.firebaseapp.com
(名称是Web客户端(由Google服务自动创建))。 不要使用那个,而是你另一个,它没有为你设置任何 URI(名称是 Web 客户端(由 Google 登录自动创建))。出于某种原因,使用第二个选项 WORKS。
希望能帮到你。享受
【讨论】:
【参考方案9】:如果您遇到平台异常并且此 com.google.android.gms.common.api.ApiException: 12500 则不要担心,请点击此链接,希望您的问题能够得到解决。
步骤:-
删除 debug.keystore 文件。该文件存储在 Windows 上的 C:\Documents and Settings
首先从您的 IDE 运行您的应用
使用这个命令生成一个新的 debug.keystore 文件,keytool -list -v -keystore "%USERPROFILE%.android\debug.keystore" -alias androiddebugkey -storepass android -keypass android 这里 USERPROFILE 表示你的 PC 用户名的名称
在 firebase 控制台中更新您的 SHA 1
下载 google_service.json 文件的更新版本
使用此链接作为参考,https://github.com/flutter/flutter/issues/25640#issuecomment-449589417
【讨论】:
以上是关于com.google.android.gms.common.api.ApiException:12500的主要内容,如果未能解决你的问题,请参考以下文章