在 Android 中使用 Google Play 游戏服务登录出现12501 报错

添加Google Play服务

在项目的顶级build.gradle文件中,确保包含Google的Maven存储库:
allprojects {
repositories {
google()

    // If you're using a version of Gradle lower than 4.1, you must instead use:
    // maven {
    //     url 'https://maven.google.com'
    // }
}

}
然后,在您的应用程序级别的build.gradle文件中,将Google Play服务声明为依赖项:
apply plugin: ‘com.android.application’

dependencies {
    implementation 'com.google.android.gms:play-services-auth:19.0.0'
}

配置Google API控制台项目

要配置Google API控制台项目,请点击下面的按钮,并在出现提示时指定应用的程序包名称。您还需要提供签名证书的SHA-1哈希。有关信息,请参见验证客户端。
获取后端服务器的OAuth 2.0客户端ID
如果您的应用通过后端服务器进行身份验证或从后端服务器访问Google API ,则必须获取为服务器创建的OAuth 2.0客户端ID。要查找OAuth 2.0客户端ID,请执行以下操作:

在API控制台中打开“凭据”页面。
Web应用程序类型的客户端ID是您的后端服务器的OAuth 2.0客户端ID。
注意:如果您最近尚未创建新的Android客户端,则可能没有Web应用程序类型的客户端ID。您可以通过打开“凭据”页面并单击“新建凭据”>“ OAuth客户端ID”来创建一个。
创建GoogleSignInOptions对象时,将此客户端ID传递给requestIdToken或requestServerAuthCode方法。

配置AndroidManifest.xml

添加 这两句

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

一定要原封不动使用这两句。要不然的话就会登陆异常。我就试过把app_id直接替换上面的。登陆一直报 12501 错误。只有严格按文档说做的才不会有问题。

配置Google登录和GoogleSignInClient对象

在登录活动的onCreate方法中,配置Google登录以请求您的应用所需的用户数据。例如,要配置Google登录以请求用户ID和基本个人资料信息,请使用DEFAULT_SIGN_IN参数创建一个GoogleSignInOptions对象。要同时请求用户的电子邮件地址,请使用requestEmail选项创建GoogleSignInOptions对象。

代码

// Configure sign-in to request the user’s ID, email address, and basic
// profile. ID and basic profile are included in DEFAULT_SIGN_IN.
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestEmail()
.build();

然后,同样在登录活动的onCreate方法中,使用您指定的选项创建一个GoogleSignInClient对象。

代码

// Build a GoogleSignInClient with the options specified by gso.
mGoogleSignInClient = GoogleSignIn.getClient(this, gso);

登录函数

private void signIn() {
Intent signInIntent = mGoogleSignInClient.getSignInIntent();
startActivityForResult(signInIntent, RC_SIGN_IN);
}

用户GoogleSignInAccount后,您可以在活动的onActivityResult方法中获取该用户的GoogleSignInAccount对象。

@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);
}

}

最后特别注意。
1.首先检查包名和指纹 SHA1 是否有效。
2.如果您的应用没有通过验证并且没有发布,那么请确保要授权的用户在测试人员列表中(这可以在 APIs & Service -> OAuth 同意屏幕 -> 测试用户中查看)
怀疑android studio中包名中的所有字母都应该小写。
在我的例子中,它有助于创建一个新项目,将旧文件传输到它,并创建一个新的 OAuth 客户端 ID。

https://developers.google.com/identity/sign-in/android/sign-in
https://firebase.google.com/docs/auth/android/play-games

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值