极光推送集成
极光推送集成
极光推送集成
安装依赖
在 entry 目录执行一下命令按照
**ohpm install @jg/push**
配置client_id
说明: 在本地工程配置 client_id, 在 entry 模块下的 module.json5 文件添加
1
2
3
4
5
6
7
8
"module": {
"metadata": [
{
"name": "client_id",
"value": "你的id"
}
]
}
必须权限
- 以下为必选权限,必须配置以下权限才能满足基本的推送功能能力
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
"requestPermissions": [
{
//网络权限
"name": "ohos.permission.INTERNET"
},
{
//获取WIFI连接状态权限
"name": "ohos.permission.GET_WIFI_INFO"
},
{
//获取网络状态权限
"name": "ohos.permission.GET_NETWORK_INFO"
},
{
//获取OAID
"name": "ohos.permission.APP_TRACKING_CONSENT"
}
]
可选权限
- 以下为可选权限,如您需要使用用户分群推送功能,建议配置如下权限(可选)
1
2
3
4
5
6
7
8
9
10
"requestPermissions": [
{
//获取粗略位置信息权限
"name": "ohos.permission.APPROXIMATELY_LOCATION"
},
{
//获取位置信息权限
"name": "ohos.permission.LOCATION"
}
]
配置 hmos平台信息
注册华为开发者账号
……
创建项目
……
启用推送API服务
获取服务密钥
项目下创建鸿蒙应用
……
特别注意,鸿蒙应用创建完成后,您一定要记得配置应用「SHA256证书/公钥指纹」:点击“SHA256证书/公钥指纹”后的“添加公钥指纹(HarmonyOS API 9及以上)”,选择您集成 SDK 时「配置签署」对应的证书文件。
想要推送功能,需要配置 HarmonyOS 平台信息
主要步骤为:
特别注意,鸿蒙应用创建完成后,您一定要记得配置应用「SHA256证书/公钥指纹」:点击“SHA256证书/公钥指纹”后的“添加公钥指纹(HarmonyOS API 9及以上)”,按照如下文描述「配置签署」。
- 在hmos平台开通推送服务
- 在本地工程配置应用 client_id
说明: 本地工程配置应用 client_id,需在 entry 模块下的 module.json5 文件添加
1
2
3
4
5
6
7
8
"module": {
"metadata": [
{
"name": "client_id",
"value": "你的id"
}
]
}
- 配置签署
步骤1:准备签署文件
步骤2:申请发布证书 https://developer.huawei.com/consumer/cn/doc/app/agc-help-add-releasecert-0000001946273961
步骤3:申请发布Profile,Profile格式为.p7b https://developer.huawei.com/consumer/cn/doc/app/agc-help-add-releaseprofile-0000001914714796
步骤4:在本地工程配置签署,如图
极光平台鸿蒙配置
极光平台启用鸿蒙通道
鸿蒙通道回执配置指南
完成鸿蒙厂商通道 SDK 集成后,需要开发者在华为开放平台开通并配置消息回执,方可把鸿蒙的送达统计等数据回调到极光平台,具体操作如下:
1.登录华为 AppGallery Connect网站。
2.点击“我的项目”,在项目列表中找到您的项目,通过增长-推送服务-配置导航到“配置”页签。
3.在该页面可以选择配置项目级回执或者应用级回执,需要注意的是项目级回执消息接收 URL 地址,对该项目下所有应用生效。如果您同时配置了项目级回执和应用级回执地址,则优先获取应用级回执地址信息。
6.点击“新建回执”后,需要配置如下参数。
- 回执名称:填写自定义名称。
- 回调地址:
https://xpnscb.jpush.cn/v3/hmpnsreport - 支持版本:请一定选择华为 V2 版本。
开发
新建一个**AbilityStage**,在ets目录右键新建一个目录myabilitystage,然后在该目录下新建一个MyAbilityStage.ets
AbilityStage是一个Module级别的组件容器,应用的HAP在首次加载时会创建一个AbilityStage实例,可以对该Module进行初始化等操作。 AbilityStage与Module一一对应,即一个Module拥有一个AbilityStage。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
/*
* AbilityStage是一个Module级别的组件容器,应用的HAP在首次加载时会创建一个AbilityStage实例,可以对该Module进行初始化等操作。
* AbilityStage与Module一一对应,即一个Module拥有一个AbilityStage。
*/
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));
}
/**
* 自定义信息通知回调
* 回调一:冷启动调用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("e2591ed30572a8ec413a3fcf")
JPushInterface.setDebug(true)
JPushInterface.setCallBackMsg(new MyCallBackMsg(this.context.getApplicationContext()))
}
}
该文件主要是 配置极光appKey,配置接收回调信息
使用
最终需要用户同意相关隐私协议才能调用** init()** 方法
1
2
3
4
5
6
7
private context = getContext(this) as common.UIAbilityContext;
// 极光初始化
JPushInterface.init(this.context)
// 获取设备ID
let rid = JPushInterface.getRegistrationId()












