Android 安卓硬盘谷歌PlayServiceSutil﹕ 无法登录指定的帐户
我需要使用驱动器api创建一个包含应用程序中某些内容的文件,因此我遵循了驱动器api网页中的入门部分 因此,我在开发人员的控制台上启用了api,创建了一个OAuth客户机id,正如它所说的。如果我还没有支付2$5,我可以使用api吗 在我正在执行的onCreate方法的“设置”活动中:Android 安卓硬盘谷歌PlayServiceSutil﹕ 无法登录指定的帐户,android,google-drive-api,google-drive-android-api,Android,Google Drive Api,Google Drive Android Api,我需要使用驱动器api创建一个包含应用程序中某些内容的文件,因此我遵循了驱动器api网页中的入门部分 因此,我在开发人员的控制台上启用了api,创建了一个OAuth客户机id,正如它所说的。如果我还没有支付2$5,我可以使用api吗 在我正在执行的onCreate方法的“设置”活动中: googleApiClient = new GoogleApiClient.Builder(this) .addApi(Drive.API) .addScope(
googleApiClient = new GoogleApiClient.Builder(this)
.addApi(Drive.API)
.addScope(Drive.SCOPE_FILE)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.build();
我正在实施以下方法:
@Override
protected void onStop(){
getGoogleApiClient().disconnect();
super.onStop();
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putBoolean(STATE_RESOLVING_ERROR, resolvingError);
}
@Override
public void onConnectionFailed(ConnectionResult connectionResult) {
if (resolvingError) {
// Already attempting to resolve an error.
return;
}else if (connectionResult.hasResolution()) {
try {
resolvingError = true;
connectionResult.startResolutionForResult(this,RESOLVE_CONNECTION_REQUEST_CODE);
} catch (IntentSender.SendIntentException e) {
getGoogleApiClient().connect();
}
} else {
GooglePlayServicesUtil.getErrorDialog(connectionResult.getErrorCode(), this, 0).show();
resolvingError = true;
}
}
@Override
protected void onActivityResult(final int requestCode, final int resultCode, final Intent data) {
if(requestCode == RESOLVE_CONNECTION_REQUEST_CODE) {
resolvingError = false;
if (resultCode == RESULT_OK) {
if(!getGoogleApiClient().isConnecting() && !getGoogleApiClient().isConnected()){
getGoogleApiClient().connect();
}
}
}
}
@Override
public void onConnected(Bundle bundle) {
Toast.makeText(this, "Success!!! :D :D", Toast.LENGTH_SHORT).show();
}
@Override
public void onConnectionSuspended(int i) {}
然后我调用googleApiClient.connect;在按钮onclick方法上
我将获得“选择帐户google drive”对话框,选择一个帐户并按“确定”,连接结果中出现以下错误:
E/GooglePlayServicesUtil﹕ 无法登录指定的帐户
我在网上搜索,找不到这个问题的原因。。。。也许我在开发者的控制台上做错了什么。。。不知道
更新:
所以我在Google开发者的控制台上删除了这个项目并再次创建它,我还添加了驱动Api并启用它,我在授权屏幕上添加了一个产品名称,以及一个新的客户端id,其中包含我的包名和sha1 id
同时更新我的清单
添加到清单标记:
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.USE_CREDENTIALS" />
到应用程序标记:
<meta-data
android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version"/>
到我正在进行连接的活动标记:
<meta-data
android:name="com.google.android.apps.drive.APP_ID"
android:value="id=<app id i took this id from developers´console>" />
<action android:name="com.google.android.apps.drive.DRIVE_OPEN" />
<data android:mimeType="application/vnd.google-apps.drive-sdk.<app id>" />
我还使用调试密钥库构建了一个签名的apk来测试我的应用程序。在真实设备上
在这一切之后,错误还在上升
我猜您在开发人员控制台上所做的设置有问题。这一讨论可能会有所帮助qbix
您好,阅读上面提到的qbix讨论,我刚刚找到问题的原因
我的项目结构中的默认版本的应用程序id不正确,我只是将其更改为我的应用程序包com.xxxxx.yyyy
因此,当GoogleAppClient试图连接时,我会在id客户端凭据上查找不同的包名并拒绝访问
现在一切正常,thanx…请尝试首次正常登录谷歌帐户
mGoogleApiClient = new GoogleApiClient.Builder(this).
addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.addApi(Plus.API)
.addScope(new Scope(Scopes.PROFILE))
//.addApi(Drive.API)
//.addScope(Drive.SCOPE_FILE)
.build();
这是我通常的清单: 1/拿着有问题的APK,把它穿过一个拉链,比如7-zip。您将找到一个带有CERT.RSA文件的META-INF文件夹。明白了 2/运行'keytool-printcert-file…\CERT.RSA'并复制/保存SHA1'11.22.33…99' 3/从舱单中获取包裹名称?“com.blabla.yourproject' 4/开放式开发人员控制台 5/在项目中,检查: 启用的API:驱动器API 凭据:包名:“com.blabla.yourproject”,指纹:“11.22.33…99” 同意屏幕:电子邮件:yourmail@gmail.com,产品名称:“YourProject”
祝你好运在我的情况下,原因是在宣誓客户端设置中的“包名”不正确: was:com.blabla.prog
正确答案:bla.bla.com.prog尝试通过以下操作忽略API连接:
mGoogleApiClient = new GoogleApiClient.Builder(this)
.addApiIfAvailable(Drive.API)
我是这样做的,一切似乎都很顺利。我真的不知道为什么,我想Driver.API会产生一些问题,通过这种方式,您可以使用地图、标记和所有这些东西。我知道这不是一个好的答案,因为我没有向您提供正确的解释,但无论如何,这会有所帮助。在以下情况下可能会发生此类错误: 如果您在创建Oauth 2.0客户端ID并运行应用程序时使用了发布密钥SHA1签名证书指纹,而没有使用发布密钥(即使用调试密钥运行)对其进行签名。对于调试键也是如此。 如果在创建Oauth 2.0客户端ID时使用了不同的包名
另一个可能出错的地方是,您为API密钥而不是OAuth 2.0客户端ID创建凭据
是啊,我知道。。指南上说的是客户ID,所以我想我是按照字符串的长度来写的:如果我还没有支付25美元,我可以使用api吗?这个支付对应用程序发布来说很重要,而不是api的使用。你的Google Play服务是最新的吗?我猜你在开发者控制台上做的设置有问题。可能会有帮助。我的Goggle Play Services sdk是最新的,我也检查了推荐的讨论,发现我的清单中缺少一些权限,也创建了一个签名的apk来再次测试我的应用程序,但同样的错误正在上升。这样的回答并没有让问题变得更清楚。文件中明确定义了包名格式。在哪里可以更改应用程序ID?