一. 导入所需要的插件 主要需要两个
- https://ext.dcloud.net.cn/plugin?id=4035(JPUSH)
- https://ext.dcloud.net.cn/plugin?id=4028 (JCORE)
二. 在App.Vue中的 onLaunch (或者onShow)中监听极光推送的状态
监听之前记得引入
var jpushModule = uni.requireNativePlugin("JG-JPush")
然后监听代码
//监听 极光推送连接状态
uni.$on('connectStatusChange',(connectStatus)=>{
var connectStr = ''
if (connectStatus == true) {
connectStr = '已连接'
this.getRegistrationID()
}else {
connectStr = '未连接'
}
console.log('监听到了连接状态变化 --- ', connectStr)
this.connectStatus = connectStr
})
三 . 在onLaunch中初始化且获取registerID
jpushModule.initJPushService();
getRegistrationID() { //获取registerID
jpushModule.getRegistrationID(result=>{
let registerID = result.registerID
console.log(registerID)
this.registrationID = registerID
uni.setStorageSync("registerID",registerID)
})
},
四 . 推送需要打开通知权限 ,所以可以写一个弹窗 去让用户去打开
- 首先要判断用户是否打开通知权限
//getNotificationEnabled 和 noticMsgTool 只是个方法名 可以随便起
getNotificationEnabled(){
if(uni.getSystemInfoSync().platform == "ios"){
jpushModule.requestNotificationAuthorization((result)=>{
let status = result.status
if (status < 2) {
this.noticMsgTool()
}
})
}else{
jpushModule.isNotificationEnabled((result)=>{ //判断android是否打开权限
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);
}
}
});
}
}
五. 接收推送消息
addNotificationListener可以获取到 极光推送的 消息回调,我的需求是推送 和消息 分开 ,推送是极光推送,但是 消息是从后台获取 所以没有用addNotificationListener , 如果没有其他需求的话 , 可以直接使用addNotificationListener 获取推送消息
jpushModule.addNotificationListener(result=>{//极光推送的消息通知回调
console.log(result)
});
这样写 之后 就会获取到 一个 registerID ,且联通极光推送,在根据 registerID去发送推送消息 (后台的事就不操心了)。
六. 代码解决了 ,接下来 就是 极光的应用的配置了
- 极光推送的 账号注册 就不说了
- 首页右上角有一个创建应用 点击创建应用如下图
应用名称 在 manifest.json → 基础配置中 找到 应用名称 填写
应用图标也在 manifest.json中找
- 选择消息推送 点击下一步
- 选择通道 和 填写 包名
应用包名 通过 hbuilder → 发行 → 原生app云打包 获取 android和ios包名
通道可以全选
创建成功之后 返回到 应用管理 进入你刚刚创建的 应用管理中 ,界面如下图,记住 AppKey,在manifest.json需要用到
上述流程是android的 流程 ios流程可在上图中 点击 ios集成进入,选择推送消息
ios第二步的 开发证书和生产证书 可通过证书获取流程去获取
七. manifest.json的配置
- 在App原生插件配置中 界面如下图
JPUSH_APPKEY_ANDROID 和 JPUSH_APPKEY_IOS两个填极光推送的 appkey
剩余的通道设置 可以选择示例,如下图填写方式
- 在App模块配置中勾选 push ,但是不能勾选 uniPush,因为我们用的是极光推送 不是 uniPush推送 ,uniPush推送也比较好用,有兴趣可以去试一下
- ios打包的 证书 profile文件需要 带有push功能
- 使用自定义基座打包
hbuilder → 运行 → 运行到手机或模拟器 → 运行基座 → 自定义基座
然后同级选择 制作自定义基座 ,等待打包完成之后 运行到手机或模拟器 。
如此 我们 的 极光推送配置就完成了
八. 上述完成之后 ,接下来就是测试消息推送
进入极光推送官网创建的应用中,点击左侧 消息推送,点击右侧创建通知消息
填写 内容 和 标题 和选择发送平台
上面获取的Registration ID 填写在 下图中,然后点击 发送预览 确定。
结果如下图