我创建了一个应用程序但是当我尝试在我的minsdk(即API 21)上测试它时,Google Play服务将无效。
我得到的错误是com.google.android.gms.common.api.ApiException: 4:
。
我关注setup guide,这意味着我已将我的Google Play服务库设置为版本11.8.0,它说我只需使用Android 4.2.2即API 17。
我的compileSdkVersion
设置为27。
有什么大问题我在这里误解编译是如何工作的吗?该应用程序在API 26和25上运行良好,但在我尝试在API 24上使用时失败,与API 21的错误相同。
我的build.gradle文件如下所示。 https://gist.github.com/uruloke/f2f71dd6318d365cd53d74c274cd8523
使用GoogleSignInClient.silentSignIn()
中的addOnFailureListener
时,我收到以下异常
com.google.android.gms.common.api.ApiException: 4:
at com.google.android.gms.common.internal.zzb.zzy(Unknown Source)
at com.google.android.gms.common.internal.zzbk.zzz(Unknown Source)
at com.google.android.gms.common.internal.zzbl.zzr(Unknown Source)
at com.google.android.gms.common.api.internal.BasePendingResult.zzc(Unknown Source)
at com.google.android.gms.common.api.internal.BasePendingResult.setResult(Unknown Source)
at com.google.android.gms.auth.api.signin.internal.zzg.zza(Unknown Source)
at com.google.android.gms.auth.api.signin.internal.zzt.onTransact(Unknown Source)
at android.os.Binder.execTransact(Binder.java:565)
此外,如果我尝试使用GoogleSignInClient.getSignInIntent()
,启动它时不会显示任何意图,但在我的onActivityResult
中,我得到的结果不成功,但状态消息为空< / p>
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == RC_SIGN_IN) {
GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
Log.d(TAG, result.getStatus().toString());
if (result.isSuccess()) {
// The signed in account is stored in the result.
GoogleSignInAccount signedInAccount = result.getSignInAccount();
menuFragment.updateUi(signedInAccount);
} else {
String message = result.getStatus().getStatusMessage();
if (message == null || message.isEmpty()) {
message = "Failed to sign in to Play Games. Maybe try updating it?";
}
new AlertDialog.Builder(this).setMessage(message)
.setNeutralButton(android.R.string.ok, null).show();
}
}
}
答案 0 :(得分:1)
public static final int SIGN_IN_REQUIRED
客户端尝试连接到该服务但用户未登录。客户端可以选择继续而不使用API。或者,如果
hasResolution()
返回true,则客户可以致电startResolutionForResult(Activity, int)
以提示用户登录。在登录活动返回RESULT_OK
后,进一步的尝试应该会成功。常数值:4
来源:CommonStatusCodes,强调我的
看起来silentSignIn
仅在您在设备上登录Google时才有效:确切地说:
我们尝试在以下情况下为用户签名:
- 设备上只有一个匹配帐户,之前已登录过您的应用程序,
- 用户之前已授予您的应用请求此登录的所有范围。