应用研发平台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. 引导用户检查设备通知权限和设置。
通过以上步骤,可以有效解决后台收不到推送的问题。您可以复制页面截图提供更多信息,我可以进一步帮您分析问题原因。