应用研发平台EMAS中APP消息推送,回调可以获取到消息,但是通知栏没有;这个是要自己实现吗?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在应用研发平台EMAS中,如果APP消息推送的回调可以获取到消息,但通知栏没有显示,这通常是因为消息类型和通知类型的处理方式不同所导致的。以下是详细解答:
根据知识库资料,EMAS移动推送中消息(Message)和通知(Notice)有以下区别: - 消息(PushType=MESSAGE):当APP在线时,消息通过EMAS长连接通道送达,SDK会触发onMessage()
回调方法,但不会自动弹出通知栏提示。开发者需要自行处理该回调逻辑。 - 通知(PushType=NOTICE):当APP在线时,通知通过EMAS长连接通道送达,SDK会自动弹出通知栏提示,并触发onNotification()
回调方法。
因此,如果您推送的是消息类型(PushType=MESSAGE),即使回调成功,也不会在通知栏显示,因为这是消息类型的默认行为。
如果希望在通知栏显示推送内容,您需要确保以下几点: 1. 推送类型为通知(PushType=NOTICE)
在EMAS控制台或API调用中,明确选择推送类型为“通知”(PushType=NOTICE)。这样,SDK会在收到推送后自动弹出通知栏提示。
自定义通知栏逻辑(针对消息类型)
如果您推送的是消息类型(PushType=MESSAGE),但仍然希望在通知栏显示,您需要在onMessage()
回调方法中自行实现通知栏逻辑。例如:
NotificationManager
创建并显示通知。示例代码如下:
public void onMessage(Context context, String message) {
// 解析消息内容
String title = "新消息";
String content = message;
// 创建通知
NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
NotificationChannel channel = new NotificationChannel("default", "消息通知", NotificationManager.IMPORTANCE_HIGH);
notificationManager.createNotificationChannel(channel);
Notification notification = new NotificationCompat.Builder(context, "default")
.setContentTitle(title)
.setContentText(content)
.setSmallIcon(R.drawable.ic_notification)
.build();
// 显示通知
notificationManager.notify(1, notification);
}
离线消息转通知功能
如果您的APP在离线状态下接收不到通知,可以通过启用“离线消息转通知”功能(iOSRemind)来实现。此功能会将离线消息转换为通知并实时推送。
onMessage()
回调中自行实现通知栏逻辑。通过以上步骤,您可以解决回调获取到消息但通知栏未显示的问题。