Intereting Posts
Android – запуск Google Navigation из приложения Режим «Дозировка» и «Ожидание приложения» Android – почему это говорит мне, что «Content view еще не создан»? Проблема с электронной почтой (отправка гиперссылки по электронной почте) Принудительный ввод цифр при просмотре веб-сайта на Android и iOS Отменить регистрацию вещательного приемника, зарегистрированного через манифест Заполнение счетчика непосредственно в макете xml API Android Google Maps v2: визуализация радиуса поиска с помощью ValueAnimator Во время установки Cordova (PhoneGap) я получаю предупреждение, как «двигатель npm WARN Cordova-js @ 3. 8.0: хотел: … " Как работают классы обработчиков в Android Диспетчер аварийной сигнализации на каждую секунду в android 5.1 Фрагменты и широковещательные приемники EditText в PopupWindow не показывает клавиатуру, даже если setFocusable (true) AnimationSet setInterpolator () не работает вэнь с использованием 9oldandroids lib MService.consumePurchase (3, packageName, purchaseToken) всегда возвращает RESULT_DEVELOPER_ERROR = 5 – неверные аргументы, предоставленные API

Получите регистрационный идентификационный номер GCM без отправки сообщения

У меня проблема с приложением, использующим GCM, сценарий таков:

  1. Приложение установлено
  2. Приложение вызывает метод регистра GCM, получая идентификатор регистрации «RID-1»,
  3. Приложение удалено
  4. Приложение снова установлено
  5. Приложение вызывает метод регистра GCM, снова получая идентификатор регистрации «RID-2»,

На шаге 5 мне нужно получить предыдущий идентификатор регистрации, чтобы я мог обновить мою модель.

Ограничения:
– Я пытаюсь сделать это без использования внешнего хранилища
– Я не могу обновить модель, когда сервер отправляет сообщение, это должно быть сделано после регистрации, потому что новый профиль создается в приложении для каждого нового устройства

Я знаю, что эта информация находится на серверах Google, поскольку она отправляется вам при отправке сообщения на старый идентификатор регистрации. Например, если я отправлю сообщение «RID-1», в ответе я получаю, что новый (канонический) регистрационный идентификатор «RID-2» . Мне нужен способ получить эту информацию без отправки сообщения.

Дайте мне знать, если вам нужен больше контекста.


Я нашел несколько связанных вопросов, но ответы не применимы к этому сценарию:
Повторение идентификатора регистрации для GCM
Gcm canonical id должен быть обновлен или нет
Устойчивость идентификатора регистрации gcm
Облачные сообщения Google – статус регистрационного удостоверения
Android GCM: Как обнаружить зарегистрированные канонические идентификаторы на моем собственном сервере?
Обработка изменений идентификатора регистрации в Google Cloud Messaging на Android
(Все ответы от @eran )

Solutions Collecting From Web of "Получите регистрационный идентификационный номер GCM без отправки сообщения"

Вы можете указать "dry_run": true в /send .

Я обнаружил, что устройства не получают никаких push-уведомлений с параметром "dry_run": true , а сервер получает ответ canonical_ids .

Вот пример кода в Ruby. Возможно, вам придется установить gcm Gem заранее.

$ gem install gcm

ask_canonical_ids.rb

 require 'gcm' require 'json' API_KEY = "YourApiKey" gcm = GCM.new(API_KEY) registration_ids = [ 'OldRegistrationId', ] option = { data: { 'message' => 'Hello Gcm!' }, dry_run: true } response = gcm.send_notification(registration_ids, option) p response[:canonical_ids] 

Вывод $ ruby ask_canonical_ids.rb (отформатирован)

 [{ :old => "OldRegistrationId", :new => "NewRegistrationId" }] 

Опять же, ваше устройство не получит никаких push-уведомлений.

Нам нужно обновить идентификатор регистрации с помощью Canonical Id (путем нахождения индексной позиции массива). Вы можете следовать этой работе. Готовый код использования

Если вам нужно только то, что пользователь не должен получать уведомление, отправьте сообщение с параметрами, которые ваше приложение не ищет. Вы получите каноническое, и ваше приложение отменит уведомление, если оно не имеет обязательного текста и сообщения.

Например, моему плагину приложения Cordova требуется ключ «сообщение» в данных, полученных с сервера. В противном случае он не создает уведомление.

Я знаю, что это своего рода хак, но я думаю, что с учетом ограничений это будет легче всего достичь.