华为HarmonyOS灵活高效的消息推送服务(Push Kit) -- 8 发送通知扩展消息

news/2024/11/17 12:51:46/

场景介绍

当用户终端收到您发送的通知扩展消息时:

  • 若您的应用进程不在前台,Push Kit会将消息内容传递给通知扩展进程,您可以在该进程中自行完成业务处理(例如:语音播报等)后,返回自定义消息内容,Push Kit将弹出通知提醒。您需要在10秒内返回消息内容,否则Push Kit将默认展示原有的消息内容。
  • 若您的应用进程在前台,则不弹出通知提醒,您可以在应用进程中获取通知扩展消息内容并自行完成业务处理。

开通权益

  • 推送通知扩展消息需要申请场景化消息权益,请参见申请推送通知扩展消息权益。

频控规则

调测阶段,每个项目每日全网最多可推送1000条测试消息。发送测试消息需设置testMessage为true。

正式发布阶段,单设备单应用下每日推送消息总条数受设备消息频控限制,所有场景化消息发送条数不超过3000条。

开发步骤

  1. 参见指导获取Push Token。
  2. 为确保应用可正常收到消息,建议应用发送通知前调用requestEnableNotification()方法弹出提醒,告知用户需要允许接收通知消息。详情请参见Notification Kit-请求通知授权。
  3. 在您的工程内创建一个ExtensionAbility类型的组件并且继承RemoteNotificationExtensionAbility,完成onReceiveMessage()方法的覆写,代码示例如下:
    import { pushCommon, RemoteNotificationExtensionAbility } from '@kit.PushKit';
    import { image } from '@kit.ImageKit';
    import { hilog } from '@kit.PerformanceAnalysisKit';
    import { resourceManager } from '@kit.LocalizationKit';
    import { common } from '@kit.AbilityKit';
    export default class RemoteNotificationExtAbility extends RemoteNotificationExtensionAbility {
    async onReceiveMessage(remoteNotificationInfo: pushCommon.RemoteNotificationInfo): Promise<pushCommon.RemoteNotificationContent> {
    hilog.info(0x0000, 'testTag', 'TestExtAbility onReceiveMessage, remoteNotificationInfo');
    // Read the pixel map object
    const resourceMgr: resourceManager.ResourceManager = (this.context as common.UIExtensionContext).resourceManager;
    const fileData: Uint8Array = await resourceMgr.getMediaContent($r('app.media.icon'));
    const buffer = fileData.buffer;
    const imageSource: image.ImageSource = image.createImageSource(buffer as ArrayBuffer);
    const pixelMap: image.PixelMap = await imageSource.createPixelMap();
    if (pixelMap) {
    pixelMap.getImageInfo((err, imageInfo) => {
    if (imageInfo) {
    hilog.info(0x0000, 'testTag', `imageInfo ${imageInfo.size.width} * ${imageInfo.size.height}`);
    }
    });
    }
    // Return the replaced message content.
    return {
    title: 'Default replace title.',
    text: 'Default replace text.',
    badgeNumber: 1,
    setBadgeNumber: 2,
    overlayIcon: pixelMap,
    wantAgent: {
    abilityName: 'DemoAbility',
    parameters: {
    key: 'Default value'
    }
    }
    }
    }
    onDestroy(): void {
    hilog.info(0x0000, 'testTag', 'RemoteNotificationExtAbility onDestroy.');
    }
    }
     
    • 函数的返回值用于替换最终展示在终端的通知,title和text代表您要展示的通知标题与通知内容。
    • badgeNumber字段为展示通知时增加的角标数量,setBadgeNumber字段为展示通知时显示的角标数量,两者同时返回时,setBadgeNumber优先于badgeNumber。详情请参见RemoteNotificationContent。
    • overlayIcon字段为展示通知时的叠加图标。详情请参见RemoteNotificationContent。
    • wantAgent.abilityName字段为需要替换的点击拉起的落地页abilityName(例如DemoAbility),DemoAbility需要您自行适配开发。详情请参见RemoteWantAgent。
    • wantAgent.parameters字段表示拉起落地页透传参数。详情请参见RemoteWantAgent。
  4. 在项目工程的src/main/module.json5文件的extensionAbilities模块中配置RemoteNotificationExtAbility的typeactions信息(有且仅有一个ExtensionAbility,配置如下,若同时添加uris参数,则uris内容需为空):
    "extensionAbilities": [
    {
    "name": "RemoteNotificationExtAbility",
    "type": "remoteNotification",
    "srcEntry": "./ets/entryability/RemoteNotificationExtAbility.ets",
    "description": "RemoteNotificationExtAbility test",
    "exported": false,
    "skills": [
    {
    "actions": ["action.hms.push.extension.remotenotification"]
    }
    ]
    }
    ]
     
    • type:固定值为remoteNotification,表示通知扩展的ExtensionAbility类型。
    • actions:固定值为action.hms.push.extension.remotenotification,用于接收通知扩展消息。
  5. 应用服务端调用REST API推送消息,消息详情可参见场景化消息API接口功能介绍,请求示例如下:
    ​
    // Request URL
    POST https://push-api.cloud.huawei.com/v3/[projectId]/messages:send
    // Request Header
    Content-Type: application/json
    Authorization: Bearer eyJr*****OiIx---****.eyJh*****iJodHR--***.QRod*****4Gp---****
    push-type: 2
    // Request Body
    {
    "payload": {
    "extraData": "通知扩展场景携带的额外数据",
    "notification": {
    "category": "EXPRESS",
    "title": "通知标题",
    "body": "通知内容",
    "clickAction": {
    "actionType": 0
    }
    }
    },
    "target": {
    "token": ["IQAAAACy0tEjCgBijrEB3************8o0m5EdTXbdlhiIiX_vNGQ5Ic5rXWmw"]
    },
    "pushOptions": {
    "testMessage": true
    }
    }
    ​

    • [projectId]:项目ID,登录AppGallery Connect网站,选择“我的项目”,在项目列表中选择对应的项目,左侧导航栏选择“项目设置”,在该页面获取。
    • Authorization:JWT格式字符串,可参见Authorization获取。
    • push-type:2表示通知扩展场景。
    • category:消息自分类类别,当前支持设置为EXPRESS,发送消息前请确保您已申请通知消息自分类权益。
    • actionType:0表示点击消息打开应用首页。
    • token:Push Token,可参见获取Push Token获取。
    • extraData:通知扩展场景可携带的额外数据,字符串类型。详情参见ExtensionPayload 通知扩展消息。
    • testMessage:测试消息标识,true表示测试消息。每个项目每天限制发送1000条测试消息,单次推送可发送Token数不超过10个。详情请参见testMessage。
  6. 发送消息后,若您的应用进程不在前台,Push Kit会将通知消息内容传递给通知扩展进程,您在该进程中自行完成语音播报业务处理,并返回特定的消息内容(例如title、body等)后,Push Kit将弹出通知提醒。若您的应用进程在前台,则不弹出通知提醒,您可以通过receiveMessage()方法实时获取通知扩展消息数据,示例代码如下:
    import { UIAbility } from '@kit.AbilityKit';
    import { pushService } from '@kit.PushKit';
    import { BusinessError } from '@kit.BasicServicesKit';
    import { hilog } from '@kit.PerformanceAnalysisKit';
    /**
    * 此处以PushMessageAbility为例,接收通知扩展消息内容
    */
    export default class PushMessageAbility extends UIAbility {
    onCreate(): void {
    try {
    // receiveMessage中的参数固定为IM
    pushService.receiveMessage('IM', this, (data) => {
    hilog.info(0x0000, 'testTag', 'Succeeded in getting message');
    });
    } catch (err) {
    let e: BusinessError = err as BusinessError;
    hilog.error(0x0000, 'testTag', 'Failed to get message: %{public}d %{public}s', e.code, e.message);
    }
    }
    }

    并且在项目模块的src/main/module.json5中的skills里配置actions内容为 action.ohos.push.listener(有且只能有一个ability定义该action,若同时添加uris参数,则uris内容需为空):

    {
    "name": "PushMessageAbility",
    "srcEntry": "./ets/abilities/PushMessageAbility.ets",
    "launchType": "singleton",
    "startWindowIcon": "$media:icon",
    "startWindowBackground": "$color:startWindowBackgroundColor",
    "exported": false,
    "skills": [
    {
    "actions": [
    "action.ohos.push.listener"
    ]
    }
    ]
    }

