AccountManager如何知道要使用的Google帐户?

时间:2016-04-19 04:49:48

标签: android authentication oauth-2.0 google-drive-api google-authentication

我正在尝试在Android中为Drive V3实施Google rest api

但我得到 authError

{
   "error":{
      "errors":[
         {
            "domain":"global",
            "reason":"authError",
            "message":"Invalid Credentials",
            "locationType":"header",
            "location":"Authorization"
         }
      ],
      "code":401,
      "message":"Invalid Credentials"
   }
}

我使用AccountManager从用户获取令牌,我认为它访问了错误的控制台帐户 它如何知道要访问哪个帐户?

这是我的AccountManager代码,我成功获得了用户令牌。我也在使用AccountManager.invalidateAuthToken

之前使其无效
    Bundle options = new Bundle();
    options.putString(AccountManager.KEY_ANDROID_PACKAGE_NAME, context.getPackageName());
    accountManager.getAuthToken(account, scope, options, context,
            callback, null);

1 个答案:

答案 0 :(得分:0)

根据[getAuthToken](Account Manager,java.lang.String,android.os.Bundle,android.app.Activity,android.accounts.AccountManagerCallback,android.os的http://developer.android.com/reference/android/accounts/AccountManager.html#getAuthToken(android.accounts.Account文档.Handler)):

  

获取特定帐户的指定类型的身份验证令牌,在必要时提示用户提供凭据。此方法适用于在前台运行的应用程序,直接向用户询问密码是有意义的。

     

如果为此帐户缓存以前生成的身份验证令牌并键入,则会返回。否则,如果保存的密码可用,则会将其发送到服务器以生成新的身份验证令牌。否则,系统会提示用户输入密码。

它似乎取决于您在account中传递的getAuthToken()变量的值。

你可能已经有了这个,但是要包含在社区中,你是否包含了文档中提到的USE_CREDENTIALS权限:

  

注意:如果将您的应用定位到API级别22以及之前的版本,那么这些平台需要 USE_CREDENTIALS 权限。

希望这会有所帮助。祝好运。 :)