Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/196.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 安卓硬盘谷歌PlayServiceSutil﹕ 无法登录指定的帐户_Android_Google Drive Api_Google Drive Android Api - Fatal编程技术网

Android 安卓硬盘谷歌PlayServiceSutil﹕ 无法登录指定的帐户

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(

我需要使用驱动器api创建一个包含应用程序中某些内容的文件,因此我遵循了驱动器api网页中的入门部分

因此,我在开发人员的控制台上启用了api,创建了一个OAuth客户机id,正如它所说的。如果我还没有支付2$5,我可以使用api吗

在我正在执行的onCreate方法的“设置”活动中:

 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?