如何通过AccountManager.addaccountExternally()在Android中添加谷歌帐户?

时间:2014-03-16 19:41:39

标签: android accountmanager

我想明确地添加一个Google帐户。我会提供用户名和密码。

我刚刚通过这个问题 caller uid XXXX is different than the authenticator's uid  但我没有得到解决方案。 什么是uid?你比较的是哪个。

我正在尝试

    AccountManager mgr = (AccountManager)getSystemService(ACCOUNT_SERVICE);
    Account acc = new Account("xxxj@gmail.com", "com.google");
    if(mgr.addAccountExplicitly(acc, "Password", new Bundle()))
    {
        //account added successfully
        //do whatever is needed;
        showToast("added");
    }
    else {
        //something did not work
    }

错误:来电者uid 10782与身份验证员的不同。

这意味着什么?我该如何纠正呢?

任何人请告诉我如何解决这个问题,完整的代码会非常有帮助。

1 个答案:

答案 0 :(得分:6)

UID是分配给您的应用程序的用户ID。每个应用程序都有自己的UID,但如果您自己创建多个应用程序,则可以使它们share the same UID

身份验证器是处理和验证属于该身份验证器的帐户的模块。因此Google的身份验证器用于处理Google的帐户,“身份验证器X”用于处理“X帐户”。

AddAccountExplicitly是一种在使用您自己的身份验证器创建自己类型的帐户时要使用的方法。 AddAccountExplicitly的文档说:

  

此方法要求调用者保留权限   AUTHENTICATE_ACCOUNTS并且与添加的帐户具有相同的UID   认证器。

调用应用程序的UID和身份验证器的UID可以相同的唯一方法是创建调用应用程序和帐户身份验证器。

换句话说,无法使用addAccountExplicitly()添加/创建Google帐户。您只能为自己的服务添加帐户。

根据您的目的,您可以向用户显示“添加帐户”对话框,并让用户自己添加帐户: Programatically starting the 'Add Account' activity in Android 2.2

或许您可以使用Admin SDK的目录API创建可用于Google服务但不是Google帐户的帐户: Can I create a Google account programmatically?