使用Google Calendar API进行身份验证

时间:2012-05-18 04:31:08

标签: java android google-api google-api-java-client

我正在编写一个同时使用Google Tasks和Calendar API的Android应用。通过任务进行身份验证非常有效。但是,在访问日历API时,我会看到一个屏幕,上面写着“与Google服务通信时出现问题。请稍后重试。”标题为“无法登录”。如果我单击下一步,登录...屏幕将显示约半秒钟,然后我将被发送回“发生问题”屏幕。

我在Calendar API中进行身份验证的代码如下所示。请注意,Tasks API的代码工作正常,几乎完全相同。

GoogleAccountManager google_manager = new GoogleAccountManager(this);
Account[] accounts = google_manager.getAccounts();
Account my_account;
if (accounts.length > 1) my_account = selectWhichAccount(accounts);
else {
    if (accounts.length == 0) display_no_account_dialog();
    Log.v("account",accounts[0].toString());
    my_account = accounts[0];
}
final String AUTH_TOKEN_TYPE = "oauth2:https://www.googleapis.com/auth/calendar";
Log.v("schedule","getting auth token");
google_manager.manager.getAuthToken(my_account, AUTH_TOKEN_TYPE, null, this, new AccountManagerCallback<Bundle>() {

        @Override
        public void run(AccountManagerFuture<Bundle> future) {
            try {
                String token = future.getResult().getString(AccountManager.KEY_AUTHTOKEN);
                Log.d("schedule","starting scheduletask");
                start_ScheduleTask(t, token);
            } catch (OperationCanceledException e) {
                Log.v("accounts","denied access to account");
                handleException(e);
            } catch (Exception e) {
                handleException(e);
            }
        }
    }, null);

1 个答案:

答案 0 :(得分:0)

使用'oauth2:'前缀指定的OAuth2令牌仅由AccountManager部分支持,其中一些不起作用。不幸的是,目前没有记录支持和不支持的内容(AFAIK)。您有两种选择:使用ClientLogin(使用'cl'作为令牌类型)或使用WebView获取令牌。 ClientLogin现在应该可以正常工作,但它已被正式弃用,并将在大约一年内消失。