应用关闭时推送通知

您知道在应用程序完全关闭时是否可以从Google云消息接收通知

我知道它是打开还是在后台是,但可以通过任何方式进行编程以便接收它们吗?

编辑:

应用程序关闭时,我仍然没有收到通知。

我附上代码,以防我有错误,我不看它。

表现

                                

广播接收器

 package com.something; import android.app.NotificationManager; import android.app.PendingIntent; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.support.v4.app.NotificationCompat; import android.util.Log; import com.activities.SignIn; import com.google.android.gcm.GCMBaseIntentService; import com.objects.Globals; public class GCMIntentService extends GCMBaseIntentService { private static final String TAG = "GGM  FRAB"; private Bundle extras; public GCMIntentService() { super(Globals.SENDER_ID); } @Override public void onDestroy() { Log.d(TAG, "terminando servicio"); } @Override protected void onRegistered(Context context, String registrationId) { Log.i(TAG, "onRegistered: registrationId=" + registrationId); } @Override protected void onUnregistered(Context context, String registrationId) { Log.i(TAG, "onUnregistered: registrationId = " + registrationId); } @Override protected void onMessage(Context context, Intent data) { extras = data.getExtras(); String message = extras.getString("msg"); Log.d("******", message); sendNotification(message); } @Override protected void onError(Context arg0, String errorId) { Log.e(TAG, "onError: errorId = " + errorId); } } package com.something; import android.app.Activity; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.support.v4.content.WakefulBroadcastReceiver; public class GGMBroadcastReceiver extends WakefulBroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // Explicitly specify that GcmIntentService will handle the intent. ComponentName comp = new ComponentName(context.getPackageName(), GCMIntentService.class.getName()); // Start the service, keeping the device awake while it is launching. startWakefulService(context, (intent.setComponent(comp))); setResultCode(Activity.RESULT_OK); } } 

当应用程序打开时: 好的

当应用程序处于后台时: 好的

当用户强行关闭应用程序时: 通知不会到达

问题是什么?

非常感谢你。

Solutions Collecting From Web of "应用关闭时推送通知"

是的,当应用程序完全关闭时,可能会“收到来自Google云消息的通知”。

事实上,广播接收器是GCM用于传递消息的机制。 您需要实现BroadcastReceiver并在AndroidManifest.xml中声明它。

请参阅以下代码段。

AndroidManifest.xml中

         

Java代码

 public class GcmBroadcastReceiver extends WakefulBroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // Explicitly specify that GcmIntentService will handle the intent. ComponentName comp = new ComponentName(context.getPackageName(), GcmIntentService.class.getName()); // Start the service, keeping the device awake while it is launching. startWakefulService(context, (intent.setComponent(comp))); setResultCode(Activity.RESULT_OK); } } 

当GCM向您的设备发送消息时, BroadcastReceiver将接收消息并调用onReceive()函数,您可以在其中启动服务以实际执行预期的任务。

上面的代码示例使用一个名为WakefulBroadcastReceiver的专用BroadcastReceiver ,它确保设备在服务正在运行时不会进入hibernate状态。

请参阅官方Android页面: https : //developer.android.com/google/gcm/client.html

当应用程序被用户关闭时:通知不会到达

这是Android平台的一个function。 用户强制停止应用程序会将应用程序置于停止状态,并且不运行任何代码,包括清单中声明的​​任何广播接收器。 只有当用户明确启动应用程序时,它才处于接收器被触发的状态。

如需进一步阅读: http : //www.doubleencore.com/2014/06/effects-android-application-termination/

它不会从任务管理器中杀死应用程序,但如果你只是将它从最近的位置移开它就可以工作。 我尝试通过杀死它并让某人向我发送一个消息来做whatsapp,我没有收到任何通知。 然后我启动了应用程序,我收到了通知。

我刚刚完成了一个GCM应用程序。 如果您关闭应用程序仍然可以正常工作。 问题是你应该已经打开了一次应用程序。 创建两个类来实现这个目标: GcmBroadcastReceiverGcnIntentService 。 查找更多信息http://developer.android.com/google/gcm/index.html

这是诀窍

 public class GcmBroadcastReceiver extends WakefulBroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // Explicitly specify that GcmIntentService will handle the intent. ComponentName comp = new ComponentName(context.getPackageName(), GcmIntentService.class.getName()); // Start the service, keeping the device awake while it is launching. startWakefulService(context, (intent.setComponent(comp))); setResultCode(Activity.RESULT_OK); } } 

被扩展的类是WakeFulBroadcastReceiver 。 您的Manifest.xml中有一个WAKE_LOCK权限。 这允许使用PowerManager WakeLocks来防止处理器hibernate或屏幕变暗。 但是,如果您扩展BroadcastReceiver ,则在应用关闭后它将无法工作。

  

Firebase API有两种types的消息,他们称之为:

  • 通知
  • 数据

从这里find更多信息

重要信息:您无法从Firebase控制台发送数据有效内容消息,控制台仅发送通知消息。 所以我已经提到过如何使用邮递员发送推送通知请按照以下步骤进行操作。

由于数据有效负载,您必须发送带有数据有效负载的推送消息 – 无论您的应用程序是在前台还是后台还是被杀死,这些消息都将始终传递给onMessageReceived()方法。

Android 8.0 Oreo中,如果应用程序关闭,则不会收到通知。由于DOZE模式和电池优化,您只需关闭所有应用程序或特定应用程序的电池优化。

通过以下步骤为您的应用关闭电池优化:

设置>>电池>>电池优化>>find您的应用>>选择>>如果优化点击不优化>>尝试推送通知

使用邮递员发送推送通知

第1步: https : //fcm.googleapis.com/fcm/send

第2步:将这两个设置为Header

授权 :key = AIzaSyBuRl1Ikz3VXFvU7xW9mmg51lJ3uDSH

Content-Type :application / json

第3步:发送此json

 { "to" : "eb9HgFulyzU:APA91bFMLReWWwilNFfJ1fnXZ0A2PhJAYsabg-UcK_dHgHQcstTzcxLs4_mqgOmZtUiyLMne4JaOG7f8KH7pWxB7JugOGCCYgjd4fUynRBKZvNUgjaj2UdJB2Ux8VocszuUydCX", "data" : { "message" : "First Notification", "title": "Push Notification", "key_1" : "Key 1 value", "key_2" : "Hello" } } 

希望这可以帮助..

请享用 :) :)

我一直在尝试另一部手机,第二部手机完美无缺,即使手机关机也是如此。 第一个有一个房间,当应用程序关闭时不允许通知…感谢所有

经过一些测试我在这个问题上做了一些测试,我发现它在应用程序关闭方面表现不同。 如果在电缆连接到设备时关闭应用程序,则会在应用程序关闭时阻止每个通知。 但是,如果您从设备上取下电缆并关闭应用程序,当您发送通知时,一切都会再次正常工作!

如果您收到“等待调试器”popup消息,只需重新启动设备然后发送测试通知!

我在Oneplus手机上遇到了同样的问题。 正如上面许多人所提到的,问题是强制终止应用程序。 在我的情况下,它是由于“最近的应用程序管理”设置完成的,如下所示。 一旦我将其更改为“正常清除”设置,一切都开始正常工作。

在此处输入图像描述