更新记录

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

原生插件通用使用流程:

  1. 购买插件,选择该插件绑定的项目。
  2. 在HBuilderX里找到项目,在manifest的app原生插件配置中勾选模块,如需要填写参数则参考插件作者的文档添加。
  3. 根据插件作者的提供的文档开发代码,在代码中引用插件,调用插件功能。
  4. 打包自定义基座,选择插件,得到自定义基座,然后运行时选择自定义基座,进行log输出测试。
  5. 开发完毕后正式云打包

付费原生插件目前不支持离线打包。
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=> {})

隐私、权限声明

1. 本插件需要申请的系统权限列表:

推送权限

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件使用的 JPush SDK会采集数据,详情可参考https://www.jiguang.cn

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

使用中有什么不明白的地方,就向插件作者提问吧~ 我要提问