C2Dm: Пишем приложение под Android с поддержкой Cloud to Device Messaging (C2DM) / Хабр

Является ли com.google.android.c2dm.intent.REGISTRATION устаревшим? — Переполнение стека

спросил

Изменено 6 лет, 4 месяца назад

Просмотрено 10 тысяч раз

Часть Google Cloud Collective

Краткая версия: цель com.google.android.c2dm.intent.REGISTRATION все еще используется или GCM полностью устарел?

Более длинная версия: Google gcm-demo-client объявляет это намерение в своем фильтре, однако, если я следую той же процедуре, я получаю действительный идентификатор регистрации, когда я вызываю gcm.register() и , затем , мой широковещательный приемник получает дополнительный идентификатор регистрации из-за фильтра REGISTRATION, и этот второй идентификатор регистрации является поддельным (я не могу отправить ему уведомление).

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

  • android
  • android-intent
  • google-cloud-messaging

4

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

https://blog.pushbullet.com/2014/02/12/keeping-google-cloud-messaging-for-android-working-reliably-techincal-post/

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

Этот совет довольно странный и, возможно, уже не актуален, но у меня нет способ подтвердить, исправлена ​​​​ли ошибка в GCM, так что вот он.

Ошибка выглядит следующим образом: сколько бы раз вы ни вызывали всегда будет давать сбой и вызывать исключение на некоторых устройствах. Несмотря на то register выбрасывает исключение, рабочий идентификатор регистрации создан, но не возвращен. Чтобы получить этот идентификатор регистрации, добавьте это разрешение на IntentFilter вашего GCM BroadcastReceiver:

 
 

Должен любить GCM. =)

Даже для последней версии GCM (также известной как GCM 3) официальная документация GCM предупреждает о необходимости этого разрешения для поддержки push-уведомлений на старых устройствах:

Если вы хотите поддерживать устройства KitKat до версии 4.4, добавьте следующее действие в объявление фильтра намерений для получателя:

Вероятно, вы смотрите старую версию официальной демоверсии Google. Текущая версия не использует com.google.android.c2dm.intent.REGISTRATION , как вы можете видеть здесь:

  GcmBroadcastReceiver"
        android:permission="com.google.android.c2dm.permission.SEND" >
        <намерение-фильтр>
            
            
            
        
    
 

1

Зарегистрируйтесь или войдите в систему

Зарегистрируйтесь с помощью Google

Зарегистрироваться через Facebook

Зарегистрируйтесь, используя электронную почту и пароль

Опубликовать как гость

Электронная почта

Требуется, но никогда не отображается

Опубликовать как гость

Электронная почта

Требуется, но не отображается

android — сообщения GCM не принимаются, если разрешение SEND не удаленоДля получателя должно быть указано разрешение 0014 согласно официальной документации:

Получателю необходимо разрешение com. google.android.c2dm.SEND, чтобы только GCM Framework могла отправить ему сообщение.

Однако, когда я добавляю это разрешение, я получаю эту ошибку при получении сообщения.

W/GTalkService(25224): [DataMsgMgr] обратный вызов широковещательного намерения: result=CANCEELLED forIntent {act=com.google.android.c2dm.intent.RECEIVE cat=[com.XXX.XXX] (имеет дополнительные функции)}

, за которым следует эта ошибка:

W/ActivityManager(283): отказ в разрешении: намерение трансляции {act=com.google.android.c2dm.intent.RECEIVE cat=[com.XXX.XXX] flg=0x10 (имеет дополнительные функции)} от com.google.android .syncadapters.contacts требует com.google.android.c2dm.SEND из-за получателя com.XXX.XXX/com.XXX.XXX.GcmBroadcastReceiver

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

а вот определение приемника в AndroidManifest.

xml

 
        <намерение-фильтр>
            
            <категория android:name="com.XXX.XXX" />
        
    
 

Я использую сертификат отладки во время тестирования, если это может иметь значение.

  • android
  • google-cloud-messaging

Попробуйте com.google.android.c2dm.permission.SEND вместо com.google.android.c2dm.SEND <90receive , например: 90receive android:name=»GCMBroadcastReceiverCompat» android:permission=»com.google.android.c2dm.permission.SEND»> <намерение-фильтр>

(из этого примера приложения)

1

попробуйте это:

 
C2Dm: Пишем приложение под Android с поддержкой Cloud to Device Messaging (C2DM) / Хабр

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Пролистать наверх