【问题标题】:Google Play Services - which min sdk to useGoogle Play Services - 使用哪个 min sdk
【发布时间】:2018-01-07 23:02:42
【问题描述】:

我已经创建了一个应用程序,但是当我尝试在我的 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

当使用addOnFailureListener 中的GoogleSignInClient.silentSignIn() 时,出现以下异常

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 中,我得到一个不成功的结果,但状态消息为空

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

【问题讨论】:

  • “带有 AVD 的 Android 模拟器运行基于 Android 4.2.2 或更高版本的 Google API 平台。”你选对了图片吗?
  • 播放服务适用于 minSdk 9+
  • @EugenPechanec 我的模拟器使用 Google API 运行。 i.imgur.com/OrsIIqc.png
  • @TimCastelijns ...在真实设备上。 uruloke,请发布整个异常和您应用的 build.gradle。
  • @EugenPechanec 刚刚用这些信息更新了我的问题。

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


【解决方案1】:

public static final int SIGN_IN_REQUIRED

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

常数值:4

来源:CommonStatusCodes,重点是我的

确切地说,silentSignIn 似乎只有在您在设备上登录 Google 时才有效:

如果出现以下情况,我们会尝试让用户登录:

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

来源:GoogleSignInApi#silentSignIn

【讨论】:

  • 哦,找不到状态码,谢谢!不过现在有另一个问题,我启动了signInIntent,但它没有启动signInIntent,它再次适用于较新的API(25、26),但不适用于较旧的API(24、21)。 Status{statusCode=unknown status code: 12501, resolution=null}
  • @uruloke 这是SIGN_IN_CANCELLED 的代码,这绝对很奇怪。您是否仅在模拟器中尝试?您可以在真正的 Android 5-7 设备上试用吗?
  • 我应该可以在今天晚些时候在 Android 5 设备上测试它,现在我只有 8.1 设备可供我使用。
  • 问题是模拟器没有安装Google Play Store,在真机上运行正常,谢谢帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-24
  • 2018-02-08
  • 2014-05-18
  • 2016-11-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多