更新记录

V2.0.3(2023-02-24)

去除掉极光自启动的相关组件,防止小米商店审核问题

2.0.2(2023-02-20)

修复部分设备提示组件缺失问题

SetAuth的调用示例:

const jyJPush = uni.requireNativePlugin('JY-JPush'); jyJPush.registerSDKCallBack(sdkCallBack=> { console.log("sdk Callback 结果 " + JSON.stringify(sdkCallBack)); }) // 此处只是演示 授权,实际应该弹出自己的隐私授权页面,或者用uniapp提供的隐私协议 setTimeout(function() { jyJPush.setAuth({ auth: "1" }, res => { console.log("auth 结果 " + JSON.stringify(res)); if (res.errorCode == 0) { jyJPush.android_init(initRes=> { console.log("init 结果 " + JSON.stringify(initRes)); }) } }) }, 5000);

2.0.1(2023-02-19)

【重要更新!】初始化前需要先确定是否同意协议! 修复打包报错问题

查看更多

平台兼容性

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应用商店,如果有上架GooglePlay应用商店需求,请使用这个插件:

@JY-JPush GooglePlay版

本插件不支持安卓离线推送,需要的请使用这个插件:(调试较为麻烦,需要抓取日志来确定问题)

@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检查配置的推送证书是否正确(如果打开了正式证书运用到开发环境,那在测试的时候需要用正式环境去推送),manifest源码视图是否存在其他push,如果存在需要删除后重新自定义基座

  • 问题6.部分手机通知栏的小图标是黑色的

  • 答:问题详情见链接:https://community.jiguang.cn/article/159781

  • 问题7.安卓有些设备收到通知,顶部没有推送?

  • 答:设置通知通道为:jpush_1

  • 问题8.安卓的init初始化方法什么时候调用?

  • 答:init放到app.vue的onlaunch方法执行;因为init是异步方法,虽然他会同步返回调用成功的结果,但是他初始化也是需要时间的,所以不要在init执行后,马上执行setAlias或者其他关键方法(监听方法除外); 2023-02-19 新增授权方法,init必须放到授权后来调用,防止某些应用市场上架被拒


请注意,iOS必须勾选Manifest里面的Push模块(勾选1.0或者2.0都可以,看自己)!UNIAPP自己更新了!(不会对iOS和安卓推送有任何影响)

一、插件使用流程(原生插件调试,都需要自定义基座)

1.配置Appkey及渠道信息(安卓渠道信息推荐Andorid,iOS渠道信息推荐App Store),Appkey来源是极光官网,也就是需要先去极光官网进行注册,添加应用,然后配置推送设置(安卓包名、iOS证书等)

a.找到manifest.json,原生插件配置
b.勾选JY-JPush
c.填写appkey及channle(注意需保证包名和appkey在极光的配置一致)

2.引用原生插件

const jyJPush = uni.requireNativePlugin('JY-JPush');

安卓必须调用!!!(注意,所有方法都是异步,比如获取regid、设置alias,都请在init结束后调用)

3.安卓需要单独初始化(方便上架应用宝等有高要求的应用市场);注意2023-02-17新增授权方法,需要用户同意授权后,先调用授权同意的方法,在调用初始化,防止审核被拒

//  结合setAuth方法调用,实际业务应该是弹出自己的隐私协议授权框,同意再继续!!!

const jyJPush = uni.requireNativePlugin('JY-JPush');
//  暂时只有安卓支持
jyJPush.registerSDKCallBack(sdkCallBack=> {
    //  这里会返回regid,
    console.log("sdk Callback 结果 " + JSON.stringify(sdkCallBack));
})

// 此处只是演示 授权,实际应该弹出自己的隐私授权页面,或者用uniapp提供的隐私协议
setTimeout(function() {
    jyJPush.setAuth({
        auth: "1"
    }, res => {
        console.log("auth 结果 " + JSON.stringify(res));
        if (res.errorCode == 0) {
            //  安卓需要单独调用
            if (uni.getSystemInfoSync().platform == 'android') {
                jyJPush.android_init(initRes=> {
                    console.log("init 结果 " + JSON.stringify(initRes));
                })
            }
        }
    })
}, 5000);

二、测试对接情况,判断是否完成对接

再确保完成上述的插件引入后,可尝试调用一个方法,查看返回数据;调用前,iOS和安卓均需要先调用setAuth方法;安卓在setAuth同意后,还需要调用android_init方法 如:

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-JPush');
    jyJPush.android_isNotificationEnabled(result=> {
    /*
    status = 0,关闭
    status = 1, 开启
    status = -1, 检测失败
    */
    console.log(JSON.stringify(result));
    });
  • 11.4.安卓打开通知权限设置页面(系统的页面)

    android_goToAppNotificationSettings

    const jyJPush = uni.requireNativePlugin('JY-JPush');
    jyJPush.android_goToAppNotificationSettings(result=> {
    console.log(JSON.stringify(result));
    });
  • 11.5.iOS请求通知权限(可作为检测是否打开通知权限的API)

    ios_requestNotificationAuthorization

    const jyJPush = uni.requireNativePlugin('JY-JPush');
    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-JPush');
    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-JPush');
jyJPush.ios_setMsgNotiType({
    type: '102'
}, res=> {})
  • 11.8.设置手机号码(用户推送不到短息到的通知方式,具体查看极光官网)

    setMobileNumber

    const jyJPush = uni.requireNativePlugin('JY-JPush');
    jyJPush.setMobileNumber({
    mobileNumber: '13281055555'
    }, res=> {})

隐私、权限声明

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

推送权限

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

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

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

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