http://www.ppmy.cn/news/1531074.html

相关文章

精密制造的革新:光谱共焦传感器与工业视觉相机的融合

在现代精密制造领域&#xff0c;对微小尺寸、高精度产品的检测需求日益迫切。光谱共焦传感器凭借其非接触、高精度测量特性脱颖而出&#xff0c;而工业视觉相机则以其高分辨率、实时成像能力著称。两者的融合&#xff0c;不仅解决了传统检测方式在微米级别测量上的局限&#xf…

TMR技术的发展及其应用技术的介绍

目录 概述 1 TMR传感器介绍 1.1 原理介绍 1.2 技术演进历史 2 TMR技术的应用 2.1 电阻特性 2.2 技术比较 2.3 磁道特性 3 多维科技的芯片&#xff08;TMR1202&#xff09; 3.1 芯片介绍 3.2 特性 ​3.3 典型应用 参考文献 概述 本文主要介绍TMR技术的发展及其技术…

Unity网络开发记录(二):采用多线程处理服务端对客户端的连接和信息处理

在主线程处理对所有客户端的连接以及消息处理&#xff0c;是非常消耗时间的&#xff0c;所以对于监听客户端的连接&#xff0c;以及信息的接收&#xff0c;都额外开线程去处理&#xff0c;减轻主线程的压力 using System.Globalization; using System.Net; using System.Net.S…

