解决方案
应用内推送消息或通知内容可以分为以下几种场景:
应用处于后台场景:
仅有语音播报消息和应用内通话消息可以在应用内接收消息,使用后台消息可以缓存消息,但不会拉起应用进程。
应用处于前台场景:
可以通过在UIAbility中调用pushService.receiveMessage接收Push场景化消息。
- UIAbility.onCreate是同步接口,不支持异步回调,需要在onCreate生命周期的入口,完成pushService.receiveMessage()注册,并且保证在注册前没有等待异步方法执行的调用。
- 需要在对应的UIAbility类型的组件的onCreate()中,调用receiveMessage()方法接收消息,并不是固定在EntryAbility的onCreate()中调用。
- 通知消息场景:
- 将REST API发送的通知消息体Notification中foregroundShow设置为false,此时通知消息将不会展示,可以通过pushService.receiveMessage()接收通知消息数据(foregroundShow为true时,无法通过pushService.receiveMessage()获取消息数据)。
- 在项目模块的“src/main/module.json5”文件的对应abilities模块中(以PushMessageAbility为例),配置skills标签的actions属性内容为action.ohos.push.listener,有且只能有一个ability定义该action,若同时添加uris参数,则uris内容需为空。
- 通过pushService.receiveMessage()方法传入PushType为"DEFAULT"获取通知消息,PushMessageAbility示例代码详情请参见应用在前台时处理通知消息。
- 语音播报消息场景:
- 完成申请推送语音播报消息权益。
- 在项目模块的“src/main/module.json5”文件的对应abilities模块中(以PushMessageAbility为例),配置skills标签的actions属性内容为action.ohos.push.listener,有且只能有一个ability定义该action,若同时添加uris参数,则uris内容需为空。
- 通过pushService.receiveMessage()方法传入PushType为"IM"获取语音播报消息,用于应用在前台时接收语音播报消息。
调用示例代码请参考开发步骤中步骤3。
- 应用内通话场景:
- 完成申请推送应用内通话消息权益。
- 在项目模块的“src/main/module.json5”文件的对应abilities模块中(以PushMessageAbility为例),配置skills标签的actions属性内容为action.ohos.push.listener,有且只能有一个ability定义该action,若同时添加uris参数,则uris内容需为空。
- 通过receiveMessage()方法传入PushType为"VoIP"获取应用内通话消息。调用示例代码请参考开发步骤中步骤2。
- 后台消息场景:
- 在项目工程的“src/main/module.json5”文件的abilities模块的skills标签中配置actions内容为action.ohos.push.listener(有且只能有一个ability定义该action,若同时添加uris参数,则uris内容需为空)。
- 通过pushService.receiveMessage()方法传入PushType为"BACKGROUND"获取后台消息。调用示例代码请参考开发步骤中步骤5。
获取通知栏消息内容场景:
调用notificationManager.getActiveNotifications可以获取当前应用未删除的通知列表。可以通过读取返回值中NotificationRequest获取通知内容。