###【前言】
极光推送(JPush)在为开发者提供基础推送服务的同时,还提供了用户精准标签、用户分群、地理围栏、应用内消息、智能发送策略、智能促活等服务能力,可有效提升消息的送达率、展示率和点击率,通过精细化运营触达助力 APP 提升日活和留存。基于项目使用了uniapp框架做开发,为了更方便的接入极光,统一数据处理,开始着手开发android+ios统一的极光推送插件。

Android 原生插件注册函数

manifestPlaceholders = [//JPush 上注册的包名对应的 Appkey.JPUSH_APPKEY : "691f92dbc65e43105a61b361",]// 读取配置在build.gradle里manifestPlaceholders的参数appkeypublic String getAppkey(){ApplicationInfo appInfo = null;String msg="";try {appInfo = mUniSDKInstance.getContext().getPackageManager().getApplicationInfo(mUniSDKInstance.getContext().getPackageName(),PackageManager.GET_META_DATA);msg=appInfo.metaData.getString("JPUSH_APPKEY");} catch (PackageManager.NameNotFoundException e) {e.printStackTrace();}return msg;}@UniJSMethod(uiThread = true)public void registerJPush(UniJSCallback callback){this.callback = callback;CallBackUtil.newInstance().setBackEvent(callback);String appkey = getAppkey();JPushInterface.setDebugMode(true);JPushUPSManager.registerToken(mUniSDKInstance.getContext(), appkey, null, "", new UPSRegisterCallBack() {@Overridepublic void onResult(TokenResult tokenResult) {UniLogUtils.e("注册结果:"+tokenResult.getToken());showLog("注册:"+(tokenResult.getReturnCode() == 0 ? "成功":"失败")+"("+tokenResult.getToken()+")");}});}

Android 原生插件设置别名和标签

    // 设置标签@UniJSMethod(uiThread = true)public void setTags(JSONObject options){if(options != null){JSONArray tags = options.getJSONArray("tags");Set<String> sets = new HashSet<String>();for (int i = 0 ; i < tags.size(); i++){String tag = (String) tags.get(i);sets.add(tag);}JPushInterface.setTags(mUniSDKInstance.getContext(),1025,sets);showLog("设置标签成功:["+sets.toString()+"]");}}// 设置别名@UniJSMethod(uiThread = true)public void setAlias(JSONObject options){if(options != null){String alias = options.getString("alias");JPushInterface.setAlias(mUniSDKInstance.getContext(), 1024, alias);showLog("设置别名成功:["+alias+"]");}}// 查询标签@UniJSMethod(uiThread = true)public void queryTags(){JPushInterface.getAllTags(mUniSDKInstance.getContext(),1027);}// 查询别名@UniJSMethod(uiThread = true)public void queryAlias(){JPushInterface.getAlias(mUniSDKInstance.getContext(),1026);}

Android 原生插件设置手机号(可选)

    /*** 调用此 API 设置手机号码,用于 短信补充功能。该接口会控制调用频率,频率为 10s 之内最多 3 次。* 注:短信补充仅支持国内业务,号码格式为 11 位数字,有无 +86 前缀皆可。* 针对开发者提供推送补充服务,如果 App 侧一段时间内无法收到推送的消息(可能由于断网、后台禁止运行、消息延迟等原因)的用户进行短信通道信息补充。* 对于到达强需求的业务优先使用推送可以一定程度减少短信费用开销,又能保证信息最终的传递到达。*/@UniJSMethod(uiThread = true)public void setMobile(JSONObject options){if(options != null){String mobile = options.getString("mobile");JPushInterface.setMobileNumber(mUniSDKInstance.getContext(),1026,mobile);showLog("手机号设置成功:"+mobile);}}

IOS 原生插件 注册

UNI_EXPORT_METHOD(@selector(registerJPush:))
#pragma  初始化
- (void) registerJPush:(UniModuleKeepAliveCallback) callback{[self logger:@"initJPushService" log:nil];self.callback = callback;[JPushStore shared].dataCallback = callback;[[JPushStore shared] initJPushService:[JPushStore shared].launchOptions];[self showLog:@"初始化极光模块"];
}

IOS 原生插件别名标签设置查询


// 新增tags
- (void)setTags:(NSDictionary *)params {NSSet *tags = [NSSet setWithArray:params[@"tags"]];[JPUSHService addTags:tags completion:^(NSInteger iResCode, NSSet *iTags, NSInteger seq) {NSString *stringInt = [NSString stringWithFormat:@"%ld", (long)iResCode];[self showLog:[@"【极光推送】标签设置状态:" stringByAppendingString:stringInt]];} seq:1000];
}// 更新tags
- (void)updateTags:(NSDictionary *)params {NSSet *tags = [NSSet setWithArray:params[@"tags"]];[JPUSHService setTags:tags completion:^(NSInteger iResCode, NSSet *iTags, NSInteger seq) {NSString *stringInt = [NSString stringWithFormat:@"%ld", (long)iResCode];[self showLog:[@"【极光推送】标签更新状态:" stringByAppendingString:stringInt]];} seq:1001];
}// 删除所有tags
- (void)cleanTags:(NSDictionary *)params {[JPUSHService cleanTags:^(NSInteger iResCode, NSSet *iTags, NSInteger seq) {NSString *stringInt = [NSString stringWithFormat:@"%ld", (long)iResCode];[self showLog:[@"【极光推送】全部标签清除状态:" stringByAppendingString:stringInt]];} seq:1002];
}// 删除指定的tags
- (void)deleteTags:(NSDictionary *)params {NSSet *tags = [NSSet setWithArray:params[@"tags"]];[JPUSHService deleteTags:tags completion:^(NSInteger iResCode, NSSet *iTags, NSInteger seq) {NSString *stringInt = [NSString stringWithFormat:@"%ld", (long)iResCode];[self showLog:[@"【极光推送】指定标签删除状态:" stringByAppendingString:stringInt]];} seq:1003];
}// 查询所有tags
- (void)queryTags:(NSDictionary *)params {[JPUSHService getAllTags:^(NSInteger iResCode, NSSet *iTags, NSInteger seq) {NSArray *tempTags = (iTags.allObjects.count > 0 ? iTags.allObjects : @[]);NSDictionary *result = @{@"data":tempTags};[self showLog:result withType:@"tags"];} seq:1004];
}// 查询某一个tag
- (void)queryTag:(NSDictionary *)params {NSString *tag = params[@"tag"];[JPUSHService validTag:tag completion:^(NSInteger iResCode, NSSet *iTags, NSInteger seq, BOOL isBind) {NSArray *tempTags = (iTags.allObjects.count > 0 ? iTags.allObjects : @[]);NSDictionary *result = @{@"data":tempTags};[self showLog:result withType:@"tags"];} seq:1005];
}// 设置别名
- (void)setAlias:(NSDictionary *)params {NSString *alias = params[@"alias"];[JPUSHService setAlias:alias completion:^(NSInteger iResCode, NSString *iAlias, NSInteger seq) {NSString *stringInt = [NSString stringWithFormat:@"%ld", (long)iResCode];[self showLog:[@"【极光推送】别名设置状态:" stringByAppendingString:stringInt]];} seq:1006];
}// 删除别名
- (void)deleteAlias:(NSDictionary *)params {[JPUSHService deleteAlias:^(NSInteger iResCode, NSString *iAlias, NSInteger seq) {NSString *stringInt = [NSString stringWithFormat:@"%ld", (long)iResCode];[self showLog:[@"【极光推送】别名删除状态:" stringByAppendingString:stringInt]];} seq:1007];
}// 查询别名
- (void)queryAlias:(NSDictionary *)params {[JPUSHService getAlias:^(NSInteger iResCode, NSString *iAlias, NSInteger seq) {NSDictionary *result = @{@"data":iAlias};[self showLog:result withType:@"alias"];} seq:1008];
}

uniapp端调用

<template><view><view v-if="textContent" class="console_view">{{textContent}}</view><view class="button red" @click="doRegisterJPush">注册极光[必须]</view><view class="button gray" @click="doUnRegisterJPush">反注册极光</view><view class="button gray" @click="doSetAlias">设置别名</view><view class="button gray" @click="doQueryAlias">查询别名</view><view class="button gray" @click="doSetTags">设置标签</view><view class="button gray" @click="doQueryTags">查询标签</view><view class="button gray" @click="stopPush">停止推送服务</view><view class="button gray" @click="resumePush">恢复推送服务</view><view class="button gray" @click="setPushTime">设置推送时间</view><view class="button gray" @click="setSilenceTime">设置静默时间</view><view class="button gray" @click="setMobile">设置手机号</view></view>
</template><script>const JPush = uni.requireNativePlugin("luanqing-jgpush");export default {data() {return {textContent:'',}},methods: {// 注册推送服务(如有业务需求可以设置一个storage值来控制是否执行,如应用场景是关闭推送后,需要用户去手动开启时,直接调用registerJPush会激活之前反注册掉的推送服务// 如果无此要求,可以在onReady或App.vue的onShow中调用本方法注册)doRegisterJPush(){// Android + IOS// 在此传入回调,用于接收消息JPush.registerJPush((res=>{let mesType = res.type;try{this.textContent = JSON.stringify(res||{});}catch(e){console.error("解析出现异常:",e);this.textContent = '解析出现异常:'+e;}if(mesType === 'log'){console.log("栾青网络科技-极光消息推送插件:",(res.data??{}));}else{let data = res.data;if(mesType === 'notice'){console.error("极光消息-收到通知:",data);}else if(mesType === 'custom'){console.error("极光消息-收到自定义消息:",data);}else if(mesType === 'notice-open'){console.error("极光消息-点击了通知:",data);}else if(mesType === 'notice-button-open'){console.error("极光消息-点击了通知上的按钮:",data);}else if(mesType === 'tags'){console.error("极光消息-查询标签:",data);}else if(mesType === 'alias'){console.error("极光消息-查询别名:",data);}}}));},// 解除注册,无法再收到消息除非重新registerJPush或重新安装appdoUnRegisterJPush(){JPush.unregisterJPush();},// 查询别名(数据在registerJPush的回调函数中返回)doQueryAlias(){// Android + IOSJPush.queryAlias();},// 查询本机的所有标签(数据在registerJPush的回调函数中返回)doQueryTags(){// Android + IOSJPush.queryTags();},// 设置别名: 传入alias,后台可根据此别名来指定发送消息(注:此为覆盖模式,非追加)doSetAlias(){// Android + IOSJPush.setAlias({alias:"xushiyong5"});},// 设置标签: 传入tags,可传多个,后台可根据此别名来指定发送消息(注:此为覆盖模式,非追加)doSetTags(){// Android + IOSJPush.setTags({tags:["xushiyong1","xushiyong2"]});},// 停止推送 推送服务完全被停止stopPush(){JPush.stopPush();},// 恢复推送 resumePush(){JPush.resumePush();},// 设置允许推送时间 (二十四小时制)setPushTime(){// 设置可推送时间为: 周一 ~ 周五  08 - 20 JPush.setPushTime({days: [1,2,3,4,5], startHour:8, endHour:20});},// 设置静默时间 (二十四小时制)setSilenceTime(){// 00:30  ~  06:30 之间为静默时间,此时间段内收到消息不震动不发声 免打扰JPush.setSilenceTime({startHour:0,endHour:6,startMinute:30,endMinute:30});},// 设置手机号setMobile(){// Android + IOSJPush.setMobile({mobile:'15921627041'});}}}
</script><style>.console_view{width: 700rpx;background-color: #E9E9E9;color: #666666;font-size: 28rpx;padding: 25rpx;margin-bottom: 15rpx;}.red{background-color: #E00300;color: #ffffff;}.gray{background-color: #BBBBBB;color: #333333;}.button{width: calc(80vw);margin-left: calc(10vw);margin-right: calc(10vw);padding-top: 12rpx;padding-bottom: 12rpx;margin-top: 20rpx;text-align: center;border-radius: 25rpx;font-size: 34rpx;font-weight: bold;}.button:active{background-color: aquamarine;color: #E00300;}
</style>

后语

至此插件开发完成,在uniapp项目中引用插件即可,插件为Android和IOS提供了统一的操作函数和数据格式,方便开发者调用,同时比极光官方更便捷的集成方式,让开发者节省下90%的开发时间。

插件下载地址: 点击前往

uniapp轻松集成极光推送自定义消息+通知 Android极光 IOS极光 两行代码集成极光SDK相关推荐

  1. java极光推送ios设置通知标题,iOS 极光推送接受通知和自定义消息及静默推送

    由于配置证书和注册极光应用配置网上已经很多了所以在这里就不在多说了!!! 1.首先我们要先将从极光官网上下载来的最新的sdk中的lib文件夹导入工程中; 顺便添加一些依赖库如下: /**添加依赖库 C ...

  2. Andriod之使用极光推送自定义消息打造个性的消息推送效果

    没必要重复造轮子,吸收别人的精华,站在巨人的肩膀上,才能走得更远,如果技术不能带来利润,狗屁都不如,好了,介绍下极光推送吧,我们项目里面用的是个推,先把这个极光推送的转载好,再来写个推的推送,原理差不 ...

  3. Android极光推送厂商离线通道集成文档及flutter集成总结

    <极光推送厂商离线通道集成文档> flutter集成指南 1.Android端配置 gradle配置 //极光推送def jpushVersion = '4.4.0'implementat ...

  4. 极光推送 简书android,(Android)react-native集成极光推送

    在Android中使用reactnative集成极光推送步骤如下: (1)在AndroidManifest中声明网络权限,获取包名到极光推送官网添加应用,获取AppKey,该key需要注册到应用中以获 ...

  5. Java中集成极光推送实现给Android提送消息通知(附代码下载)

    场景 Android中集成极光推送实现推送消息通知与根据别名指定推送附示例代码下载: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details ...

  6. Android 极光推送 自定义通知铃声

    公司使用的推送功能使用的是极光推送,对于普通的通知,极光推送API自动集成了声音的提示,但是对于一些特殊的情况,我们就需要自定义声音提示. 有点坑的是极光并没有提供设置自定通知铃声的接口,所以只能自己 ...

  7. 从极光推送的实现原理概括iOS和Andriod推送原理

    推送是手机中非常常见的功能了.可是在实现上iOS和Andriod却有很大的差别. 因为iOS有强大的产品生态体系,APP从研发到审核上架,再到最后在手机端运行,都有严格的把关.所以推送功能在它这里实现 ...

  8. JPush (极光推送) For Xamarin.Android

    http://www.cnblogs.com/xling/p/JPush-for-Xamarin-Android.html 官方教程上讲的是 GCM (Google Cloud Messaging) ...

  9. 原生Android 极光推送收到通知后自动点亮屏幕

    1.新增屏幕唤醒权限 <uses-permission android:name="android.permission.WAKE_LOCK" /> 2.集成极光sdk ...

最新文章

  1. java定时扫描_springmvc 定时扫描
  2. linux 使用buildroot制作文件系统
  3. 管理类软件设计“渔”之演化
  4. java三大框架实现任务调度——IRemindService
  5. C#面试题整理(不带答案)
  6. 北航计算机学院博士机试考试题,北航2015考博真题回忆及全套资料 - 考博 - 小木虫 - 学术 科研 互动社区...
  7. linux编译bzip2,linux bzip2 命令详解
  8. HTML标记也可以乘坐标签,XHTML标签都有一个结束标记
  9. 架构师技术文档:Redis+Nginx+Dubbo+Spring+ 架构师精选视频
  10. 三菱PLC开发环境搭建笔记
  11. 使用google的zxing制作二维码
  12. Qt写的json代码生成器
  13. Tensorflow中的masking和padding
  14. QC Camera 3A\ISP 常见缩写记录
  15. 数据仓库项目需求分析
  16. 联想A800新蜂ROM刷机包 官方4.0.4优化 精简省电稳定 V1.2
  17. 《数据结构课程实践》_02_隐式图的搜索问题_准备工作
  18. 报告指2018年全球经济保持稳定增长
  19. 中国余数定理练习题及规律总结,超强总结
  20. 沙巴克服务器占用,传奇怎么设置传奇服务端沙巴克自动攻城

热门文章

  1. Feasibility of Learning
  2. NumPy 学习 第三篇:矢量化和广播
  3. Java动态导出word文档内容及图片
  4. 人工智能--技术发展史
  5. 持续更新|有关最强绘画AI--Midjourney资料收集大全
  6. 记一次失败的云函数的实践
  7. 怎样设置excel中自动调整行高、列宽?
  8. 如何把EXCEL文本格式里的数字批量转成文本
  9. mybatispuls中IService查询条件的使用(适用于单表查)
  10. 创建oracle数据库到达梦数据库的dblink