速盾:高防cdn跟其他防御产品有什么不同?

高防CDN与其他防御产品相比&#xff0c;有以下几个不同之处&#xff1a; 抗DDoS能力更强&#xff1a;高防CDN具备强大的抗DDoS攻击能力&#xff0c;能够有效阻断各种类型的DDoS攻击&#xff0c;包括SYN Flood、UDP Flood、HTTP Flood等。它利用分布式节点、智能算法以及大规模带…

智能电话机器人的优势有哪些突出的?电销系统搭建部署

智能电话机器人作为人工智能语音系列的产品&#xff0c;是一款帮助电销企业降低成本&#xff0c;提高工作效率的销售辅助工具。同时&#xff0c;电话机器人也是人工智能落地产品中为数不多的营销型产品。 在传统的电话营销场景中&#xff0c;销售员虽然可以借助外呼软件进行自…

计算机视觉硬件整理(四):相机与镜头参数介绍

文章目录 前言一、工业相机常用分类二、工业相机的基本参数三、工业相机的接口四、工业镜头的参数五、工业镜头的选择要点 前言 随着科技的飞速发展&#xff0c;工业自动化和智能制造在当今社会扮演着越来越重要的角色。在这个背景下&#xff0c;工业相机作为一种关键的视觉检…

opencv实战项目二十七:基于meanshif的视频脸部跟踪

文章目录 前言一、Mean Shift是什么&#xff1f;二、opencv中meanshift使用流程三、使用代码&#xff1a;四、效果&#xff1a; 前言 在当今这个信息化时代&#xff0c;图像和视频处理技术已经渗透到我们生活的方方面面&#xff0c;从安防监控、智能交通到人机交互等领域&…

Golang | Leetcode Golang题解之第440题字典序的第K小数字

题目&#xff1a; 题解&#xff1a; func getSteps(cur, n int) (steps int) {first, last : cur, curfor first < n {steps min(last, n) - first 1first * 10last last*10 9}return }func findKthNumber(n, k int) int {cur : 1k--for k > 0 {steps : getSteps(cu…