当前位置: 首页 > article >正文

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错误码。


http://www.kler.cn/a/383287.html

相关文章:

  • 大语言模型中的Agent;常见的Agent开发工具或框架
  • 复习打卡大数据篇——Hadoop HDFS 03
  • windows C++ TCP客户端
  • GPUStack v0.4.1 单节点与多节点安装与部署指南 Docker PowerShell
  • XXLJob部署和使用教程
  • VSCode 性能优化指南:提高编码效率,减少资源占用
  • 使用vue添加网站结构化标记schema
  • Python 操作数据库:读取 Clickhouse 数据存入csv文件
  • Java之字符串分割转换List
  • faiss用于大数据量的向量检索
  • vm虚拟机中添加网卡却在network-scripts文件找不到,解决方法
  • vue中的nextTick() - 2024最新版前端秋招面试短期突击面试题【100道】
  • IDEA2024下安装kubernetes插件并配置进行使用
  • Spring源码(十一):Spring MVC之DispatchServlet
  • WPF+MVVM案例实战(二十)- 制作一个雷达辐射效果的按钮
  • Ubuntu 安装Nvidia 显卡驱动
  • 新能源汽车空调压缩机:科技驱动的冷暖核心
  • 深度学习:循环神经网络(RNN)详解
  • 深度学习:Cross-attention详解
  • SpringMvc day1101
  • 基于布局的3D场景生成技术:SceneCraft
  • 美创科技以韧性数据安全防护体系助力畜牧业数字化发展
  • 计算机专业开题报告写法,该怎么写好?
  • 头歌——机器学习(线性回归)
  • NewStarCTF2024-Week5-WebMisc-WP
  • yolov8涨点系列之轻量化主干网络替换