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

鸿蒙中使用极光推送

官方给出的步骤是对的,就是一时不知道从何下手,自己整了下,按照这个来就行

1.步骤

打开 APP 通知功能

        1.先按照这个页面进行配置SDK 集成指南 - 极光文档,主要就是下载极光sdk,然后在AGC里开通推送服务,配置调试证书,配置签名,配置应用 client_id
        2.在极光平台配置包名和 appKey(Server Key  在AGC里可以下载JSON)一定要启用,包名需要和AGC的一置
        3.创建新的一个Ability在product中,和EntryAbility.ets同级(就是在Entry模块中),Ability的代码下面会有,然后在module.json5中配置srcEntry字段  "srcEntry": "./ets/entryability/MyAbilityStage.ets", ,这样才可以启动这个Ability  (点击通知消息打开应用的话,还是在module.json5配置actions为:"action.system.home")这个文件现在有两个Ability。一个在module下面,一个是默认的在abilities下面,module是自己新加的
        4.在EntryAbility里也需要调用个方法,还需要写个方法,下面代码也有
        5.在页面中使用eventhub来进行获取Registration ID
        6.拿到Registration ID以后就说明成功了,这样就可以测试是否可以推送成功了
        这个是测试地址极光推送,里面有个字段是HarmonyOS category 可以根据自己需求看文档填写文档中心
这里也有官方给出的demo感兴趣的可以自己看看资源下载 - 极光文档

2.代码

        1. MyAbilityStage.ets  这个直接复制就能用,就是setAppKey这个key需要替换自己的
