如果某些设备中的应用已closures,则GCM推送通知将不起作用

我遵循Google的GCM 设置指南和Github上的示例来创build一个接收通知的应用程序。

什么时候工作:

  • 应用已打开(所有设备)
  • 应用程序在后台(所有设备)
  • 应用已closures(除了一个之外)

不工作的电话:

  • 华为P8 Lite
  • Android 5.1
  • Google Play服务8.3.01

这个手机工作正常,它可以收到WhatsApp消息或任何其他types,即使用户杀死应用程序。

我担心这可能会发生在我还没有testing的许多其他设备上。 所以我想炫耀一些代码为了看看是否有任何问题。

在这里我的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添加了这个依赖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的例子是一样的。

为什么当用户closures应用程序时,此设备无法工作,但是在我testing的所有其他设备中都能正常工作?

Solutions Collecting From Web of "如果某些设备中的应用已closures,则GCM推送通知将不起作用"

这是华为设备的“bug /function”。

Android – GCM – 在背景上没有收到推送通知

一旦你杀了小米的应用程序,华为这些手机取消注册广播接收器,应用程序的服务。

在通知的情况下,您的GCM广播接收器在杀> app时取消注册,这很可能是原因。

用户必须将您的应用程序添加到电池pipe理器的whilelist上

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

使用Android 5.0.1testing华为Gra-L09

编辑:

您可以警告用户并启动受保护的应用程序pipe理器。

华为手机上的“保护应用”设置,以及如何处理

现在,为了安全起见,小米和LeEcho以及一些新的自定义操作系统将禁用每个应用程序的通知。 使用清理程序退出应用程序后,请按照以下步骤在后台接收消息。

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