Intereting Posts
Приложение HTML5 офлайн на устройствах Android Как получить правильные значения от монитора сердечного ритма Polar Как получить только местоположение gps, используя sencha touch? Javax.net.ssl.SSLException: сертификат не доверенного сервера Android – два предложения, два стиля, один TextView Список устройств в локальной сети с помощью ping Автозаполнение Android с помощью SQLite LIKE частично работает «Ваша учетная запись ограничена или заблокирована. Перейдите на сайт www.paypal.com, чтобы решить эту проблему ». Эта ошибка показана при попытке сделать высокоценные платежи SetImageResource не работает Установите второй раздел на устройстве Android с помощью vold Android: как я могу проверить, поддерживает ли устройство мультитач? Эффективный подход к постоянному контролю доступности интернет-соединения в Android OnClick внутри фрагмента, вызванного активностью Javax.net.ssl.SSLException: SSL-квитирование отменено. Сброс соединения с помощью одноранговой сети при вызове webservice Android. Использование библиотеки Butter Knife для просмотра инъекций

Уведомления GCM push не работают, если приложение закрыто на некоторых устройствах

Я выполнил руководство по настройке GCM Google и их пример в Github для создания приложения, которое получает уведомления.

Когда это работает:

  • Приложение открыто (все устройства)
  • Приложение в фоновом режиме (все устройства)
  • Приложение закрыто (все кроме одного)

Телефон, который не работает:

  • Huawei P8 lite
  • Android 5.1
  • Службы Google Play 8.3.01

Этот телефон работает нормально, он может получать сообщения WhatsApp или любой другой вид, даже если пользователь убивает приложение.

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

Здесь мой AndroidManifest.xml :

 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.presentation" > <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <!-- Keeps the processor from sleeping when a message is received. --> <uses-permission android:name="android.permission.WAKE_LOCK" /> <!-- This app has permission to register and receive data message. --> <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> <permission android:name="com.example.presentation.permission.C2D_MESSAGE" android:protectionLevel="signature" /> <uses-permission android:name="com.example.presentation.permission.C2D_MESSAGE" /> <application android:name=".AndroidApplication" android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <receiver android:name="com.google.android.gms.gcm.GcmReceiver" android:exported="true" android:permission="com.google.android.c2dm.permission.SEND" > <intent-filter> <action android:name="com.google.android.c2dm.intent.RECEIVE" /> <category android:name="com.example.presentation" /> <!-- If you want to support pre-4.4 KitKat devices. --> <action android:name="com.google.android.c2dm.intent.REGISTRATION" /> </intent-filter> </receiver> <service android:name="com.example.data.gcm.RegistrationIntentService" android:exported="false" /> <service android:name="com.example.data.gcm.MyGcmListenerService" android:exported="false" > <intent-filter> <action android:name="com.google.android.c2dm.intent.RECEIVE" /> </intent-filter> </service> <service android:name="com.example.data.gcm.MyInstanceIDListenerService" android:exported="false"> <intent-filter> <action android:name="com.google.android.gms.iid.InstanceID"/> </intent-filter> </service> </application> </manifest> 

Добавлена ​​эта зависимость на уровне проекта build.gradle :

 buildscript { repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:1.3.0' classpath 'com.neenbedankt.gradle.plugins:android-apt:1.4' classpath 'com.google.gms:google-services:1.4.0-beta3' } } 

Добавлена ​​эта зависимость в build.gradle уровне build.gradle :

 compile "com.google.android.gms:play-services-gcm:8.1.0" 

И классы Java одинаковы для примера Github .

Почему это устройство не работает, когда пользователь закрывает приложение, но работает на всех других устройствах, которые я тестировал?

Solutions Collecting From Web of "Уведомления GCM push не работают, если приложение закрыто на некоторых устройствах"

Это «ошибка / особенность» устройств Huawei.

Android – GCM – не получать push-уведомления на фоне

После того, как вы убили приложение на xiaomi, huawei, эти телефоны отменили регистрацию широковещательных приемников, услуг приложения.

В случае уведомления ваш приемник передачи GCM получает незарегистрированные файлы в случае убийства>, что, вероятно, является причиной этого.

Пользователь должен добавить ваше приложение в список времени в диспетчере батарей

https://www.forbes.com/sites/bensin/2016/07/04/push-notifications-not-coming-through-to-your-huawei-phone-heres-how-to-fix-it/#578f42bd1ccc

Протестировано на Huawei Gra-L09 с Android 5.0.1

Редакция:

Вы можете предупредить пользователя и запустить Менеджер защищенных приложений.

«Защищенные приложения» на телефонах Huawei и способы их устранения

Теперь дни, Xiaomi и LeEcho и некоторые новые пользовательские ОС для целей безопасности отключает уведомление для каждого приложения. Выполните следующие действия, чтобы получать сообщения в фоновом режиме, как только они покидают приложение, используя очиститель.

Settings -> Permissions (Just add your app here and done).