【问题标题】:newChooseAccountIntent returns a Name but getToken needs an EmailnewChooseAccountIntent 返回一个名称,但 getToken 需要一个电子邮件
【发布时间】:2012-10-06 18:44:53
【问题描述】:

我从新的 Google Play 服务开始,并尝试使用我在 blog 和引用示例中找到的信息来创建一个完整的工作应用程序。恕我直言,这些示例中缺少一些内容。

新标准 AccountPicker.newChooseAccountIntent 可用于选择在设备上注册的 Google 帐户。使用该对话框会在返回时返回帐户的名称。

现在示例展示了如何获取令牌。新的 GoogleAuthUtil.getToken 方法需要一封电子邮件来获取令牌。

有些东西不见了。如何从给定帐户名获取电子邮件?

非常感谢。

public class MyActivity extends Activity {

    public static final String AUTHTOKENSCOPE_DRIVE = "oauth2:https://www.googleapis.com/auth/drive";

    String accountName = "";

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
        switch (requestCode) {
            case 1:
                if (resultCode == RESULT_OK) {
                    accountName = intent.getStringExtra(AccountManager.KEY_ACCOUNT_NAME);
                    // Need to fetch token with email
                    // String token = GoogleAuthUtil.getToken(this, <???email???>,  
                           AUTHTOKENSCOPE_DRIVE);
                } else {
                }

                break;
            default:
                super.onActivityResult(requestCode, resultCode, intent);
        }
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        int rc = GooglePlayServicesUtil.isGooglePlayServicesAvailable(this);
        switch (rc) {
            case ConnectionResult.SUCCESS:
                Intent intent = AccountPicker.newChooseAccountIntent(null, null, new String[] {
                        "com.google"
                },
                        true, null, AUTHTOKENSCOPE_DRIVE, new String[] {
                            "Just a text"
                        }, null);
                startActivityForResult(intent, 1);
                break;
        }
    }
}

【问题讨论】:

    标签: android google-play-services


    【解决方案1】:

    对于 Google 帐户,电子邮件地址帐户名称。

    所以这应该适合你:

    String token = GoogleAuthUtil.getToken(this, accountName, AUTHTOKENSCOPE_DRIVE);
    

    要重新检查,您也可以调用此accountName 有一个Account 对象

    GoogleAccountManager accountManager = new GoogleAccountManager(context);
    Account account = accountManager.getAccountByName(accountName);
    

    证明

    来自您已经引用的blog post

    其次,您不需要 android.accounts.Account 对象,您只需使用唯一标识它的电子邮件地址字符串(在 account.name 中可用)。

    来自 Google 的 Calendar API sample application for AndroidGoogleAccountCredential.getAccountName() 方法:

    /**
     * Returns the selected Google account name (e-mail address), for example
     * {@code "johndoe@gmail.com"}, or {@code null} for none.
     */
    public String getAccountName() {
        return accountName;
    }
    

    他们也使用:

    GoogleAuthUtil.getToken(context, accountName, scope);
    

    【讨论】:

    • 非常感谢。让我感到困惑的是,不工作的示例(没有 onCreate 的活动)在同一个代码博客中使用 accountName 和电子邮件,而没有显示电子邮件的来源。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-19
    • 1970-01-01
    • 2020-09-20
    • 1970-01-01
    • 1970-01-01
    • 2021-10-18
    • 2021-12-14
    相关资源
    最近更新 更多