首页 > 其他分享 >3个步骤轻松集成Push Kit,实现App消息推送

3个步骤轻松集成Push Kit,实现App消息推送

时间:2024-10-10 15:25:03浏览次数:9  
标签:通知 App Kit Token 消息 Push 推送 data

推送通知作为App重要的消息传递工具,广泛应用于电子商务、社交媒体、旅游交通等领域的通知场景。比如当应用有新功能或安全补丁时,系统将推送消息提醒用户及时更新;如果是航班出行类的应用,会发送最新的班次时间表给用户,以确保及时提醒。推送通知是App与用户建立联系,保持信任和满意度的重要方式,那么App怎样才能实现发送通知消息给用户呢?

HarmonyOS SDK推送服务(Push Kit)是华为提供的消息推送平台,建立了从云端到终端的消息推送通道,通过集成推送服务,HarmonyOS应用就可以实现向用户实时推送通知消息。其显示场景主要包括通知中心、锁屏、横幅、桌面图标角标与通知图标。

image

业务流程

image

实现推送通知消息的业务流程包括申请并获取Push Token、上报Token等信息至应用服务端、发送推送消息请求、下发消息到Push Kit和处理消息5个步骤。

名词解释

在学习实现推送通知消息的能力之前,我们先来学习几个专有名词。

Push Token:

Push Token标识了每台设备上的每个应用,开发者调用getToken()接口向Push Kit服务端请求Token,在获取到Token后,需要使用Push Token来推送消息。当在应用启动时调用getToken()接口时,如果设备的Token发生变化,开发者需要及时上报到应用服务器更新Token。

Category:

通知消息类别。为了改善终端用户推送体验,Push Kit对通知消息进行分类管理,category的取值不同,标识的消息类型则不同,不同的通知消息类型影响消息展示和提醒方式,开发者在推送消息前,需先申请通知消息自分类权益

开发步骤

实现通过Push Kit推送通知消息主要分为三个步骤,分别为获取Push Token、告知用户需要允许接收通知消息、推送通知消息。

1.获取Push Token。

首先导入pushService模块,建议在您的UIAbility(例如EntryAbility)的onCreate()方法中调用getToken()接口获取Push Token并上报到您的服务端,方便您的服务端向终端推送消息。

import { pushService } from '@kit.PushKit';
//导入pushService模块。
import { hilog } from '@kit.PerformanceAnalysisKit';
import { BusinessError } from '@kit.BasicServicesKit';
import { UIAbility, AbilityConstant, Want } from '@kit.AbilityKit';

export default class EntryAbility extends UIAbility {
  // 入参 want 与 launchParam 并未使用,为初始化项目时自带参数
  async onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): Promise<void> {
    // 获取Push Token
    try {
      const pushToken: string = await pushService.getToken();
      hilog.info(0x0000, 'testTag', 'Succeeded in getting push token');
    } catch (err) {
      let e: BusinessError = err as BusinessError;
      hilog.error(0x0000, 'testTag', 'Failed to get push token: %{public}d %{public}s', e.code, e.message);
    }
    // 上报Push Token并上报到您的服务端
  }
}

2.应用需要获取用户授权才能发送通知,为确保应用可正常收到消息,建议应用发送通知前调用requestEnableNotification()方法,弹窗让用户选择是否允许发送通知。

import { notificationManager } from '@kit.NotificationKit';
import { BusinessError } from '@kit.BasicServicesKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
import { common } from '@kit.AbilityKit';

const TAG: string = '[PublishOperation]';
const DOMAIN_NUMBER: number = 0xFF00;

let context = getContext(this) as common.UIAbilityContext;
notificationManager.isNotificationEnabled().then((data: boolean) => {
  console.info("isNotificationEnabled success, data: " + JSON.stringify(data));
  if(!data){
    notificationManager.requestEnableNotification(context).then(() => {
      hilog.info(DOMAIN_NUMBER, TAG, `[ANS] requestEnableNotification success`);
    }).catch((err : BusinessError) => {
      if(1600004 == err.code){
        hilog.error(DOMAIN_NUMBER, TAG, `[ANS] requestEnableNotification refused, code is ${err.code}, message is ${err.message}`);
      } else {
        hilog.error(DOMAIN_NUMBER, TAG, `[ANS] requestEnableNotification failed, code is ${err.code}, message is ${err.message}`);
      }
    });
  }
}).catch((err : BusinessError) => {
    hilog.error(DOMAIN_NUMBER, TAG, `isNotificationEnabled fail: ${JSON.stringify(err)}`);
});

3.应用服务端调用Push Kit服务端的REST 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: 0

