应用研发平台EMAS中有的时候在后台(APP没被杀死)收不到推送是什么原因?前台都能收到
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在应用研发平台EMAS中,后台(APP未被杀死)收不到推送通知的问题可能由多种原因导致。以下是详细的原因分析及解决方案:
移动推送在初始化过程中会启动一个后台channel进程,用于维持长连接并接收推送消息。如果channel进程未正确执行初始化操作,可能导致后台无法接收到推送。
channel进程是否执行了初始化操作:[AMS]Initialize Mobile Push service...
channel进程未正确初始化。PushServiceFactory.init方法在Application主线程中调用,不能放在Activity中或异步执行。Application中对推送SDK初始化进行进程判断,导致初始化仅在主进程执行。例如,以下代码会导致问题:if (isMainProcess()) {
PushServiceFactory.init(context);
}
应移除进程判断逻辑,确保所有进程均执行初始化。
从Android 8.0(API Level 26)开始,系统引入了NotificationChannel机制。如果未正确设置NotificationChannel,即使推送消息已到达客户端,也无法弹出通知。
targetSdkVersion是否大于等于26。NotificationChannel。Application的onCreate方法中注册NotificationChannel,示例代码如下:if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
String id = "1"; // 通知渠道ID
CharSequence name = "notification channel"; // 渠道名称
String description = "notification description"; // 渠道描述
int importance = NotificationManager.IMPORTANCE_HIGH; // 重要性级别
NotificationChannel mChannel = new NotificationChannel(id, name, importance);
mChannel.setDescription(description);
mChannel.enableLights(true); // 启用指示灯
mChannel.setLightColor(Color.RED); // 设置指示灯颜色
mChannel.enableVibration(true); // 启用震动
mChannel.setVibrationPattern(new long[]{100, 200, 300, 400, 500});
mNotificationManager.createNotificationChannel(mChannel);
}
NotificationChannel后,需卸载重装App才能生效。部分厂商(如华为、小米、OPPO、vivo等)对推送消息有特定的分类和限制。如果未正确配置厂商通道的消息分类,可能导致后台无法接收到推送。
AndroidNotificationHuaweiChannel、AndroidNotificationHonorChannel等。AndroidMessageHuaweiCategory参数设置消息分类。AndroidNotificationHonorChannel参数设置消息分类。推送类型(PushType)决定了消息的下发方式。如果推送类型设置为MESSAGE而非NOTICE,消息将不会默认在通知栏弹出。
PushType参数是否设置为NOTICE。PushType设置为NOTICE,以确保消息通过厂商通道下发并在通知栏弹出。后台收不到推送的原因可能涉及channel进程初始化、NotificationChannel设置、厂商通道配置、推送类型设置等多个方面。建议按照以下步骤逐一排查: 1. 确保PushServiceFactory.init在Application主线程中执行,并避免进程判断逻辑。 2. 检查并正确设置NotificationChannel。 3. 配置厂商通道的消息分类参数,确保符合各厂商的要求。 4. 确认推送类型设置为NOTICE。 5. 引导用户检查设备通知权限和设置。
通过以上步骤,可以有效解决后台收不到推送的问题。您可以复制页面截图提供更多信息,我可以进一步帮您分析问题原因。