Google帐户获取令牌

时间:2014-11-07 10:32:17

标签: android google-api-client

我在使用kitkat api时遇到问题,同时获取谷歌帐户服务的访问令牌,我的情况下是谷歌音乐。因此,如果用户首先使用下一个方法尝试获取令牌:

 public String getAuthToken(Account account)
            throws AuthenticatorException, IOException {
        String s1;
        if (account == null) {
            Log.e("MusicAuthInfo", "Given null account to MusicAuthInfo.getAuthToken()", new Throwable());
            throw new AuthenticatorException("Given null account to MusicAuthInfo.getAuthToken()");
        }
        String s = getAuthTokenType(mContext);
        try {
            s1 = AccountManager.get(mContext).blockingGetAuthToken(account, s, true);
        } catch (OperationCanceledException operationcanceledexception) {
            throw new AuthenticatorException(operationcanceledexception);
        }
        if (s1 == null) {
            throw new AuthenticatorException("Received null auth token.");
        }

        return s1;
    }

这里我得到s1 == null和系统推送通知:

notification

当用户点按通知时,会出现下一个对话框:

dialog

当用户点击“确定”时,获得令牌的所有下一次迭代都会成功。

问题:如何绕过此确认或仅显示对话框,而不点击通知?

2 个答案:

答案 0 :(得分:3)

这不是您问题的直接答案,但您可以改用Google Play服务。

String token = GoogleAuthUtil.getToken(context, userEmail, "oauth2:https://mail.google.com/");

您只需指定所需的oauth2范围即可。例如,对于Google+,您需要“https://www.googleapis.com/auth/plus.login”而不是我在Gmail代码段中发布的内容。您还可以在一个令牌请求中指定多个范围。权限请求会立即弹出。

您可以在此处阅读所有相关信息:Authorizing with Google for REST APIsLogin scopes

答案 1 :(得分:-2)

解决。需要使用这种方法:

Bundle result = AccountManager.get(activity).getAuthToken(account, s, new Bundle(), activity, new AccountManagerCallback<Bundle>() {
    @Override
    public void run(AccountManagerFuture<Bundle> future) {
        try {
            Log.e("xxx", future.getResult().toString());
        } catch (OperationCanceledException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (AuthenticatorException e) {
            e.printStackTrace();
        }
    }

}, null).getResult();