HarmonyOS-消息推送
一. 服务简述
Push Kit(推送服务)是华为提供的消息推送平台,建立了从云端到终端的消息推送通道。所有HarmonyOS 应用可通过集成 Push Kit,实现向应用实时推送消息,使消息易见,构筑良好的用户关系,提升用户的感知度和活跃度。
二. 开发准备
1)在华为开发者联盟网站,注册成为开发者,并完成实名认证。
2)参考调试应用与发布应用,添加 APP ID、创建证书、添加调试设备、创建 Profile 文件。
3)在 AppGallery Connect 上,参考创建项目与创建应用中完成 HarmonyOS 应用的创建。
4)参考配置应用签名证书指纹,添加公钥指纹。
三. 工程配置
1)在应用 entry 模块的 module.json5 中添加 metadata - client_id(client_id 在 AppGallery Connect - 我的项目中查看)。
{
"module": {
"name": "entry",
...
"metadata": [
{
"name": "client_id",
"value": "11659886"
}
]
}
}
2)在应用 entry 模块的 module.json5 中添加 abilities - skills - actions。
{
"module": {
"name": "entry",
...
"abilities": [
{
"name": "EntryAbility",
...
"skills": [
{
"actions": [
"action.system.home",
"ohos.want.action.viewData"
]
}, {
"actions": [
"action.ohos.push.listener", // 订阅场景消息('IM' | 'VoIP' | 'BACKGROUND' | 'EMERGENCY')
"com.base.action.pushService" // 与服务端共同协议的action
]
}
]
}
]
}
}
四. 功能实现
1. 获取pushToken
import { pushService } from '@kit.PushKit';
export class PushManager {
public getPushToken(): Promise<string> {
return pushService.getToken()
}
}
2. 通知权限申请
import notificationManager from '@ohos.notificationManager';
export class PushManager {
public async checkNotificationPermissions(): Promise<void> {
let grantStatus = await notificationManager.isNotificationEnabled()
if (!grantStatus) {
await notificationManager.requestEnableNotification()
grantStatus = await notificationManager.isNotificationEnabled()
if (!grantStatus) {
console.log('通知权限未开启')
} else {
console.log('通知权限已开启')
}
} else {
console.log('通知权限已开启')
}
}
}
3. 消息接收/处理
1)冷启动
onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
super.onCreate(want, launchParam)
if (want && want.action === 'com.base.action.pushService') {
console.log(`push_want_parameters: ${JSON.stringify(want.parameters)}`)
PushManager.getInstance().onCreate(want)
}
}
2)后台唤起
onNewWant(want: Want, launchParam: AbilityConstant.LaunchParam): void {
super.onNewWant(want, launchParam)
if (want && want.action === 'com.base.action.pushService') {
console.log(`push_want_parameters: ${JSON.stringify(want.parameters)}`)
PushManager.getInstance().onNewWant(want)
}
}
4. 订阅场景消息
场景化消息类型包含IM(通知扩展消息场景)、VoIP(应用内通话消息场景)、BACKGROUND(后台消息场景)、EMERGENCY(紧急事件消息场景)。
import { pushService, pushCommon } from '@kit.PushKit';
export class PushManager {
public receiveMessage(pushType: 'IM' | 'VoIP' | 'BACKGROUND' | 'EMERGENCY'): void {
const ability = AppStorage.get('ability') as UIAbility // 在EntryAbility中存储Ability
pushService.receiveMessage(pushType, ability, (payload: pushCommon.PushPayload) => {
const data: PushPayloadData = JSON.parse(payload.data) as PushPayloadData
console.log(`pushService_receiveMessage_data : ${JSON.stringify(data)}`);
})
}
}
5. 推送错误码
调用推送相关的API报错,可以参考推送服务API错误码。