尽管已从官方示例应用程序中复制了代码,但通过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();
}
对于其他人,GoogleSignIn.get客户端(this/*active*/, signInOptions)通常会在需要时自动提示Play服务更新。
但在最新的11.6 SDK中,targetSdkVersion 26暂时中断了此功能。考虑使用GooglePiAvailability。在未来的版本中修复之前,请暂时停止使用这些条件。
我回答我自己的问题。问题是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的示例项目,其他用户也遇到了同样的问题。 正如我