最近项目要集成推送服务,选型极光推送,记录一下开发过程。
1、极光官网注册登录
1.1选择极光推送产品,新建应用


1.2在下一步中选择Android/IOS的消息推送服务

1.3产品设置中输入应用包名(一经输入后不可更改,一定要正确输入包名),选择想要集成的厂商推送通道,按照后续流程完成注册。

*注:包名要和hbuilder中打包的包名一致

1.4配置好后就好AppKey、Master Secret,后续要用到。也可以在推送设置------集成设置中查看

2、在uniapp官方插件市场下载极光插件
流程参考如下,选择对应的应用,输入Android 包名和iOS 包名


3、Hbuilder项目中集成使用
3.1打开项目,在mainfest.json中选择安卓/IOS原生插件配置------选择云端插件,选择刚才下载的2个插件

3.2极光JCore配置如下,输入在极光平台申请的appkey

3.3JPush配置如下,首先需要去各个厂商通道申请应用,拿到应用的必要信息,例如小米就要去小米的开发者平台去注册申请,可以参考极光官方文档或者自行申请。红框处的参数配置一定要注意,按照示例格式填写参数前缀,否则推送不成功。

4、页面植入极光代码,这里我没有集成全部功能,只做了极光设备别名(Alias)推送和角标的处理,想要集成其他功能请移步官方文档自行查询。
4.1项目根目录下App.vue文件中引入极光服务
javascript
<script>
// 极光推送
// #ifdef APP-PLUS
const jpushModule = uni.requireNativePlugin('JG-JPush');
// 推送插件
const badge_module = uni.requireNativePlugin('Laowu-BadgeModule');
//#endif
export default {
onLaunch() {
// #ifdef APP-PLUS
// 极光推送初始化
jpushModule.initJPushService();
//监听通知事件消息
jpushModule.addConnectEventListener(result=>{
let connectEnable = result.connectEnable
})
jpushModule.addNotificationListener(result=>{
let notificationEventType = result.notificationEventType
let messageID = result.messageID
let title = result.title
let content = result.content
let extras = result.extras
if(notificationEventType=='notificationOpened'){
if(extras.MSGID){
uni.navigateTo({
url: '/pages/noticeDetail?id='+extras.MSGID
})
}
}
})
this.getNotificationEnabled();
// #endif
},
onShow: function() {
},
onHide: function() {
},
methods: {
// 处理通知权限
getNotificationEnabled() {
if (uni.getSystemInfoSync().platform == 'ios') {
jpushModule.requestNotificationAuthorization((result) => {
let status = result.status;
if (status < 2) {
this.noticMsgTool();
}
});
} else {
jpushModule.isNotificationEnabled((result) => {
// console.log('判断android是否打开权限1:true,0:false', result);
if (result.code == 0) {
//如果为0则表示 未打开通知权限
this.noticMsgTool();
}
});
}
},
noticMsgTool() {
if (uni.getSystemInfoSync().platform == 'ios') {
//苹果打开对应的通知栏
uni.showModal({
title: '通知权限开启提醒',
content: '您还没有开启通知权限,无法接受到消息通知,请前往设置!',
showCancel: false,
confirmText: '去设置',
success: function(res) {
if (res.confirm) {
var app = plus.ios.invoke('UIApplication', 'sharedApplication');
var setting = plus.ios.invoke('NSURL', 'URLWithString:', 'app-settings:');
plus.ios.invoke(app, 'openURL:', setting);
plus.ios.deleteObject(setting);
plus.ios.deleteObject(app);
}
}
});
} else {
//android打开对应的通知栏
var main = plus.android.runtimeMainActivity();
var pkName = main.getPackageName();
var uid = main.getApplicationInfo().plusGetAttribute('uid');
uni.showModal({
title: '通知权限开启提醒',
content: '您还没有开启通知权限,无法接受到消息通知,请前往设置!',
showCancel: false,
confirmText: '去设置',
success: function(res) {
if (res.confirm) {
var Intent = plus.android.importClass('android.content.Intent');
var Build = plus.android.importClass('android.os.Build');
//android 8.0引导
if (Build.VERSION.SDK_INT >= 26) {
var intent = new Intent('android.settings.APP_NOTIFICATION_SETTINGS');
intent.putExtra('android.provider.extra.APP_PACKAGE', pkName);
} else if (Build.VERSION.SDK_INT >= 21) {
//android 5.0-7.0
var intent = new Intent('android.settings.APP_NOTIFICATION_SETTINGS');
intent.putExtra('app_package', pkName);
intent.putExtra('app_uid', uid);
} else {
//(<21)其他--跳转到该应用管理的详情页
intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
var uri = Uri.fromParts('package', mainActivity.getPackageName(), null);
intent.setData(uri);
}
// 跳转到该应用的系统通知设置页
main.startActivity(intent);
}
}
});
}
}
},
}
</script>
4.2在登录页中注册极光ID,也可以写在4.1中,看自己的业务需求
javascript
// 获取极光推送ID 并绑定到登录用户,usetInfo是自己系统的登录用户信息
getRegistrationID(usetInfo) {
if (!jpushModule || !jpushModule.getRegistrationID) {
return
}
try {
jpushModule.getRegistrationID((result) => {
if (usetInfo.RId !== result.registerID) {
jpushModule.setAlias({
alias: usetInfo.Id.split('-').join(''),
sequence: 1
})
BindJiGuang({
UserId: usetInfo.Id,
RId: result.registerID
}).then((res) => {
uni.setStorageSync('registerID', result.registerID); //缓存账户
})
}
});
} catch (err) {
}
},
4.3在用户登出的时候处理推送别名信息(*注:根据自己业务需要选择要不要删除极光推送)
javascript
// #ifdef APP-PLUS
// 删除极光推送别名信息
const registerID = uni.getStorageSync('registerID')
if (registerID) {
jpushModule.deleteAlias({
sequence: 1
})
LogoutBindJiGuang({
RId: registerID,
UserId: UserInfo.Id
})
uni.removeStorage({
key: "registerID"
});
}
// #endif
5、打包自定义基座调试
5.1hbulider工具中选择菜单:"发行------App-Android/IOS-云打包",选择打自定义调试基座、传统打包

5.2打包自定义基座成功后,选择菜单"运行------运行到手机或模拟器------运行基座选择------自定义调试基座"后再次运行项目,即可通过自定义调试基座查看日志。
6、苹果推送注意事项:
6.1在苹果开发者上要注册一个推送的证书,如下图,创建时选择如图2


6.2在Devices中添加你的测试设备(自定义调试基座调试用),重新生成.p12证书和描述文件。详细操作请参考:uniapp 发布苹果IOS详细流程,包括苹果开发者公司账号申请、IOS证书、.p12证书文件等
6.3、在极光推送中配置苹果推送鉴权方式和证书,具体流程如下:
登陆极光推送管理后台------推送设置------集成设置------IOS,选择鉴权方式:iOS证书配置,填写包名并上传.p12证书

7、推送测试
7.1 登陆极光推送管理后台------推送管理------创建推送------通知消息,

效果如下:

7.2在极光推送管理后台------推送管理------推送历史------推送记录中查看成功率
