我已经在我的应用和服务器上实现了GCM消息传递,一切正常但不是每部手机都有效!
主要问题是:
当应用程序打开时,我收到GCM消息并按照预期生成通知,但是当应用程序关闭时,我可以看到(通过LOGCAT)消息已收到但已取消 - &gt ; "广播接收器,结果=取消"。
接下来就是我无法让我的app-services在后台运行。只要我"关闭"我的应用程序来自"最近的活动"菜单也会在后台停止(进入设置 - >应用程序 - >" MY_APP" - >禁用强制停止)。
我已经做了很多研究,我认为原因可能是华为P8(主要测试设备)强行关闭所有应用程序,当你将它们从最近的活动中移开时#34;标签。但是,如果是这样的话,其他应用就像" Facebook"," Viber"等等不会发送推送通知。
的Manifest.xml
SlingAllMethodsServlet
GCMBroadCastReceiver
CREATE TRIGGER dbo.SetLastUpdateOnTableB
ON dbo.TableA
AFTER UPDATE
AS
BEGIN
IF (NOT EXISTS(SELECT * FROM TableB WHERE personId = (SELECT TableA.Id From TableA INNER JOIN inserted ON TableA.Id = inserted.Id)))
BEGIN
INSERT INTO TableB(PersonId, LastUpdate)
VALUES((SELECT TableA.Id From TableA INNER JOIN inserted ON TableA.Id = inserted.Id), CURRENT_TIMESTAMP)
END
ELSE
BEGIN
UPDATE TableB
SET LastUpdate = CURRENT_TIMESTAMP
WHERE personId = (SELECT TableA.Id From TableA INNER JOIN inserted ON TableA.Id = inserted.Id)
END
END
GO
GCMIntentService
<receiver
android:name="com.happyhour.gcm.GcmBroadcastReceiver"
android:permission="com.google.android.c2dm.permission.SEND">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
<action android:name="android.intent.action.REBOOT"/>
<action android:name="android.intent.action.PACKAGE_REPLACED"/>
<action android:name="android.intent.action.BATTERY_CHANGED"/>
<action android:name="android.intent.action.USER_PRESENT"/>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<action android:name="com.google.android.c2dm.intent.REGISTRATION" />
<category android:name="com.happyhour.main" />
</intent-filter>
</receiver>
<service
android:name="com.happyhour.gcm.GcmIntentService" >
</service>
<receiver android:name="com.happyhour.gcm.UpdateReceiver">
<intent-filter>
<action android:name="android.intent.action.PACKAGE_REPLACED" />
<action android:name="android.intent.action.PACKAGE_INSTALL"/>
<data android:path="com.happyhour.main"
android:scheme="package" />
</intent-filter>
</receiver>
我很困惑!我无法找到原因的根源。
提前致谢。
答案 0 :(得分:3)
所以看起来华为的EMUI接口(在我的情况下是P8)有一种特殊的处理方式。
安装完每个应用后,它会提示切换按钮,询问您是否允许此特定应用在后台运行。
因此,如果某个应用直接来自Google Play商店,则不会提示您这样做&#34;在后台运行&#34;津贴按钮,因为它是一个受信任的来源&#34;
如果您只是从Android Studio导出.apk并将其直接安装到手机上,它会提示如上所示的按钮,因为直接安装在手机上的情况属于&#34;不受信任的来源&# 34;
最后,如果您使用USB调试器选项在手机上安装.apk,它将永远不会提示按钮,它将始终表现得就像您已经按下&#34; off&#34;。每次关闭应用程序时,它都会强制关闭所有任务。
所以,我做的是将我的Android-Studio生成的.apk转移到我的手机中并手动安装。当它提示按钮时,我将其切换为&#34; ON&#34;就是这样。当应用关闭时,我终于可以收到GCM消息了!
我认为这是一个EMUI错误/特殊应用处理问题。
特别感谢@TeChNo_DeViL的帮助。
答案 1 :(得分:2)
您使用的是非常旧的库。考虑切换到最新的官方GCM库。让您的侦听器扩展GcmListenerService。查找相同的官方文档。它也更容易维护。
确保下面提到的所有TODO都已正确完成: