官方给出的步骤是对的,就是一时不知道从何下手,自己整了下,按照这个来就行
1.步骤
打开 APP 通知功能
1.先按照这个页面进行配置SDK 集成指南 - 极光文档,主要就是下载极光sdk,然后在AGC里开通推送服务,配置调试证书,配置签名,配置应用 client_id
2.在极光平台配置包名和 appKey(Server Key 在AGC里可以下载JSON)一定要启用,包名需要和AGC的一样(json文件可以在这个文档按照配置厂商参数申请指南 - 极光文档)
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 可以根据自己需求看文档填写文档中心这里需要注意(如果app在前台可以推送,后台不可以推送的话是因为AGC上没有开通消息权益,下面会详细写)
这里也有官方给出的demo感兴趣的可以自己看看资源下载 - 极光文档
2.代码
1. MyAbilityStage.ets 这个直接复制就能用,就是setAppKey这个key需要替换自己的
TypeScript
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.ApplicationContext
constructor(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
TypeScript
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 ability
hilog.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 resources
hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageDestroy');
}
onForeground(): void {
// Ability has brought to foreground
hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onForeground');
}
onBackground(): void {
// Ability has back to background
hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onBackground');
}
}
3.页面调用
TypeScript
onEventhub() {
// 获取eventHub
let 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()
}
4.前台推送,后台不推送Bug
是因为AGC消息权益没有开通激活,根据自己的业务需求开通,激活以后需要根据业务类型取值
自分类权益生效后,应用的推送消息将根据category字段进行归类。
官方文档:文档中心