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-defaultJPUSH_APPKEY_IOS:(IOS)用于统计分发渠道,可填默认值developer-defaultJPUSH_APPKEY_IOS:(IOS)极光应用的appkeyJPUSH_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将无法收到推送,所以不用考虑此情况
