当应用被终止并处于“优化电池”模式时,未收到FCM消息| OnePlus 5t | OnePlus 6 |错误的广播意图回调:result = CANCELLED

时间:2018-09-10 17:38:40

标签: android push-notification background firebase-cloud-messaging android-8.0-oreo

我正在尝试将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)。谁能解释为什么这会在我的应用程序中专门发生?以及如何将我的应用程序添加到白名单

can this be implemented 这是我的数据有效负载代码

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());

任何帮助将不胜枚举...

1 个答案:

答案 0 :(得分:0)

这是解决您问题的方法。

  1. 转到手机的设置。

  2. 轻按“应用”,然后轻按“应用列表”。

  3. 向下滚动以找到public class StudentResponseGenerator implements ResponseGenerator<StudentRequestContext> { @Override public Response getResponse(Request<StudentRequestContext> studentRequest) { // ... } } 并点击它。

  4. 点击通知并确保已启用。

  5. 在同一屏幕上,点击“电池”。

  6. 点击电池优化。

  7. 向下滚动以找到your app并点击它。

  8. 选择“不优化”,然后点击“完成”。