Java 使用Google日历API进行身份验证

Java 使用Google日历API进行身份验证,java,android,google-api,google-api-java-client,Java,Android,Google Api,Google Api Java Client,我正在编写一个Android应用程序,它同时使用谷歌任务和日历API。通过任务进行身份验证非常有效。但是,当访问日历API时,我会看到一个屏幕,上面显示“与谷歌服务通信时出现问题。请稍后再试。”标题为“无法登录”。如果单击“下一步”,则会出现登录。。。屏幕显示大约半秒钟,然后我被送回“出现问题”屏幕 下面是我对日历API进行身份验证的代码。请注意,Tasks API的代码运行良好,几乎相同 GoogleAccountManager google_manager = new GoogleAccou

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

下面是我对日历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);
GoogleAccountManager google\u manager=新的GoogleAccountManager(此);
Account[]accounts=google_manager.getAccounts();
我的账户;
如果(accounts.length>1)我的账户=选择哪个账户(accounts);
否则{
如果(accounts.length==0)显示“否帐户”对话框();
Log.v(“account”,accounts[0].toString());
我的账户=账户[0];
}
最终字符串AUTH_TOKEN_TYPE=“oauth2:https://www.googleapis.com/auth/calendar";
Log.v(“计划”,“获取身份验证令牌”);
google_manager.manager.getAuthToken(我的帐户,AUTH_TOKEN_类型,null,this,new AccountManagerCallback()){
@凌驾
公共作废运行(AccountManagerFuture){
试一试{
String token=future.getResult().getString(AccountManager.KEY\u AUTHTOKEN);
Log.d(“计划”、“启动计划任务”);
启动调度任务(t,令牌);
}捕捉(操作取消异常e){
Log.v(“账户”,“拒绝访问账户”);
手部异常(e);
}捕获(例外e){
手部异常(e);
}
}
},空);

使用“OAuth2:”前缀指定的OAuth2令牌仅部分受
AccountManager
支持,其中一些令牌不起作用。不幸的是,支持什么和不支持什么目前都没有文档记录(AFAIK)。您有两种选择:使用ClientLogin(使用'cl'作为令牌类型)或使用WebView获取令牌。ClientLogin目前应该可以正常工作,但是它已经被正式弃用,大约一年后就会消失