Лучшие практики реализации регистрации C2DM

Я разрабатываю приложение, которое использует C2DM для получения push-уведомлений. Я реализовал всю схему C2DM (как клиент, так и сервер), и она работает нормально.

В настоящее время в моем приложении есть кнопка для начальной загрузки регистрации C2DM. При получении токена идентификатора регистрации от Google я вызываю веб-службу на своем сервере приложений, чтобы связать устройство с идентификатором регистрации.

Я собираюсь реализовать аутентификацию в своем приложении, и у меня есть несколько вопросов, связанных с обработкой регистрации C2DM.

  1. Клиентское приложение (например, Android) будет иметь экран входа в систему в качестве первого экрана, чтобы пользователь мог ввести учетные данные. Как только учетные данные будут проверены, я планирую вызвать регистрацию C2DM, чтобы пользователь был связан с токеном идентификатора регистрации. Это нормально? В более поздних запусках приложения я, вероятно, буду хранить учетные данные или какой-то токен, чтобы пользователю не нужно было вводить учетные данные снова. Должен ли я также запускать регистрацию C2DM при запуске приложения?
  2. Я знаю, что Google может в конечном итоге обновить регистрационный идентификатор. Является ли хорошей практикой регулярное обновление регистрационного идентификатора? Если да, то когда это должно быть уместно? Срок действия токена идентификатора регистрации истекает?
  3. Что происходит в редком случае десинхронизации регистрационного идентификатора между клиентом и сервером (например, клиенту приходит новый регистрационный идентификатор, в середине которого на сервере запускается новое событие со старым регистрационным идентификатором, затем регистрационный идентификатор поступает на сервер)? Будет ли Google обрабатывать эти случаи? Должен ли мой сервер приложений обрабатывать эти случаи?
  4. Что произойдет, если сервер недоступен, когда от Google поступает новый идентификатор регистрации? Должен ли я отступить и запланировать будильник, чтобы повторить попытку?
  5. Можете ли вы придумать какие-либо другие подводные камни с этим?

person aromero    schedule 03.05.2011    source источник


Ответы (2)


1) Я бы уволил регистрацию C2DM как можно скорее. Ничего особенного, но поскольку запрос асинхронный, раннее его запуск поможет мне быстрее получить reg ID. Однако нет необходимости запускать регистрацию каждый раз при запуске приложения. Одного раза достаточно.

2) Всякий раз, когда Google решает обновить идентификатор регистрации, он отправляет его на устройство, и вам необходимо выполнить те же действия, которые вы выполняли при первом получении идентификатора регистрации, то есть передать его на сервер.

3 и 4. Вы можете ознакомиться с этой документацией. Это подчеркивает тот факт, что вам нужно убедиться, что вы отправляете регистрационный идентификатор на свой сервер и продолжаете попытки. Здесь я предполагаю, что если reg ID обновлен, а ваш сервер все еще имеет старый ID, он не сможет отправлять сообщения на устройство. Он получит 200OK с кодом ошибки InvalidRegistration, что означает (отсутствует или) неверный идентификатор регистрации.

5) Не могу много комментировать - сказал бы, что это зависит от дизайна вашего приложения. Но стоит отметить, что C2DM все еще находится в стадии бета-тестирования, поэтому ожидайте, что в долгосрочной перспективе все будет по-другому.

person advantej    schedule 03.05.2011
comment
Спасибо за ответ, так что в основном вы говорите, что нужно один раз вызвать процедуру регистрации при входе в систему, а затем только слушать изменения от Google. Это так? - person aromero; 03.05.2011
comment
да. как я уже сказал, когда Google обновляет идентификатор регистрации, ваше приложение должно получить намерение REGISTRATION. - person advantej; 03.05.2011
comment
Вы когда-нибудь находили способ заставить Google обновить идентификатор? Я хотел бы проверить и подтвердить, что мой код работает правильно. - person Quentamia; 07.06.2012

  1. Попробуйте предложить пользователю выбор гугл-аккаунтов, которые уже есть в телефоне. http://code.google.com/p/chrometophone/source/checkout показывает это. Посмотрите SetupActivity.java для getGoogleAccounts() и т. д.
person Alex Grande    schedule 16.09.2011