// Request Body
{
  "payload": {
    "notification": {
      "category": "MARKETING",
      "title": "普通通知标题",
      "body": "普通通知内容",
      "clickAction": {
        "actionType": 0
        "data": {"testKey": "testValue"}
      },
      "notifyId": 12345
    }
  },
  "target": {
    "token": ["IQAAAA**********4Tw"]
  },
  "pushOptions": {
    "testMessage": true
  }
}

在推送通知消息的这段示例代码中,projectId为项目ID,可登录AppGallery Connect网站,选择"我的项目",在项目列表中选择对应的项目,左侧导航栏选择"项目设置",在该页面获取;push-type为0表示通知消息场景;actionType为0表示点击消息打开应用首页。

此外,当actionType为1时,则代表点击消息打开应用内自定义页面,如果要实现点击消息打开指定的应用内页面,需要先设置待跳转Ability的skills标签中的actions或uris值。

设置actions参数完成点击消息进入应用内页的示例如下:

{
  "name": "TestAbility",
  "srcEntry": "./ets/abilities/TestAbility.ets",
  "exported": false,
  "startWindowIcon": "$media:icon",
  "startWindowBackground": "$color:start_window_background",
  "skills": [
    {
      "actions": [
        "com.test.action"
      ]
    }
  ]
}

如果要通过设置uris参数完成点击消息进入应用内页,skills中必须同时设置actions参数,且actions参数为空。

"skills": [
  {
    "actions": [""],
    "uris": [
      {
        "scheme": "https",
        "host": "www.xxxx.com",
        "port": "8080",
        "path": "push/test"
      }
    ]
  }
]

设置完skills标签后,在发送消息时,clickAction中需携带data字段并设置actionType字段为1,则可实现点击消息进入指定的应用内页面。

// 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: 0

// Request Body
{
  "payload": {
    "notification": {
      "category": "MARKETING",
      "title": "普通通知标题",
      "body": "普通通知内容",
      "clickAction": {
        "actionType": 1,
        "action": "com.test.action",
        "uri": "https://www.xxxx.com:8080/push/test",
        "data": {"testKey": "testValue"}
      }
    }
  },
  "target": {
    "token": ["IQAAAA**********4Tw"]
  },
  "pushOptions": {
    "testMessage": true
  }
}

其中需要注意的是,在获取消息中传递的data数据时,如果是点击消息首次进入应用首页或应用内页,可以在onCreate()方法中获取消息data数据。

import { UIAbility, Want } from '@kit.AbilityKit';
import { hilog } from '@kit.PerformanceAnalysisKit';

export default class MainAbility extends UIAbility {
  onCreate(want: Want): void {
    // 获取消息中传递的data数据
    const data = want.parameters;
    hilog.info(0x0000, 'testTag', 'Succeeded in getting message data');
    // 根据实际业务场景对data进行处理
   }
}

如果当前应用进程存在时,点击消息进入应用首页或应用内页,可以在onNewWant()方法中获取消息data数据,且onNewWant()方法仅在单例(singleton)模式下可用。

import { UIAbility, Want } from '@kit.AbilityKit';
import { hilog } from '@kit.PerformanceAnalysisKit';

export default class MainAbility extends UIAbility {
  onNewWant(want: Want): void {
    // 获取消息中传递的data数据
    const data = want.parameters;
    hilog.info(0x0000, 'testTag', 'Succeeded in getting message data');
    // 根据实际业务场景对data进行处理
  }
}

在实际开发过程中,以上两种方式都需要注意到。在成功发送消息后,可以检查设备是否收到了通知消息,至此,通过Push Kit发送通知消息的步骤就结束了。

在推送通知消息时,还存在一种情况,那就是当推送的通知消息有错误或者存在违规情况时,可能会引起用户投诉或面临监管风险。基于此,Push Kit还提供消了息撤回功能,以降低此类推送可能造成的影响。

需要注意的是,消息撤回仅支持还未下发到端侧的消息,或者已在终端展示但用户还未点击的消息,并且仅支持使用Token和notifyId撤回。

在成功推送通知消息后,如果需要撤回消息,需要确保应用可正常收到通知消息,并且在推送消息时设置了notifyId字段,这样应用服务端就可以调用REST API撤回通知消息了。

// Request URL 
POST https://push-api.cloud.huawei.com/v1/[clientId]/messages:revoke
 
// Request Header 
Content-Type:application/json
Authorization:Bearer eyJr*****OiIx---****.eyJh*****iJodHR--***.QRod*****4Gp---****
push-type: 0 
 
// Request Body 
{
  "notifyId": 1234567,
  "token": [
    "pushToken1",
    "pushToken2",
    "pushToken3"
  ]
}

