小编Khu*_*wat的帖子

当应用程序被终止且处于优化电池模式时,未收到 FCM 消息| 一加 5t |一加 6 | 错误广播意图回调:结果=CANCELLED

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

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

Error broadcast intent callback: result=CANCELLED forIntent { act=com.google.android.c2dm.intent.RECEIVE pkg=com.flagg327.guicomaipu (has extras) }
Run Code Online (Sandbox Code Playgroud)

我设备上的所有其他应用程序(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);
        }
        }
Run Code Online (Sandbox Code Playgroud)

这基本上将用户带到设置并强制他禁用优化,但这是一个糟糕的方法,我们如何以编程方式解决这个问题。

我使用的是 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 …
Run Code Online (Sandbox Code Playgroud)

android background push-notification firebase-cloud-messaging android-8.0-oreo

5
推荐指数
1
解决办法
1427
查看次数