Android getAuthToken返回一个空标记

时间:2012-07-07 15:37:48

标签: android oauth-2.0

我需要为用户授权使用Google日历访问权限,首次使用Google ID时,我可以正常使用

blockingGetAuthToken

它获得一个令牌,我通常会登录此令牌。 因此,当我尝试使用其他帐户时,我得到了一个空令牌。 我搜索了很多,发现使用getAuthToken是首选,因为它使用调用它的活动的上下文..然后我转换整个过程使用它

 private static final String AUTH_TOKEN_TYPE = "oauth2:https://www.googleapis.com/auth/calendar";

public static String authorize(AndroidtestActivity parent, Account account) {
    AccountManager accountManager = AccountManager.get(parent);
    Bundle options= new Bundle();

    Log.d("MyAPP", "Get Authorization");
    try {
        AccountManagerFuture<Bundle> acc=accountManager.getAuthToken ( account, AUTH_TOKEN_TYPE,  options, true, null, null);
        Bundle authTokenBundle = acc.getResult();
        String authToken = authTokenBundle.get(AccountManager.KEY_AUTHTOKEN).toString();

        Log.d("MyAPP","Token= "+authToken);
        return authToken;


    } catch (Exception ex) {
        Logger.getLogger(GoogleAuthorize.class.getName()).log(Level.SEVERE,
                null, ex);
    }
    return null;
}

}

但仍然没有帐户可以获得有效的令牌,它们都会得到一个空的

然后我看到了这个答案https://stackoverflow.com/a/2021337/1280902,然后使用invalidateAuthToken

private static final String AUTH_TOKEN_TYPE = "oauth2:https://www.googleapis.com/auth/calendar";

public static String authorize(AndroidtestActivity parent, Account account) {
    AccountManager accountManager = AccountManager.get(parent);
    Bundle options= new Bundle();

    Log.d("MyAPP", "Get Authorization");
    try {
        AccountManagerFuture<Bundle> acc=accountManager.getAuthToken ( account, AUTH_TOKEN_TYPE,  options, true, null, null);
        Bundle authTokenBundle = acc.getResult();
        String authToken = authTokenBundle.get(AccountManager.KEY_AUTHTOKEN).toString();
        accountManager.invalidateAuthToken("com.google",authToken);
        acc=accountManager.getAuthToken ( account, AUTH_TOKEN_TYPE,  options, true, null, null);
        authTokenBundle = acc.getResult();
        authToken = authTokenBundle.get(AccountManager.KEY_AUTHTOKEN).toString();

        Log.d("MyAPP","Token= "+authToken);
        return authToken;


    } catch (Exception ex) {
        Logger.getLogger(GoogleAuthorize.class.getName()).log(Level.SEVERE,
                null, ex);
    }
    return null;
}

}

但是我在我使用的每个帐户上都遇到了同样的问题,即使是那些曾经在blockingGetAuthToken开始工作的帐户

我错过了什么?

1 个答案:

答案 0 :(得分:2)

好吧,当我使用

时它工作正常
getAuthToken (Account account, String authTokenType, Bundle options, Activity activity, AccountManagerCallback<Bundle> callback, Handler handler)

活动参数解决了问题..