一. 服务简述
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错误码。