我在使用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
和系统推送通知:
当用户点按通知时,会出现下一个对话框:
当用户点击“确定”时,获得令牌的所有下一次迭代都会成功。
问题:如何绕过此确认或仅显示对话框,而不点击通知?
答案 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 APIs,Login 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();