这里代码中的clientId需要替换为应用的Client ID,获取方式与projectId一样。notifyId作为消息ID,是消息的唯一标识。

通过以上步骤,我们就可以实现通过Push Kit推送和撤回普通通知消息了,在此能力的基础上,我们还可以继续探索Push Kit的更多个性化服务能力,为应用的拉新促活创造更多可能性。

了解更多详情>>

访问推送服务联盟官网

获取推送通知消息开发指导文档

标签:通知,App,Kit,Token,消息,Push,推送,data
From: https://www.cnblogs.com/HarmonyOSSDK/p/18456440

相关文章

  • APP应用分发多个步骤和策略过程,如何进行app应用分发?
     进行APP应用分发是一个涉及多个步骤和策略的过程,以下是对该过程的详细解析:一、前期准备应用程序准备:开发人员需要确保应用程序已经经过完整的测试和质量保证,包括功能测试、用户体验测试、性能测试等,以确保其稳定性和可靠性。打包应用程序,将开发完成的APP进行编译、打包......
  • 从新开始,轻松搭建陪玩系统!线下线上陪玩平台搭建系统,选购线下线上陪玩小程序APP系统时,
    在搭建线下线上陪玩平台系统,以及选购线下线上陪玩小程序APP系统时,以下几点是至关重要的,不容忽视:一、明确需求与规划目标用户定位:确定陪玩系统的目标用户群体,如游戏玩家、技能服务需求者等。功能规划:系统需要支持的功能包括用户注册与管理、陪玩者资料展示、预约与匹配、......
  • APP上架大陆应用商店记录
    重点自己的手机APP想要上架到国内的应用市场必须要进行ICP备案部分平台需要电子软著信息大部分应用商店上架需要准备好合规的隐私政策电子软著其中包含【APP电子版权认证证书】、【计算机软件著作权登记证书】两个证书最便捷的方式是找专业人士带跑流程,根据时长分为不同的......
  • uniapp引入阿里矢量图
    1.阿里矢量图加入项目,选择iconfont下载 2.选择iconfont.css,iconfont.ttf放入static目录  3.修改iconfont,url注意添加 ~@  不然找不到 4.app.vue全局引入 5.页面中使用 <viewclass='examexam-video'></view>......
  • 最新毕设-Python-旅游数据分析与可视化系统-48196(免费领项目)可做计算机毕业设计JAVA、
    基于python的旅游数据分析与可视化系统的设计与实现摘 要本文旨在设计和实现一个基于Python的旅游数据分析可视化系统。该系统以旅游数据为研究对象,利用Python的数据处理能力和可视化技术,对旅游数据进行深入分析,并通过直观的可视化图表展示分析结果。本文首先介绍了旅游数......
  • SSM外卖点餐软件APP-计算机毕业设计源码30768
     目 录摘要1绪论1.1研究背景1.2研究目的1.3论文结构与章节安排2 外卖点餐软件APP系统分析2.1可行性分析2.1.1技术可行性分析2.1.2经济可行性分析2.1.3操作可行性分析2.2系统流程分析2.2.1数据流程3.3.2业务流程2.3系统功能分析2.3.......
  • 基于django+vue+Vue高校师生二手用品交易系统app小程序端【开题报告+程序+论文】-计算
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着高等教育的普及和高校规模的扩大,高校师生群体日益庞大,其物质需求与精神需求也呈现出多样化的特点。在这一背景下,二手用品交易作为一种......
  • 基于Uni-App的医院预约问诊系统 微信小程序
    项目介绍开发背景随着医疗资源的日益紧张以及就诊需求的不断增加,传统的就医模式已经暴露出诸多问题,如挂号难、排队时间长、就医不便等。这些问题不仅影响了患者的就医体验,也增加了医院的管理压力。为了改善这一现状,基于移动互联网技术的医院预约问诊系统应运而生。微信小......
  • 支付宝公匙 私匙 APPID 配置方法
    相信很多站长都给自己的网站开通了网上支付功能,而网上支付最方便的要属支付宝与微信了,我们抛开微信支付不谈,说一说支付宝支付的公匙,私匙以及APPID的获取方法!使用支付宝支付需要创建应用后进行签约,比如当付面(不强制使用营业执照),手机支付,网站支付,转账等,这里的签约自己根据支付宝......
  • 微信小程序springboot+uniapp 配镜帮 眼镜商城平台
    目录技术介绍具体实现截图毕设制作流程HBuilderXmysql数据库与主流编程语言java类核心代码部分展示登录的业务流程的顺序是:系统性能系统测试详细视频演示源码获取技术介绍开发的过程亦是一个高效的学习过程,让我认识到系统开发是一个需要很多不同工具共同完成的大流......