我正在使用getAuthToken()
获取令牌,然后登录Google App Engine应用程序。
它曾经可以工作,直到今天,我都不知道为什么getAuthToken()
返回null
。
我检查了我通过的帐户,没关系。所以我无法想象发生了什么。
private class GetAuthTokenTask extends AsyncTask<Account, Object, String> {
String TAG="GetAuthTokenTask";
@Override
protected String doInBackground(Account... accounts) {
AccountManager manager = AccountManager.get(getApplicationContext());
Account account = accounts[0];
String token = this.buildToken(manager, account);
manager.invalidateAuthToken(account.type, token);
return this.buildToken(manager, account);
}
private String buildToken(AccountManager manager, Account account) {
try {
AccountManagerFuture<Bundle> future = manager.getAuthToken (account, "ah", false, null, null);
Bundle bundle = future.getResult();
System.out.println("Token: "+bundle.getString(AccountManager.KEY_AUTHTOKEN) +"\n");
return bundle.getString(AccountManager.KEY_AUTHTOKEN);
} catch (OperationCanceledException e) {
Log.w(TAG, e.getMessage());
} catch (AuthenticatorException e) {
Log.w(TAG, e.getMessage());
} catch (IOException e) {
Log.w(TAG, e.getMessage());
}
return null;
}
protected void onPostExecute(String authToken) {
//Log.i("onPostExecute","GetCookieTask");
new GetCookieTask().execute(authToken);
}
}
编辑
我自己找到了解决方案:
在getAuthToken()方法中,我将第三个参数更改为true,因此它将在状态栏中显示警告,要求获得许可。我不知道为什么Android之前没有问过,就像刚安装应用程序之后一样。
最佳答案
getAuthToken(Account, String, boolean, AccountManagerCallback<Bundle>, Handler)
方法已被弃用。
使用getAuthToken(Account, String, Bundle, Activity, AccountManagerCallback<Bundle>, Handler)
或getAuthToken(Account, String, Bundle, boolean, AccountManagerCallback<Bundle>, Handler)
代替。
第一个为我工作。
Android Documentation