【问题标题】:GoogleAccountCredential setSelectedAccountName but still nullGoogleAccountCredential setSelectedAccountName 但仍为空
【发布时间】:2017-04-19 04:32:51
【问题描述】:

账户名设置后仍为空。

我见过this answer,但我确实在清单中拥有GET_ACCOUNTS 权限,并且在运行时受到保护。

以下设置在 Pixel XL 模拟器 API 25 (Android 7.1.1) 上运行。

清单

<uses-permission android:name="android.permission.GET_ACCOUNTS" />

活动

private void queryAPI() {
    if (mCredential.getSelectedAccountName() == null) {
        if (checkSelfPermission(Manifest.permission.GET_ACCOUNTS) != PackageManager.PERMISSION_GRANTED) {
            requestPermissions(new String[] {Manifest.permission.GET_ACCOUNTS}, RCP_AUTH_CRED);
            return;
        }

        mCredential.setSelectedAccountName("test@gmail.com");
        Log.d(TAG, "queryAPI: account name " + mCredential.getSelectedAccountName());
    }
}

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    switch (requestCode) {
        case RCP_AUTH_CRED:
            if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                queryAPI();
            } else {
                Log.d(TAG, "onRequestPermissionsResult: " + Integer.toString(grantResults[0]));
            }
            break;
    }
}

Logcat

04-18 21:26:47.590 2700-2700/com.package D/MainActivity: queryAPI: account name null

【问题讨论】:

    标签: android android-permissions google-authentication google-oauth google-account


    【解决方案1】:

    使用 setSelectedAccount() 代替 setSelectedAccountName()。

     mCredential = GoogleAccountCredential.usingOAuth2(
                    getApplicationContext(), Arrays.asList(SCOPES))
                    .setBackOff(new ExponentialBackOff());
    
            // to set accountName manually instead of prompting user to select it
            mCredential.setSelectedAccount(new Account("xyz@gmail.com", "com.android.example"));
    

    将您的 gmail 帐户作为第一个参数,将您的包名称作为第二个参数。

    【讨论】:

      【解决方案2】:

      此 Google 帐户“test@gmail.com”是否设置在设备帐户中?

      首先,您需要在您正在测试它的设备上转到设置/帐户/添加帐户来设置您想在您的应用中使用它的谷歌帐户。仅传递帐户名是不够的,该帐户必须存在于设备上。

      如果用户需要 google 帐户才能使用您的应用程序,您可以通过使用 newChooseAccountIntent() 方法触发 Intent 将用户引导到帐户选择屏幕来强制用户创建 google 帐户。

      【讨论】:

      • 这是必要的前提条件吗?在任何地方的文档中都没有看到。
      • 依赖账号对吧,你用创建的账号测试过吗?
      • 试图避免这种情况,因为我无法将模拟手机与我正在测试的模拟可穿戴设备配对。
      • 嗯,看来该帐户必须在设备上...如果您更新答案以明确表示,我会接受!
      • 我已经用这个方法登录了,如何使用GoogleAccountCredential注销?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-11-05
      • 1970-01-01
      • 2021-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多