import AbilityStage from '@ohos.app.ability.AbilityStage';
import { hilog } from '@kit.PerformanceAnalysisKit';
import {CallBackMsg,JAliasMessage,JCmdMessage,JCustomMessage,JMessage,JMessageExtra,JMessageVoIP,JMobileNumberMessage,JPushInterface,JTagMessage
} from '@jg/push';
import { common } from '@kit.AbilityKit';const TAG: string = 'JPUSH-JLog-MyAbilityStage'class MyCallBackMsg extends CallBackMsg {context: common.ApplicationContextconstructor(co: common.ApplicationContext) {super();this.context = co}/*** 注册成功后回调rid* @param registrationId 注册成功后回调rid*/onRegister(registrationId: string): void {hilog.info(0x0000, TAG, '%{public}s', 'onRegister registrationId:' + registrationId);this.context.eventHub.emit('jPush_event_rid', registrationId);this.context.eventHub.emit('jPush_event', "registrationId:" + registrationId);}/*** 长连接登陆 回调* @param isConnected true:成功,false:失败*/onConnected(isConnected: boolean): void {hilog.info(0x0000, TAG, '%{public}s', 'onConnected isConnected:' + isConnected);this.context.eventHub.emit('jPush_event_isConnected', isConnected);this.context.eventHub.emit('jPush_event', "isConnected:" + isConnected);}/*** 操作 tag 接口回调* @param jTagMessage* export class JTagMessage {* sequence?: number //对应操作id,全局不要重复* code?: number //0成功,JTagMessage.CODE_TIME_OUT超时* op?: string* tags?: string[] //对应数据* curr?: number //数据当前页数,页数从1开始* total?: number //数据总页数* msg?: string* }*/onTagOperatorResult(jTagMessage: JTagMessage): void {hilog.info(0x0000, TAG, '%{public}s', 'onTagOperatorResult JTagMessage code:' + jTagMessage.code);hilog.info(0x0000, TAG, '%{public}s', 'onTagOperatorResult JTagMessage:' + JSON.stringify(jTagMessage));this.context.eventHub.emit('jPush_event', "onTagOperatorResult:" + JSON.stringify(jTagMessage));}/*** 操作 Alias 接口回调* @param jAliasMessage* export class JAliasMessage {* sequence?: number //对应操作id,全局不要重复* code?: number //0成功,JAliasMessage.CODE_TIME_OUT超时* op?: string* alias?: string //对应数据* curr?: number* total?: number* msg?: string* }*/onAliasOperatorResult(jAliasMessage: JAliasMessage): void {hilog.info(0x0000, TAG, '%{public}s', 'onAliasOperatorResult jAliasMessage:' + JSON.stringify(jAliasMessage));this.context.eventHub.emit('jPush_event', "onAliasOperatorResult:" + JSON.stringify(jAliasMessage));}onMobileNumberOperatorResult(jMobileNumberMessage: JMobileNumberMessage) {hilog.info(0x0000, TAG, '%{public}s','onMobileNumberOperatorResult jMobileNumberMessage:' + JSON.stringify(jMobileNumberMessage));this.context.eventHub.emit('jPush_event', "onMobileNumberOperatorResult:" + JSON.stringify(jMobileNumberMessage));}/*** 通知点击事件回调* @param jMessage** export class JMessage {* msgId?: string //通知id* title?: string //通知标题* content?: string//通知内容* extras?: string//自定义数据* }*/onClickMessage(jMessage: JMessage) {hilog.info(0x0000, TAG, '%{public}s', 'onClickMessage jMessage:' + JSON.stringify(jMessage));this.context.eventHub.emit('jPush_event', "onClickMessage:" + JSON.stringify(jMessage));}onArrivedMessage(jMessage: JMessage) {hilog.info(0x0000, TAG, '%{public}s', 'onArrivedMessage jMessage:' + JSON.stringify(jMessage));this.context.eventHub.emit('jPush_event', "onArrivedMessage:" + JSON.stringify(jMessage));}/*** 自定义信息通知回调*  回调一:冷启动调用sdk初始化后回调之前还没有回调的信息*  回调二:app存活时会直接回调信息* @param jCustomMessage** export class JCustomMessage {*  msgId?: string //通知id*  title?: string //通知标题*  content?: string //通知内容*  contentType?: string //通知内容类型*  extras?: Record<string, Object> //通知自定义键值对*  ttl?: number //后台下发的信息过期时间,单位秒*  stime?: number //后台下发时间,毫秒* }*/onCustomMessage(jCustomMessage: JCustomMessage) {hilog.info(0x0000, TAG, '%{public}s', 'onCustomMessage jCustomMessage:' + JSON.stringify(jCustomMessage));this.context.eventHub.emit('jPush_event', "onCustomMessage:" + JSON.stringify(jCustomMessage));}/*** 通知扩展消息回调* @param jMessageExtra** export class JMessageExtra {* msgId?: string //通知id* title?: string //通知标题* content?: string//通知内容* extras?: Record<string, Object>//自定义数据* extraData?: string//通知扩展消息的自定义数据* }*/onJMessageExtra(jme: JMessageExtra) {hilog.info(0x0000, TAG, '%{public}s', 'onJMessageExtra jme:' + JSON.stringify(jme));this.context.eventHub.emit('jPush_event', "onJMessageExtra:" + JSON.stringify(jme));}/*** VoIP呼叫消息回调* export class JMessageVoIP {* msgId?: string //通知id* extraData?: string //VoIP自定义数据}* @param jmVoIP*/onJMessageVoIP(jmVoIP: JMessageVoIP) {hilog.info(0x0000, TAG, '%{public}s', 'JMessageVoIP jmVoIP:' + JSON.stringify(jmVoIP));this.context.eventHub.emit('jPush_event', "JMessageVoIP:" + JSON.stringify(jmVoIP));}/*** 交互事件回调* @param cmdMessage* export class JCmdMessage {* public static CMD_PUSH_STOP = 2007 //通知停止 设置回调* public static CMD_PUSH_RESUME = 2006 //  通知恢复 设置回调** cmd?: number  //操作事件,2007通知停止,2006恢复通知* errorCode?: number //0表示成功,其他为错误* msg?: string //内容信息* extra?: Record<string, Object>* }*/onCommandResult(cmdMessage: JCmdMessage) {hilog.info(0x0000, TAG, '%{public}s', 'onCommandResult cmdMessage:' + JSON.stringify(cmdMessage));this.context.eventHub.emit('jPush_event', "onCommandResult:" + JSON.stringify(cmdMessage));}
}export default class MyAbilityStage extends AbilityStage {onCreate() {// 应用的HAP在首次加载的时,为该Module初始化操作hilog.info(0x0000, TAG, '%{public}s', 'MyAbilityStage onCreate');JPushInterface.setChannel("demo")JPushInterface.setAppKey("你自己的key")JPushInterface.setDebug(true)JPushInterface.setCallBackMsg(new MyCallBackMsg(this.context.getApplicationContext()))}
}
2.EntryAbility.ets
import {abilityAccessCtrl,AbilityConstant,common,PermissionRequestResult,Permissions,UIAbility,Want
} from '@kit.AbilityKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
import { window } from '@kit.ArkUI';
import { PreferencesUtils } from 'common';
import { notificationManager } from '@kit.NotificationKit';
import { JMessage, JPushInterface } from '@jg/push';
import { BusinessError } from '@kit.BasicServicesKit';
import { pushCommon, pushService } from '@kit.PushKit';const TAG: string = 'JPUSH-JLog-PushMessageAbility'export default class EntryAbility extends UIAbility {onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {this.setClickWant(want)JPushInterface.init(this.context)hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate');}onNewWant(want: Want, launchParam: AbilityConstant.LaunchParam): void {hilog.info(0x0000, TAG, '%{public}s', 'Ability onNewWant');super.onNewWant(want, launchParam)this.setClickWant(want);}private async setClickWant(want: Want) {let j: JMessage | undefined = await JPushInterface.setClickWant(want);hilog.info(0x0000, TAG, '%{public}s', 'setClickWant: ' + JSON.stringify(j));}onDestroy(): void {hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onDestroy');}onWindowStageCreate(windowStage: window.WindowStage) {// Main window is created, set main page for this abilityhilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageCreate');// 读取本地token(异步)windowStage.loadContent('pages/Index', (err) => {if (err.code) {hilog.error(0x0000, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err) ?? '');return;}hilog.info(0x0000, 'testTag', 'Succeeded in loading the content.');});}onWindowStageDestroy(): void {// Main window is destroyed, release UI related resourceshilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageDestroy');}onForeground(): void {// Ability has brought to foregroundhilog.info(0x0000, 'testTag', '%{public}s', 'Ability onForeground');}onBackground(): void {// Ability has back to backgroundhilog.info(0x0000, 'testTag', '%{public}s', 'Ability onBackground');}
}

3.页面调用
onEventhub() {// 获取eventHublet eventhub = this.context.getApplicationContext().eventHub;hilog.info(0x0000, TAG, '%{public}s', 'jPush_event on');// 执行订阅操作eventhub.on('jPush_event_rid', (data: string) => {// 触发事件,完成相应的业务操作hilog.info(0x0000, TAG, 'jPush_event_rid:' + JSON.stringify(data));Logger.log(data)this.rid = "rid: " + data;}); // 执行订阅操作eventhub.on('jPush_event_isConnected', (data: boolean) => {// 触发事件,完成相应的业务操作hilog.info(0x0000, TAG, 'jPush_event_isConnected:' + JSON.stringify(data));this.rid = "rid: " + JPushInterface.getRegistrationId();Logger.log(JPushInterface.getRegistrationId() + 'hhhhhhhhh')});// 执行订阅操作eventhub.on('jPush_event', (data: string) => {// 触发事件,完成相应的业务操作hilog.info(0x0000, TAG, '%{public}s', 'jPush_event:' + data);this.message = this.message + "\n" + JSON.stringify(data)this.message = this.message + "\n" + "============================"});}aboutToAppear(): void {this.onEventhub()}

http://www.dtcms.com/a/351361.html

相关文章:

  • 阿里云docker搭建的mysql无法访问
  • 如何下载MySQL小白指南 (以 Windows 为例)
  • CNN 中 3×3 卷积核等设计背后的底层逻辑
  • 负载均衡之带权重的随机负载均衡算法详解与实现
  • 【LeetCode】动态规划——198.打家劫舍、213.打家劫舍||、337.打家劫舍|||
  • 开发避坑指南(37):Vue3 标签页实现攻略
  • 【Python系列】Flask 和 FastAPI对比
  • 高性价比的云手机该怎样进行选择?
  • GraphRAG——v0.3.5版本
  • 从MySQL到OpenTenBase:电商平台分布式数据库架构升级实战
  • TCP协议11种状态
  • 【人工智能AI、机器学习ML、深度学习DL、基础模型FM、LLM、GPT、Generative AI 分别是什么?他们之间的关系是什么?】
  • 一个头像图片滚动轮播组件(React实现)
  • vscode有的结构体不能补全,有的可以补全问题的解决.
  • 校园资讯平台|校园资讯平台系统|基于java和小程序的校园资讯平台设计与实现(源码+数据库+文档)
  • 《数据之心》——鱼小妖的觉醒(童年篇)
  • 【国密证书】CentOS 7 安装 GmSSL 并生成国密证书
  • SpringBoot启动优化
  • 肌肉力量训练
  • 【C语言练习】汉诺塔
  • 金融市场微观行为分析结合深度学习的大单过滤与短期价格预测框架
  • 【资源分享】破解极域电子教室
  • 【云计算】云原生(Cloud Native)
  • 三、显示3D文字
  • 【车载开发系列】CS+ for CC开发环境IDE
  • 探索 3D 模型格式:综合指南glTF/GLB 格式
  • CVPR论文速递 | DL3DV-10K:10K+真实场景,打破三维视觉数据荒!
  • Maya绑定基础:创建骨骼和蒙皮、蒙皮权重控制的两种方法
  • 当自然语言遇上数据库:Text2Sql.Net的MCP革命如何重新定义开发者与数据的交互方式
  • 腾讯云DTS数据库迁移底层原理与实战解析