Android 当应用程序关闭且处于优化电池模式时未接收FCM消息| OnePlus 5t | OnePlus 6 |错误广播意图回调:结果=取消

Android 当应用程序关闭且处于优化电池模式时未接收FCM消息| OnePlus 5t | OnePlus 6 |错误广播意图回调:结果=取消,android,push-notification,background,firebase-cloud-messaging,android-8.0-oreo,Android,Push Notification,Background,Firebase Cloud Messaging,Android 8.0 Oreo,我正在尝试向我的设备发送FCM消息。当应用程序位于后台或前台时,我会正确接收它们。但是,当我的应用程序被终止(即从最近的应用程序中删除)时,如果它处于默认的“优化”电池使用模式,我将不会收到通知。当我将应用程序的电池模式设置为“未优化”时,即使应用程序被关闭,我也能正确接收通知 是的,我尝试过以“高”优先级发送FCM消息和FCM通知,但收到消息时的logcat显示: Error broadcast intent callback: result=CANCELLED forIntent { act

我正在尝试向我的设备发送FCM消息。当应用程序位于后台或前台时,我会正确接收它们。但是,当我的应用程序被终止(即从最近的应用程序中删除)时,如果它处于默认的“优化”电池使用模式,我将不会收到通知。当我将应用程序的电池模式设置为“未优化”时,即使应用程序被关闭,我也能正确接收通知

是的,我尝试过以“高”优先级发送FCM消息和FCM通知,但收到消息时的logcat显示:

Error broadcast intent callback: result=CANCELLED forIntent { act=com.google.android.c2dm.intent.RECEIVE pkg=com.flagg327.guicomaipu (has extras) }
我设备上的所有其他应用程序(WhatsApp、Facebook等)都处于“优化”模式,但即使它们被杀死,也会收到推送通知

我已尝试安装我的应用程序的已签名apk版本,但在后台仍无响应

现在我已经实现了一个基本的功能

@Override
protected void onStart() {
    super.onStart();  
packageName = getApplication().getPackageName();
intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
pm = (PowerManager) 
getApplication().getSystemService(Context.POWER_SERVICE);
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O && 
!pm.isIgnoringBatteryOptimizations(packageName)) {

intent.setAction(Settings.ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS);
    getApplication().startActivity(intent);
        }
        }
这基本上需要用户进行设置,并强制他禁用优化,但这是一个糟糕的方法,我们如何才能通过编程解决这个问题

我使用的是OnePlus 5T(Android 8.1.0)。有人能解释为什么我的应用程序会发生这种情况吗?以及如何将我的应用程序添加到白名单

这是我的数据有效载荷代码

JSONObject root = new JSONObject();

                    JSONObject data = new JSONObject();

                    data.put("type", type);
                    data.put("message", message);
                    data.put("id", pNumber);
                    data.put("count",count);
                    JSONObject android = new JSONObject();
                    android.put("priority","high");
                    root.put("android",android);
                    root.put("data", data);
                    root.put("to", "/topics/"+recipients);



                    String result = postToFCM(root.toString());

任何帮助都将被感激

这是您的问题的解决方案

  • 转到手机的设置

  • 点击应用程序,然后点击应用程序列表

  • 向下滚动找到你的应用程序,然后点击它

  • 点击通知并确保其已启用

  • 在同一屏幕中,轻触电池

  • 点击电池优化

  • 向下滚动找到你的应用程序,然后点击它

  • 选择“不优化”,然后点击“完成”


  • OOS在通知方面具有惊人的攻击性,以至于许多人只是安装了天堂操作系统来避免它。类似的,可能有用的不,我已经尝试了上述帖子中提到的所有解决方案,但对我不起作用:(抱歉,寻找一种编程方法,请回答保持开发人员的观点。没有编程方法可以执行socan I白名单应用程序,这样即使经过优化,它也可以像whatsapp一样在后台运行?请参阅此警报管理器在每个周期间隔内触发,但我正在寻找异步方法,即。无论何时收到通知,都需要实时处理