当前位置: 首页 > 知识库问答 >
问题:

Play services 11.6:OAuth同意屏幕在发布时不显示

夏高朗
2023-03-14

尽管已从官方示例应用程序中复制了代码,但通过Play Store发布应用程序时不会显示身份验证同意屏幕。我在Google Api Developer Console上正确生成了两个OAuth 2.0凭据,一个用于发布(使用我的私人密钥库),一个用于调试(使用Android Studio调试密钥库)。

更新:在调试模式下在旧版4.4模拟器上安装我的应用程序时,我注意到在新设备上发布的应用程序也有同样的行为。不显示同意屏幕,Logcat显示以下消息:

W/GooglePlayServicesUtil:Google Play服务已经过时。需要11717000但找到11509030

是不是新的GoogleApi界面无法提示用户安装/更新PlayServices,即使官方文档中有这样的说法?

这是我的代码

建筑gradle(应用程序)

compile 'com.google.android.gms:play-services-auth:11.6.0'
compile 'com.google.android.gms:play-services-drive:11.6.0'

AndroidManifest。xml

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

驾驶活动。JAVA

private static final int REQUEST_CODE_SIGN_IN = 0;

protected GoogleSignInClient mGoogleSignInClient;
protected DriveClient mDriveClient;
protected DriveResourceClient mDriveResourceClient;

protected abstract void onDriveConnected();

    @Override
    protected void onActivityResult(final int requestCode, final int resultCode, final Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        switch (requestCode) {
            case REQUEST_CODE_SIGN_IN:
                if (resultCode == RESULT_OK) {
                    Task<GoogleSignInAccount> getAccountTask = GoogleSignIn.getSignedInAccountFromIntent(data);
                    if (getAccountTask.isSuccessful()) {
                        initializeDriveClient(getAccountTask.getResult());
                    }
                    else {
                        Toast.makeText(this, "Sign-in failed.", Toast.LENGTH_LONG).show();
                    }
                }
                break;
        }
    }

    protected void signIn() {
        GoogleSignInAccount signInAccount = GoogleSignIn.getLastSignedInAccount(this);
        if (signInAccount != null && signInAccount.getGrantedScopes().contains(Drive.SCOPE_FILE)) {
            initializeDriveClient(signInAccount);
        }
        else {
            GoogleSignInOptions signInOptions = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                    .requestScopes(Drive.SCOPE_FILE)
                    .build();
            mGoogleSignInClient = GoogleSignIn.getClient(this, signInOptions);
            startActivityForResult(mGoogleSignInClient.getSignInIntent(), REQUEST_CODE_SIGN_IN);
        }
    }

    private void initializeDriveClient(GoogleSignInAccount signInAccount) {
        mDriveClient = Drive.getDriveClient(this, signInAccount);
        mDriveResourceClient = Drive.getDriveResourceClient(this, signInAccount);
        onDriveConnected();
    }

共有2个答案

孔乐邦
2023-03-14

对于其他人,GoogleSignIn.get客户端(this/*active*/, signInOptions)通常会在需要时自动提示Play服务更新。

但在最新的11.6 SDK中,targetSdkVersion 26暂时中断了此功能。考虑使用GooglePiAvailability。在未来的版本中修复之前,请暂时停止使用这些条件。

刁浩言
2023-03-14

我回答我自己的问题。问题是Google Play服务没有更新,最近的GoogleApi界面也没有检查这一点(可能是一个bug?)。因此,在尝试身份验证之前,您必须进行检查:

protected void signIn() {
    if (checkPlayServices()) {
        ...
    }
}

private boolean checkPlayServices() {
    GoogleApiAvailability googleAPI = GoogleApiAvailability.getInstance();
    int result = googleAPI.isGooglePlayServicesAvailable(this);
    if (result != ConnectionResult.SUCCESS) {
        if (googleAPI.isUserResolvableError(result)) {
            googleAPI.getErrorDialog(this, result, PLAY_SERVICES_RESOLUTION_REQUEST).show();
        }
        else {
            Toast.makeText(this, R.string.message_unsupported_device, Toast.LENGTH_LONG).show();
        }
        return false;
    }
    return true;
}

希望它能帮助别人!

 类似资料:
  • 我正在尝试通过OAuth访问谷歌驱动器以进行本地开发。我包括以下范围: 最后一个范围是:https://www.googleapis.com/auth/drive.file 但是,当我获取客户端ID并在本地应用程序中使用它时,我只被要求通过google对其进行签名。我没有被要求获得有关驱动器文件访问的任何权限。我通过读取登录后获得的访问令牌进一步检查它。在json格式的详细信息中,范围显示以下内容

  • 我正在开发一个我希望成为多租户的Office 365应用程序:也就是说,我希望该应用程序能够访问来自其他组织的用户的交换数据。到目前为止,我已经能够代表所需的第三方用户创建OAuth 2访问令牌,但从未向用户显示同意屏幕,API请求失败,401未授权错误包含以下标头: 更详细地说,我做了以下工作。我已经创建并配置了 Azure AD 应用程序。我已将应用程序配置为多租户,并添加了 AAD 访问以及

  • 我试图用swXXXdp布局文件为不同的屏幕大小创建不同的布局。不幸的是,我仍然不能分开5,0“和6,3”作为可见的附上的图像。两种大小仍然使用相同的文件:layout-sw412dp。对此有什么想法吗?

  • 我正在从 .NET 网络应用程序授权使用谷歌日历。这是我制作的网址:https://accounts.google.com/o/oauth2/auth?scope=https://www.googleapis.com/auth/calendar

  • 我一直在我的5.2英寸设备(LG G2)上开发和测试我的应用程序。 我刚刚在一个更大的5.5英寸设备(OnePlus 3T)上启动了该应用程序,它看起来不太好,如下所示: 这是主要活动: 这是子项的布局xml: 我在这里做错了什么? 编辑: 我搜索了一点,找到了一个解决方案,使用以下代码动态设置GridView的最小高度: 此外,我在适配器中添加了以下代码行: 在我的例子中,我必须将屏幕高度除以2

  • 我试图在我的应用程序中使用Google Fit API,在用户被提示选择Google帐户后,OAuth同意屏幕应该会显示,但是我只得到一个带有不确定加载指示器的空白弹出窗口,除非我取消它,否则该弹出窗口将保持不变。 弹出窗口的图像 不会显示任何错误消息,只有当我取消登录流程时,我才会收到一个错误,即我取消了登录流程。 我尝试了个人项目以及Google的示例项目,其他用户也遇到了同样的问题。 正如我