Произошел ли у кого-либо отказ службы GoogleLoginService при аутентификации для использования службы google (календарь в моем случае) через AccountManager? Я получил токен аутентификации, используя...
AccountManager mgr = AccountManager.get(this);
Account[] accts = mgr.getAccountsByType("com.google");
Account acct = accts[0];
AccountManagerFuture<Bundle> accountManagerFuture = mgr.getAuthToken(acct, "calendar", null, this, null, null);
Bundle authTokenBundle = null;
try {authTokenBundle = accountManagerFuture.getResult();}
catch (OperationCanceledException e) {e.printStackTrace();}
catch (AuthenticatorException e) {e.printStackTrace();}
catch (IOException e) {e.printStackTrace();}
authtoken = authTokenBundle.get(AccountManager.KEY_AUTHTOKEN).toString();
После получения моего токена аутентификации я создал службу календаря и попытался ее аутентифицировать...
CalendarService myService = new CalendarService("UserCalendar");
myService.setAuthSubToken(authtoken);
Когда я использую это как на телефоне, так и на эмуляторе, он, как представляется, работает как ожидается... он вызывает экран, на котором Google просит пользователя разрешить или запретить доступ к моему приложению. Однако, когда я нажимаю кнопку "Разрешить", он говорит, что пароль учетной записи google неверен.
Теперь я пробовал это с несколькими учетными записями google (оба из которых работают, когда я использую их вручную для входа в систему), и он по-прежнему дает тот же результат. Любые идеи по поводу того, почему я могу получить это? Отладка не является чрезвычайно полезной... все, что я получаю, это две строки, которые просто говорят мне, что это не удалось...
12-19 20:40:05.756: DEBUG/GoogleLoginService(245): onBind: Intent { act=android.accounts.AccountAuthenticator cmp=com.google.android.gsf/.loginservice.GoogleLoginService }
12-19 20:40:08.426: DEBUG/GoogleLoginService(245): LOGIN_FAIL
У кого-нибудь еще была эта проблема? Я предполагаю, что есть что-то простое, что мне не хватает, но просто не могу придумать, почему он не будет аутентифицироваться... спасибо!
Служба календаря Google называется "cl", а не "календарь". Вместо этого используйте следующее:
mgr.getAuthToken(acct, "cl", null, this, null, null);