Uniapp对接极光推送
准备工作
极光应用
去极光官网注册账号,然后创建一个应用,服务选择消息推送
,在产品设置时填写的应用包名
需要和开发的 App 包名一致,然后点击下一步就可以了,SDK 不需要下载。
打开应用设置,找到高级设置→推送设置
,如果需要精准推送的话,可以在Android
选项设置对应厂商的信息,IOS
设置需要证书
生成 IOS 推送证书
如果之前在生成IOS
描述文件时没有选择Push Notifications(推送服务)
,则需要开启推送服务
开启推送服务
- 登录账号,选择
Certificates, Identifiers & Profiles
- 进入之后,在左侧菜单上点击
Identifiers
,点击进入对应的 App - 在
Capabilities
栏中找到Push Notifications
勾选上,此时右侧会出现Config
,点击进入 - 分别创建
开发推送证书
和正式推送证书
,创建时选择.certSigningRequest
文件,然后点击Continue
即可,最后下载下来 - 如果之前生成描述文件时没有开启
推送服务
,则开启之后需要点击编辑,然后点击保存,最后将新的描述文件重新下载下来,替换旧的描述文件
证书生成之后在IOS
设置处上传证书保存即可。
安装 Uniapp 极光推送插件
- 在插件市场搜索极光推送,然后将作者是
极光
的两个插件:极光JPush官方SDK
、极光JCore官方SDK
购买即可(免费) - 然后在
HBuilder
中双击manifest.json
文件,选择App原生插件配置
,点击选择云端插件
,然后将两个插件选中确定即可
注意:一个账号下的应用包名只能安装一个插件,所以在市场购买插件时指定应用包名需要注意一下,否则会出现添加了插件但运行自定义基座时报找不到插件
配置极光推送
在JCore
插件配置所需信息
JPUSH_APPKEY_ANDROID
:(Android)用于统计分发渠道,可填默认值developer-default
JPUSH_APPKEY_IOS
:(IOS)用于统计分发渠道,可填默认值developer-default
JPUSH_APPKEY_IOS
:(IOS)极光应用的appkey
JPUSH_APPKEY_ANDROID
:(Android)极光应用的appkey
使用极光推送
在App.vue
中注册极光推送
<script>
export default {
onLaunch() {
const jv = uni.requireNativePlugin('JG-JPush');
jv.initJPushService();
jv.addConnectEventListener((result) => {
if (result.connectEnable) {
console.log('连接极光推送成功');
}
});
}
};
</script>
如果没有连接成功,可先尝试设置一下别名,然后再试试设置别名用
setAlias({alias:'xx'}})
,注意设置别名时别名是字符串
测试消息推送
在极光应用运营平台中选择消息推送→推送管理→创建推送
,选择目标平台,这里使用IOS开发环境
,输入通知标题和内容,选择目标人群广播所有人
,点击发送预览,若出现错误:没有满足条件的推送目标或推送目标超过 255 天不活跃,被排除在推送目标之外
则说明没有注册成功,检查一下配置是否有误,或者使用设备别名
并在代码中注册别名尝试一下
极光推送方法
initJPushService
初始化服务,使用极光推送前需要使用此方法初始化服务,一般在应用启动时注册:
App.vue
中的onLaunch
const jv = uni.requireNativePlugin('JG-JPush');
jv.initJPushService();
addConnectEventListener
监听连接状态,返回结果中的
connectEnable
为true
则说明连接成功
const jv = uni.requireNativePlugin('JG-JPush');
jv.addConnectEventListener((result) => {
if (result.connectEnable) {
console.log('连接极光推送成功');
}
});
setAlias
注册设备别名,接受一个对象
alias
:别名,注意:别名只能是字符串sequence
:序列,可不填
const jv = uni.requireNativePlugin('JG-JPush');
jv.setAlias({ alias: 'testAlias' });
queryAlias
查询别名,可接受一个对象
sequence
:序列,可不填
const jv = uni.requireNativePlugin('JG-JPush');
jv.queryAlias();
deleteAlias
删除别名,可接受一个对象
sequence
:序列,可不填
const jv = uni.requireNativePlugin('JG-JPush');
jv.deleteAlias();
addTags
添加设备标签,接受一个对象
tags
:设备标签数组sequence
:序列,可不填
const jv = uni.requireNativePlugin('JG-JPush');
jv.addTags({ tags: tags });
queryTag
验证设备标签,可接受一个对象
sequence
:序列,可不填
const jv = uni.requireNativePlugin('JG-JPush');
jv.queryTag();
getAllTags
查询所有标签
const jv = uni.requireNativePlugin('JG-JPush');
jv.getAllTags();
updateTags
覆盖设备标签,接受参数同
addTags
const jv = uni.requireNativePlugin('JG-JPush');
jv.updateTags({ tags: tags });
deleteTags
删除设备标签,接受参数同
addTags
const jv = uni.requireNativePlugin('JG-JPush');
jv.deleteTags({ tags: tags });
cleanTags
清空设备标签,可接受一个对象
sequence
:序列,可不填
const jv = uni.requireNativePlugin('JG-JPush')
jv.cleanTags)
setBadge
设置角标,即应用图标左上角数量,注意这个只是设置极光推送服务的角标,一般应用会根据推送中的
badge
自动设置应用角标,如果需要手动设置应用的角标需要使用plus.runtime.setBadgeNumber(badge)
,如果需要清空角标可使用plus.runtime.setBadgeNumber(0)
来清空,0 表示清空
const jv = uni.requireNativePlugin('JG-JPush');
jv.setBadge(1);
plus.runtime.setBadgeNumber(1);
setMobileNumber
设置电话号码
const jv = uni.requireNativePlugin('JG-JPush');
jv.setMobileNumber({ mobileNumber: 13011112222 });
locationServicesEnabled
获取位置是否可用
const jv = uni.requireNativePlugin('JG-JPush');
jv.locationServicesEnabled();
getLocationAuthorizationStatus
获取位置权限
const jv = uni.requireNativePlugin('JG-JPush');
jv.getLocationAuthorizationStatus();
requestLocationAuthorization
向用于申请定位权限
const jv = uni.requireNativePlugin('JG-JPush');
jv.requestLocationAuthorization();
setLocationEanable
设置位置是否可用
const jv = uni.requireNativePlugin('JG-JPush');
jv.setLocationEanable(true);
setLocation
设置位置
const jv = uni.requireNativePlugin('JG-JPush');
jv.setLocation({ latitude: 23.23, longitude: 23.23 });
setLoggerEnable
设置日志是否打开
const jv = uni.requireNativePlugin('JG-JPush');
jv.setLoggerEnable(true);
isNotificationEnabled(Android)/requestNotificationAuthorization(Ios)
是否有消息通知权限
const jv = uni.requireNativePlugin('JG-JPush');
jv.isNotificationEnabled(({ code }) => {
if (code === 0) {
console.log('您还没有打开通知权限');
}
});
jv.requestNotificationAuthorization(({ status }) => {
if (status < 2) {
console.log('您还没有打开通知权限');
}
});
openSettingsForNotification
跳转当前应用消息通知设置界面
const jv = uni.requireNativePlugin('JG-JPush');
jv.openSettingsForNotification();
getRegistrationID
获取注册 ID,需要连接成功之后获取,否则程序会崩溃
const jv = uni.requireNativePlugin('JG-JPush');
jv.getRegistrationID(({ registerID }) => {
console.log(registerID);
});
setMaxGeofenceNumber
设置位置围栏的最大半径,位置围栏是只在某一范围内可推送
addGeofenceListener
监听位置围栏触发
const jv = uni.requireNativePlugin('JG-JPush');
jv.addGeofenceListener((result) => {
console.log(result);
});
deleteGeofence
删除位置围栏
addLocalNotification
创建本地消息通知
const jv = uni.requireNativePlugin('JG-JPush');
jv.addLocalNotification({
messageID: '123',
title: 'title',
content: 'content',
extras: {
name: 'Cindy',
age: '16'
}
});
removeLocalNotification
删除本地消息通知
const jv = uni.requireNativePlugin('JG-JPush');
jv.removeLocalNotification({ messageID: '123' });
clearLocalNotifications
清空本地消息通知
const jv = uni.requireNativePlugin('JG-JPush');
jv.clearLocalNotifications();
addNotificationListener
监听消息事件,接受一个回调函数,回调函数的参数是推送的消息内容
{
"extras": {},
"content": "测试内容",
"badge": "1",
"messageID": 2252028010729666,
"notificationEventType": "notificationOpened",
"title": "测试标题",
"ring": "default",
"iOS": {
"_j_business": 1,
"_j_data_": "{\"data_msgtype\":1,\"push_type\":4,\"is_vip\":0}",
"_j_uid": 53619607272,
"_j_msgid": 2252028010729666,
"aps": {
"mutable-content": 1,
"alert": {
"title": "测试标题",
"body": "测试内容"
},
"badge": 1,
"sound": "default"
}
}
}
其中,badge
是发送消息量,可以用于设置应用角标,notificationEventType
为触发类型,值为notificationArrived
表示新消息,值为notificationOpened
表示打开某个消息,注意:一般需要手动调用jv.setBadge(0)来清空badge,否则下次消息推送badge是累加
在IOS
上杀死APP
,可以收到消息通知,但无法触发addNotificationListener
,所以如果APP
内需要展示消息量需要在进入APP
时获取应用角标,此时可以使用plus.ios.import("UIApplication").sharedApplication().applicationIconBadgeNumber()
来获取,在Android
上杀死APP
将无法收到推送,所以不用考虑此情况