google登录android后报错12501
Posted
技术标签:
【中文标题】google登录android后报错12501【英文标题】:Error 12501 after google sign in on android 【发布时间】:2017-08-17 16:00:54 【问题描述】:我在一个名为 JNI throught networkHandler_GoogleSignin 的库中有一个类,它将启动执行 google 登录的片段活动。帐户选择显示良好,但选择帐户后出现此错误 12501:StatusstatusCode=unknown status code: 12501, resolution=null 和片段的onActivityResult中的resultCode 0。 我搜索了这个错误的原因,才发现这个错误与Oauth有关,所以我尝试了or没有 .requestIdToken(...) 但得到了同样的错误。我还尝试将 google-services.json 放在主项目和库项目的根或应用程序文件夹中,同样的错误(无论如何,我的项目在 Eclipse 上,我知道在 Eclipse 上不需要这个 json 文件)。 那么可能是什么原因呢?这是我的代码:
public class LibNetworkHandler extends FragmentActivity implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener
static GoogleApiClient mGoogleApiClient;
static final int RC_SIGN_IN = 1;
public static native void requestCompletedCallback(String result);
private static Intent thisActivity;
private static Activity mainActivity;
@Override
public void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
//.requestIdToken(web_client_id)
.requestEmail()
.build();
mGoogleApiClient = new GoogleApiClient.Builder(S3DXandroidTools.getMainActivity().getApplicationContext())
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.addApi(Auth.GOOGLE_SIGN_IN_API, gso)
.build();
Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient);
startActivityForResult(signInIntent, RC_SIGN_IN);
@Override
public void onStart()
super.onStart();
mGoogleApiClient.connect();
@Override
public void onStop()
super.onStop();
mGoogleApiClient.disconnect();
public static void networkHandler_GoogleSignin (final String parameters)
setIncomingParameters(parameters);
mainActivity = S3DXAndroidTools.getMainActivity();
thisActivity = new Intent(S3DXAndroidTools.getMainActivity().getApplicationContext(),LibNetworkHandler.class);
mainActivity.startActivity(thisActivity);
Log.e("test", "test45 : " + thisActivity.toString());
@Override public void onActivityResult(int requestCode, int resultCode, Intent data)
Log.e("test", "test35 : " + data.toString());
// Result returned from launching the Intent from
// GoogleSignInApi.getSignInIntent(...);
if (requestCode == RC_SIGN_IN)
GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
if (result.isSuccess()) Log.e("test", "test3");
GoogleSignInAccount acct = result.getSignInAccount();
String output=setOutputParameters(acct.getId());
requestCompletedCallback(output);
else
Log.e("test", "test27 : "+result.getStatus().toString());
@Override
public void onConnectionFailed(ConnectionResult arg0)
Log.e("error", "connexion failed ");
@Override
public void onConnected(Bundle arg0)
if(mGoogleApiClient.isConnected())
Log.e("test", "Google play connexion ok");
@Override
public void onConnectionSuspended(int arg0)
// TODO Auto-generated method stub
编辑
我发现了问题所在:似乎在将我的项目迁移到 firebase 并将库包和主包都添加到我需要在我的库 build.gradle 中导入 firebase 插件的同一个项目下,即使我没有在我的代码中使用 firebase 登录。此外,在其上迁移项目后,有效的 web id 密钥发生了变化,并且 .requestIdToken() 方法似乎不是 firebase 的可选方法
【问题讨论】:
请注意Eclipse is no longer officially supported for Android Development。使用 Eclipse 可能会阻止您快速创建应用程序和查找构建项目所需的资源。所以也许这就是您收到此错误的原因。要从 Eclipse 迁移到 Android Studio,只需关注来自 Google 开发人员的 tutorial。 有关此错误 12501 的更多信息,请检查这些相关的 SO 问题 33846801 和 34600278 是否可以帮助您。 @KENdi 我也在 Android Studio 上尝试过,但我遇到了完全相同的错误。此外,我检查了您链接的问题,但问题的原因是使用 .requestIdToken(...),我没有添加 【参考方案1】:这可能是由于 Sha-1 和 Sha-256 版本和调试密钥不匹配造成的。
将所有三个(调试:Sha-1,发布:Sha-1 和 Sha-256)键添加到 firebase 控制台,然后重新下载 json 并替换。
对我来说很好用。
【讨论】:
以上是关于google登录android后报错12501的主要内容,如果未能解决你的问题,请参考以下文章