更新记录
V2.0.5(2023-03-03)
修复iOS打包问题
V2.0.4(2023-02-28)
取出可选的一些权限声明,防止谷歌商店审核被拒
V2.0.3(2023-02-24)
去除极光自启动的相关组件,防止小米应用市场审核被拒
查看更多平台兼容性
Android | Android CPU类型 | iOS |
---|---|---|
适用版本区间:4.4 - 11.0 | armeabi-v7a:未测试,arm64-v8a:未测试,x86:未测试 | 适用版本区间:11 - 16 |
原生插件通用使用流程:
- 购买插件,选择该插件绑定的项目。
- 在HBuilderX里找到项目,在manifest的app原生插件配置中勾选模块,如需要填写参数则参考插件作者的文档添加。
- 根据插件作者的提供的文档开发代码,在代码中引用插件,调用插件功能。
- 打包自定义基座,选择插件,得到自定义基座,然后运行时选择自定义基座,进行log输出测试。
- 开发完毕后正式云打包
付费原生插件目前不支持离线打包。
Android 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/android
iOS 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/ios
注意事项:使用HBuilderX2.7.14以下版本,如果同一插件且同一appid下购买并绑定了多个包名,提交云打包界面提示包名绑定不一致时,需要在HBuilderX项目中manifest.json->“App原生插件配置”->”云端插件“列表中删除该插件重新选择
JYJPush插件使用说明
如果有问题或者其他需求(如新增方法等),可联系我处理;
如果有其他原生插件需要定制开发,也可以联系我开发。
注意:
插件示例工程,所有的方法都是做的按钮点击事件,具体的方法调用是按照自己业务来进行;
所有的方法,数据返回时和极光返回的数据保持一致,安卓和iOS的格式不一样!需要开发者自己判断处理
建议:
1.点对点推送,如何实现?
答:使用Alias,tag,regid均可实现,但是各有差异;推荐使用Alias,并且用用户的Token,做一次加密,比如Base64,设置为用户的Alias;后台推送的时候就拿该用户的最新token,一样做Base64,然后去推送,可实现点对点
2.如何测试推送?
答:请按照插件使用流程,依次配置;代码里面实现addJYJPushReceiveOpenNotificationListener,和addJYJPushReceiveNotificationListener,即可测试推送。(前台插件初始化成功,成功的示例是,注册号以后,后台测试推送,可用设备数不为0;若RegID获取为0或空,则表示失败;或设置一个Alias,返回的iResCode不为0,也是失败)
3.对应的代码写在Uni项目的哪个位置?
答:具体位置没有要求,建议是监听类型的,放到App.vue(App.vue也是可以做跳转的),其他的按照自己业务逻辑处理
JYJPush插件交流群:884121331 希望大家踊跃加群,相互交流沟通学习
我的QQ是:374850759 (加好友麻烦备注:JY-JPush插件)
自定义基座制作方法、常见问题等,可查看简书地址
https://www.jianshu.com/p/fb2ac886901b
如果不需要上架GooglePlay,可选用国内的普通版
@JY-JPush 普通版
本插件不支持安卓离线推送,需要的请使用这个插件:(调试较为麻烦,需要抓取日志来确定问题)
@JY-JPush 厂商推送版
常见问题
问题1.appkey 如何获取
答:appkey是极光后台,针对某一个应用生成的,所以需要去极光注册账号,登录以后创建应用,即可获得appkey
问题2.chanel 是什么?怎么填写,有什么用?
答:channel是渠道的意思,极光推送支持渠道设置,方便用户区分推送接受和统计时的一个情况;比如安卓渠道一般是会有应用宝、QQ、360这样的软件平台,也可能是自己区分的一些渠道,iOS只有AppStore,或者企业签名;所以不知道写什么的时候,iOS就写iOS,安卓就写android就行了。
问题3.为什么我试用/购买了插件,也自定义了基座,但是运行的时候一直提示不包含基座?
答:这个问题,第一,所有的APP插件,都是需要自定义基座的,所以先保证自己是在自定义基座运行,而不是标准基座;第二,如果插件也勾选了,基座也自定义了,但是一直提示不支持,这个时候可以选择关闭一下HBuilder,然后重新删除插件,重新勾选,重新自定义基座(自定义基座时,云端的确有时会失败,所以只能这样重试一下)
问题4.安卓/iOS杀掉进程后,还能收到推送吗?
答:iOS推送用的APNS,所有就算是杀掉APP进程,一样可以收到推送;安卓,因为生态问题,如果杀掉了进程,所有的推送都会收不到,不过部分厂商也针对性出了解决方案,也就是厂商推送,比如魅族、华为、小米等;但是因为插件不清楚到底使用插件的人会开通哪些厂商的推送,所以暂时没有对接任何一家厂商推送,如果有这样的需求,可以联系我进行插件定制,如果后续定制的人多了,我也会开放多个插件,针对性的来处理厂商的推送。
问题5.设置Alias、Tags返回6002,6022错误?
答:6002或者6022一般是初始化错误或者重复操作,解决方法:安卓核对极光配置的包名和自己自定义基座的包名是否一致;iOS检查配置的推送证书是否正确(如果打开了正式证书运用到开发环境,那在测试的时候需要用正式环境去推送)
请注意,iOS必须勾选Manifest里面的Push模块(勾选1.0或者2.0都可以,看自己)!UNIAPP自己更新了!(不会对iOS和安卓推送有任何影响)
一、插件使用流程(原生插件调试,都需要自定义基座)
1.配置Appkey及渠道信息(安卓渠道信息推荐Andorid,iOS渠道信息推荐App Store),Appkey来源是极光官网,也就是需要先去极光官网进行注册,添加应用,然后配置推送设置(安卓包名、iOS证书等)
a.找到manifest.json,原生插件配置 b.勾选JY-JPushGoogle c.填写appkey及channle(注意需保证包名和appkey在极光的配置一致)
2.引用原生插件
const jyJPush = uni.requireNativePlugin('JY-JPushGoogle');
安卓必须调用!!!(注意,所有方法都是异步,比如获取regid、设置alias,都请在init结束后调用)
3.安卓需要单独初始化(方便上架应用宝等有高要求的应用市场);注意2023-02-17新增授权方法,需要用户同意授权后,先调用授权同意的方法,在调用初始化,防止审核被拒
jyJPush.android_init(res=> {
uni.showToast({
icon:'none',
title: JSON.stringify(result)
})
})
二、测试对接情况,判断是否完成对接
再确保完成上述的插件引入后,可尝试调用一个方法,查看返回数据 如:
setJYJPushAlias
jyJPush.setJYJPushAlias({ userAlias: 'testAlias' }, result=> { // 设置成功或者失败,都会通过这个result回调返回数据;数据格式保持极光返回的安卓/iOS数据一致 // 注:若没有返回任何数据,考虑是否初始化完成 uni.showToast({ icon:'none', title: JSON.stringify(result) }) });
若返回的数据ErrorCode=0,此时可在极光后台通过 'testAlias' 进行推送测试,推送预览时,查看到预估设备不为0,表示插件对接成功,即可继续调用
三、推送对接示例(只需完成以下两个方法,即可监听推送和监听点击推送消息的事件)
1.监听消息推送事件(后台发送消息,前端即可实时监听接受到消息的内容)
addJYJPushReceiveNotificationListener
jyJPush.addJYJPushReceiveNotificationListener(result=> { // 监听成功后,若收到推送,会在result返回对应的数据;数据格式保持极光返回的安卓/iOS数据一致 uni.showToast({ icon:'none', title: JSON.stringify(result) }) });
2.监听推送消息点击事件(推送来了以后,手机会有弹窗或通知栏提示,点击消息时,会触发这个方法;并且会进入APP,如果APP进程被杀死也会打开;)
addJYJPushReceiveOpenNotificationListener
jyJPush.addJYJPushReceiveOpenNotificationListener(result=> { // 监听成功后,若点击推送消息,会触发result;数据格式保持极光返回的安卓/iOS数据一致 uni.showToast({ icon:'none', title: JSON.stringify(result) }) });
近期新增方法
-
【2023-02-17】初始化状态检测 ----- 仅支持安卓
registerSDKCallBack
jyJPush.registerSDKCallBack(res=> { // 在注册成功后,此处会返回regID })
-
【2023-02-17】清空用户属性(具体查看极光官网)
clearProperty
jyJPush.clearProperty(res=> {
})
- 【2023-02-17】删除指定的用户属性(具体查看极光官网)
> deleteProperty
jyJPush.deleteProperty({ pKey: 属性的Key,字符串类型, pValue: 属性的Value,字符串类型 }, res=> {
})
- 【2023-02-17】设置用户属性(具体查看极光官网)
> setProperties
jyJPush.setProperties({ pKey: 属性的Key,字符串类型, pValue: 属性的Value,字符串类型 }, res=> {
})
- 【2023-02-17】智能推送开关(具体查看极光官网) --- 仅支持安卓
> setSmartPushEmable
jyJPush.setSmartPushEmable({ auth: 字符串0或者1;0代表关闭;1代表开启 }, res=> {
})
- 【2023-02-17】授权方法(流程为:自己弹出自己的授权框,选择同意或者拒绝均需要调用此方法;授权后才可调用init!!!)
> setAuth
jyJPush.setAuth({ auth: 字符串0或者1;0代表不同意;1代表同意;同意后,安卓再去调用init方法 }, res=> {
})
###四、Alias相关API接口
- 4.1.设置Alias
> setJYJPushAlias
jyJPush.setJYJPushAlias({ // 按照自己的业务需求来设置 userAlias: '这里是需要设置的userAlias' }, result=> { // 设置成功或者失败,都会通过这个result回调返回数据;数据格式保持极光返回的安卓/iOS数据一致 // 注:若没有返回任何数据,考虑是否初始化完成 uni.showToast({ icon:'none', title: JSON.stringify(result) }) });
- 4.2.查询Alias
> getJYJPushAlias
jyJPush.getJYJPushAlias({ // 可以不用传值进去,但是需要配置这项数据 }, result=> { uni.showToast({ icon:'none', title: JSON.stringify(result) }) });
- 4.3.删除Alias
> deleteJYJPushAlias
jyJPush.deleteJYJPushAlias({ // 可以不用传值进去,但是需要配置这项数据 }, result=> { uni.showToast({ icon:'none', title: JSON.stringify(result) }) });
###五、Tag相关API接口
- 5.1.新增Tag
> addJYJPushTags
jyJPush.addJYJPushTags({ userTag: '新增自己想要的tag' }, result => { uni.showToast({ icon: 'none', title: JSON.stringify(result) }) });
- 5.2.设置Tag
> setJYJPushTags
jyJPush.setJYJPushTags({ userTag: '设置自己想要的tag' }, result => { uni.showToast({ icon: 'none', title: JSON.stringify(result) }) });
- 5.3.删除Tag
> deleteJYJPushTags
jyJPush.deleteJYJPushTags({ userTag: '删除自己想要的tag' }, result => { uni.showToast({ icon: 'none', title: JSON.stringify(result) }) });
- 5.4.查询已经设置Tag
> getJYJPushTags
jyJPush.getJYJPushTags(result => { uni.showToast({ icon: 'none', title: JSON.stringify(result) }) });
- 5.5.清空已经设置Tag
> cleanJYJPushTags
jyJPush.cleanJYJPushTags(result => { uni.showToast({ icon: 'none', title: JSON.stringify(result) }) });
- 5.6.校验Tag是否已经被设置
> validJYJPushTags
jyJPush.validJYJPushTags({ userTag: '需要验证的tag' }, result => { uni.showToast({ icon: 'none', title: JSON.stringify(result) }) });
- 5.7.以数组方式设置Tags(V1.6.1支持)
> validJYJPushTags
jyJPush.addJYJPushTagsWithArr({ userTags: [ "1", "2", "3" ] },result=> { uni.showToast({ icon: 'none', title: JSON.stringify(result) }) console.log(JSON.stringify(result)); });
###六、推送监听相关API接口
- 6.1.监听消息通知事件(后台发送后,会触发) -- 【基础】
> addJYJPushReceiveNotificationListener
jyJPush.addJYJPushReceiveNotificationListener(result => { uni.showToast({ icon: 'none', title: JSON.stringify(result) }) });
- 6.2.监听点击通知栏消息事件(点击通知栏的消息,或者悬浮框,会触发;做事件跳转,需要用到这个接口,如:后台发了一个新闻,消息里面会含有新闻的链接,点击消息就需要获取这个链接,然后跳转) -- 【基础】
> addJYJPushReceiveOpenNotificationListener
jyJPush.addJYJPushReceiveOpenNotificationListener(result => { uni.showToast({ icon: 'none', title: JSON.stringify(result) }) });
- 6.3.监听消息点击事件(APP进程被杀死后,消息还存在通知栏的时候,点击消息会出触发这个方法) -- 【基础】
> getLastPushInfo
jyJPush.getLastPushInfo(result => { uni.showToast({ icon: 'none', title: JSON.stringify(result) }) });
- 6.4.监听自定义消息(穿透消息)
> addJYJPushCustomReceiveNotificationListener
jyJPush.addJYJPushCustomReceiveNotificationListener(result => { uni.showToast({ icon: 'none', title: JSON.stringify(result) }) });
- 6.5.监听消息点击事件(点击通知栏的消息,或者悬浮框,会触发;做事件跳转,需要用到这个接口。方法同6.3,解决部分机型兼容问题,部分继续点击消息通知栏消息后打开APP白屏或者打不开APP,可尝试使用这个方法,注意不要和addJYJPushReceiveOpenNotificationListener一起使用,也就是两个方法,任选其一) -- 【仅安卓支持】
> addJYJPushReceiveNewOpenNotificationListener
jyJPush.addJYJPushReceiveNewOpenNotificationListener(result => { uni.showToast({ icon: 'none', title: JSON.stringify(result) }) });
###七、角标相关接口(API)
####注意:这些接口是处理的极光服务器的角标,并不是APP显示的角标;如果要处理APP的角标需要调用Uni的方法:
####plus.runtime.setBadgeNumber(数字)
- 7.1.设置极光服务器角标
> setJYJPushBadge
jyJPush.setJYJPushBadge({ value: '0-9999之间' }, result => { uni.showToast({ icon: 'none', title: JSON.stringify(result) }) });
> android_setBadgeNumber(暂时只支持华为)
jyJPush.android_setBadgeNumber({ badgeNumber: "1" },result=> { console.log(JSON.stringify(result)); });
- 7.2.重置(清空)极光服务器角标(仅iOS支持)
> resetJYJPushBadge
jyJPush.resetJYJPushBadge(result => { uni.showToast({ icon: 'none', title: JSON.stringify(result) }) });
###八、开启/关闭通知
- 8.1.关闭通知/关闭接收消息推送(仅Android支持)
> stopJYJPush
jyJPush.stopJYJPush(result => { uni.showToast({ icon: 'none', title: JSON.stringify(result) }) });
- 8.2.开启通知/继续接收消息推送(仅Android支持)
> resumeJYJPush
jyJPush.resumeJYJPush(result => { uni.showToast({ icon: 'none', title: JSON.stringify(result) }) });
###9、本地通知(不依赖于极光)
- 9.1.Android 添加本地通知(所有参数必须传递)-- 【仅安卓支持】
> android_addLocalNotification
jyJPush.android_addLocalNotification({ builderId:"1", // builderId 编号,自己定义,如果不管,可以全部传递1 content: "推送内容", title: "推送标题", notificationId: "1", // 消息ID,需要为数字,后续可以通过这个取消, year: "2019", // 预约发送的时间,若小于当前时间,则立即发送;若大于当前时间,则预约时间,时间到了就发送;但是APP需要在前台 month: "12", day: "02", hour: "21", minute: "20", second: "21" },result=> { uni.showToast({ icon:'none', title: JSON.stringify(result) }) });
- 9.2.Android 清除本地通知(所有参数必须传递)-- 【仅安卓支持】
> android_removeLocalNotification
jyJPush.android_removeLocalNotification({ notificationId: "1", // 消息ID,需要为数字 }, result => { uni.showToast({ icon: 'none', title: JSON.stringify(result) }) });
- 9.3.Android 清除所有本地通知-- 【仅安卓支持】
> android_clearLocalNotifications
jyJPush.android_clearLocalNotifications( result => { uni.showToast({ icon: 'none', title: JSON.stringify(result) }) });
- 9.4.iOS 添加本地通知(所有参数必须传递)-- 【仅iOS支持,公测中】
> ios_addLocalNotification
jyJPush.ios_addLocalNotification({ builderId:"1", // builderId 编号,自己定义,如果不管,可以全部传递1 content: "推送内容", title: "推送标题", notificationId: "1", // 消息ID,需要为数字,后续可以通过这个取消, year: "2019", // 预约发送的时间,若小于当前时间,则立即发送;若大于当前时间,则预约时间,时间到了就发送;但是APP需要在前台 month: "12", day: "02", hour: "21", minute: "20", second: "21" },recCallBack=> { // 接收消息---注意查看iOS10的区别 uni.showToast({ icon:'none', title: JSON.stringify(result) }) },openCallBack=> { // 打开消息---注意查看iOS10的区别 });
- 9.5.iOS 清除本地通知(所有参数必须传递)-- 【仅iOS支持,公测中】
> ios_removeLocalNotification
jyJPush.ios_removeLocalNotification({ notificationId: "1", // 消息ID,需要为数字 }, result => { uni.showToast({ icon: 'none', title: JSON.stringify(result) }) });
- 9.6.iOS 清除所有本地通知-- 【仅iOS支持,公测中】
> ios_clearLocalNotifications
jyJPush.ios_clearLocalNotifications( result => { uni.showToast({ icon: 'none', title: JSON.stringify(result) }) });
###10、获取registrationID
- 10.1.获取registrationID
> getRegistrationID
jyJPush.getRegistrationID( // 返回的数据会有registrationID,errorCode result => { uni.showToast({ icon: 'none', title: JSON.stringify(result) }) });
###11、其他方法
- 11.1.获取Appkey和渠道信息(部分安卓可能获取不到;如果获取的数据为空,需要检查Manifest源码模式是否有填写信息)
> getAPPKey
jyJPush.getAPPKey( // 返回的数据会有自己配置的appkey和channel result => { uni.showToast({ icon: 'none', title: JSON.stringify(result) }) });
- 11.2.移除通知栏的所有通知
> ios_removeNotification / android_clearAllNotifications
// iOS jyJPush.ios_removeNotification(result=> { uni.showToast({ icon:'none', title: JSON.stringify(result) }) }); // Android jyJPush.android_clearAllNotifications(result=> { uni.showToast({ icon:'none', title: JSON.stringify(result) }) });
- 11.3.安卓检查是否开启通知权限
> android_isNotificationEnabled
const jyJPush = uni.requireNativePlugin('JY-JPushGoogle'); jyJPush.android_isNotificationEnabled(result=> { / status = 0,关闭 status = 1, 开启 status = -1, 检测失败 / console.log(JSON.stringify(result)); });
- 11.4.安卓打开通知权限设置页面(系统的页面)
> android_goToAppNotificationSettings
const jyJPush = uni.requireNativePlugin('JY-JPushGoogle'); jyJPush.android_goToAppNotificationSettings(result=> { console.log(JSON.stringify(result)); });
- 11.5.iOS请求通知权限(可作为检测是否打开通知权限的API)
> ios_requestNotificationAuthorization
const jyJPush = uni.requireNativePlugin('JY-JPushGoogle'); jyJPush.ios_requestNotificationAuthorization(result=> { / status = 0,用户尚未对该应用的权限做出选择 status = 1, 被关闭了权限 status = 2, 开启了权限 status = 3, 开启了非中断用户通知权限,iOS12支持 / console.log(JSON.stringify(result)); });
- 11.6.iOS打开通知权限设置页面(系统的页面)
> ios_openSettingsForNotification
const jyJPush = uni.requireNativePlugin('JY-JPushGoogle'); jyJPush.ios_openSettingsForNotification(result=> { console.log(JSON.stringify(result)); });
- 11.7.iOS设置APP在前台,收到消息时消息的通知形式(角标、弹窗、铃声)
> ios_setMsgNotiType
type 的取值 100 badge 101 sound 102 alert 103 badge | sound 104 badge | alert 105 sound | alert 106 badge | sound | alert
const jyJPush = uni.requireNativePlugin('JY-JPushGoogle'); jyJPush.ios_setMsgNotiType({ type: '102' }, res=> {})
- 11.8.设置手机号码(用户推送不到短息到的通知方式,具体查看极光官网)
> setMobileNumber
const jyJPush = uni.requireNativePlugin('JY-JPushGoogle'); jyJPush.setMobileNumber({ mobileNumber: '13281055555' }, res=> {})