AuthToken от AccountManager в клиенте Android, больше не работающем

Я довольно раздражен. Я пытаюсь создать основанную на повороте многопользовательскую онлайн-игру для Android с помощью Google App Engine in Java в качестве сервера.

Они походят на идеальное соответствие. Android требует учетной записи Google, и GAE использует счет Google на аутентификацию, будучи свободной и масштабируемой.

Таким образом, перед праздниками я смог получить аутентификацию к своему приложению GAE от моего клиента Android, использующего новый AccountManager API в Android 2.0. Следующий код позволяет Вам получать доступ к AuthToken учетной записи Google пользователя и затем использовать его для аутентификации, так, чтобы пользователь вручную не вводил их имя пользователя учетной записи и пароль:

   AccountManager mgr = AccountManager.get(this); 
   Account[] accts = mgr.getAccountsByType("com.google"); 
   Account acct = accts[0];
   AccountManagerFuture accountManagerFuture = mgr.getAuthToken(acct, "ah", null, this, null, null);
   Bundle authTokenBundle = accountManagerFuture.getResult(); 
   String authToken = authTokenBundle.get(AccountManager.KEY_AUTHTOKEN).toString();

Я затем смог добавить получающуюся строку AuthToken к соответствующему URL и получить допустимый cookie, который я мог затем использовать для всех дальнейших запросов. Только вещь, когда-то на прошлой неделе она просто прекратила работать на меня. Теперь, когда я пытаюсь использовать AuthToken из вышеупомянутого кода, я не возвратил cookie, и мой код бросает NullPointerException для недостающего cookie.

Когда я возвращаюсь к старому пути, когда пользователь вручную входил в их имя пользователя Google и пароль, и я получаю AuthToken от "https://www.google.com/accounts/ClientLogin", это работает просто великолепно.

Скажите мне, что кто-то там создал клиент Android для приложения Google App Engine с помощью AuthToken из учетной записи Google по телефону пользователя и дает мне некоторый ключ к разгадке относительно того, почему это больше не работает.

Я действительно хотел бы сделать эту работу. Мои альтернативы должны потребовать, чтобы пользователь ввел их учетные данные (который является неуклюжим, и который им не придется сделать), или идущий с другим решением для сервера.

Заранее спасибо.

36
задан ciccioska 19 June 2015 в 15:31
поделиться

1 ответ

Получил помощь от инженера Google. Оказалось, что мой автотокен просрочен. Первоначально реализация заработала в начале декабря (точнее, 9-го). Очевидно, что AccountManager кэширует authToken, поэтому я использовал тот же authToken с 9 декабря. Когда я вернулся с праздников, срок его действия истек.

Чтобы решить эту проблему, я звоню getAuthToken, затем вызываю invalidateAuthToken на этом маркере, а затем снова вызываю getAuthToken. Это генерирует действительный authToken и работает просто отлично, даже если он немного неуклюж и был бы ненужен, если бы AccountManager каждый раз получал свежий authToken или проверял, не истек ли срок действия кэшированного.

Обратите внимание, что нельзя путать тип токена с типом аккаунта: invalidateAuthToken нужно вызывать с помощью "com.google" вместо "ah", иначе он беззвучно выйдет из строя.

Вызов getAuthToken должен быть выполнен с помощью "com.google".
26
ответ дан 27 November 2019 в 06:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: