Google Play服务 - 最少使用的sdk

时间:2018-01-07 23:02:42

标签: android google-play-services google-play-games

我创建了一个应用程序但是当我尝试在我的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();
        }
    }
}

1 个答案:

答案 0 :(得分:1)

  

public static final int SIGN_IN_REQUIRED

     

客户端尝试连接到该服务但用户未登录。客户端可以选择继续而不使用API​​。或者,如果hasResolution()返回true,则客户可以致电startResolutionForResult(Activity, int)以提示用户登录。在登录活动返回RESULT_OK后,进一步的尝试应该会成功。

     

常数值:4

来源:CommonStatusCodes,强调我的

看起来silentSignIn仅在您在设备上登录Google时才有效:确切地说:

  

我们尝试在以下情况下为用户签名:

     
      
  • 设备上只有一个匹配帐户,之前已登录过您的应用程序,
  •   
  • 用户之前已授予您的应用请求此登录的所有范围。
  •   

来源:GoogleSignInApi#silentSignIn