前言:
最近APP上要添加推送的功能,而APICloud的模板库中有推送的模块,比较之后决定用极光推送,模块名称叫ajpush,添加到自己的项目就可以用了。使用文档官方也有,虽说方法讲的比较细,但是感觉缺少连贯性,做了第一步下一步应该干什么用什么方法就迷茫了。同样的极光推送官网的API也写的很详细,奈何也没有连贯性的例子可以参考,这两个迷茫的东东让我跌跌撞撞了好几天都没有进展,而网上基本上都是代码没有这种入门级别的例子,后来看到了一篇讲入门的例子(连接如下:http://blog.csdn.net/xuexiiphone/article/details/51252796。),终于知道是怎么回事了,在此表示感谢。这里做个记录希望能够帮助到当初像我一样迷茫的小白兔们。
先来说一下它的基本过程:它主要涉及到三个方面,
第一客户端:这个在APICloud中进行配置并添加检测代码即可完成
第二极光推送第三方:主要用来为客户端推送服务器端要求推送的东东,起桥梁作用
第三服务器:APP作为客户端安装在手机上,需要从服务器端请求数据。同样,推送什么样的消息也通过这个服务器进行配置。
接下来讲作为第三方的极光推送,因为它衔接着客户端和服务器端,也就是两者都要用它,所以先讲它。
1、登录极光推送官网https://www.jiguang.cn/,注册账号并登录
2、创建应用:登陆进去之后,可能会看到三个选项:“极光开发者服务”、“极光数据服务”、“极光精确广告”,选第一个“进入后台”。在页面上找“创建应用”,输入“应用名称”然后“创建我的应用”。
3、获取AppKey和Master Secret:应用创建成功后,通过在当前页就能看到AppKey和Master Secret。若是看不到,可以点击左侧的“应用信息”找到刚刚创建的应用,点一下应用右下角的设置,获取AppKey和Master Secret,Master Secret通常是隐藏的,需要点击“查看”才能显示出来。
4、推送配置:在“获取AppKey和Master Secret”页面的下方,找到“推送配置”,点击右侧的“完成推送配置”,在打开的页面中选择“Android”,“应用包名”输入APICloud中APP的包名,获取方法如图:
这些信息有点隐秘,通常概览中都只是显示少量的APP信息,点击右下角的^才能看到更全的。
输入包名之后,点击“提交” 。
到这里第三方极光推送配置基本上完成了。
第三步讲在手机APP中嵌入极光推送:
1、在模块库中添加“ajpush”到自己的APP中;
2、在config.xml中注册,添加如下代码:
<feature name="ajpush">
<param name="app_key" value="上一步获取到的AppKey"/>
<param name="channel" value="随便填,最好不要用中文"/>
</feature>
3、在APP中引入极光推送并添加监听——最好是在首页添加——我这里是消息推送,具体代码如下:
apiready=function(){ noticePush(); } var jpush = null; //该方法用来进行公告推送 function noticePush(){ jpush = api.require('ajpush'); //初始化 jpush.init(function(ret) { //alert(ret.status);//若返回1说明初始化成功 if (ret && ret.status) { /* jpush.setListener(function(ret) { var id = ret.id;//消息ID var title = ret.title; //消息标题 var content = ret.content; //消息内容 var extra = ret.extra; //额外键值对 console.log("id=" + id + ",title=" + title + ",content=" + content + ",extra=" + extra); }); */ } }); //监听状态栏上消息被点击的事件 api.addEventListener({name:'appintent'}, function(ret,err) { //alert('通知被点击,收到数据:\n' + JSON.stringify(ret));//监听通知被点击后收到的数据 var extra = ret.appParam.ajpush.extra; extra = eval('('+extra+')'); //console.log("extra.user_id=" + extra.user_id + ",extra.notice_id=" + extra.notice_id); api.openWin({ name: 'noticedetails_win', url: 'noticedetails.html', allowEdit : true, pageParam:{ 'notice_id':extra.notice_id }, progress:{ type:"default", title:"玩命加载中..." } }); }) api.addEventListener({name:'pause'}, function(ret,err) { onPause();//监听应用进入后台,通知jpush暂停事件 }); api.addEventListener({name:'resume'}, function(ret,err) { onResume();//监听应用恢复到前台,通知jpush恢复事件 }); } //统计-app恢复 function onResume(){ jpush.onResume(); console.log('JPush onResume'); } //统计-app暂停 function onPause(){ jpush.onPause(); console.log('JPush onPause'); }
4、测试:重新登录“极光推送“官网,进入到后台,从“左上角”选择刚刚创建的app,再点击与APP名称平行的“推送”选项卡,点击左侧的“发送通知”,输入短信内容,平台选“Android”,目标人群选“广播(所有人)”,发送时间选“立即”,最后点“立即发送”。查看安装了APP的手机上是否收到推送消息。
第四步讲搭建自己的服务器发送消息,我这里用的是Java版。
1、从极光官网下载“服务器SDK”,链接如下:https://docs.jiguang.cn/jpush/resources/#sdk_1,选择Java版本的,下载下来之后进行解压。这个SDK我下载过好几个版本的,前一阵子下载的时候有Java代码还有jar包但是没有最关键的两个jar包,今天下载的只有2个关键jar包,没有例子也没有其他需要的jar包,大家注意。
需要的jar包总共有6个:gson-2.2.2.jar、jiguang-common-1.0.6.jar、jpush-client-3.2.19.jar、slf4j-api-1.6.1.jar、slf4j-api-1.7.5.jar、slf4j-log4j12-1.5.2.jar,其中jiguang-common-1.0.6.jar、jpush-client-3.2.19.jar两个是关键,已经上传到附件有需要的可以下载。
说到这个JAR包有句题外话想说:因为开始弄的时候并不知道有多少个包,网上也只是有Java代码并没有说需要用到哪些包更别提从哪里弄了,有些有说到下载极光推送官网的Example从中导入需要用到的jar包,我并不知道从哪里下载这个Example(极光的API太多且不够系统)以为是“进行推送配置时给的demo”,就下载了demo参考官网的信息进行了配置,那个demo是关于安卓的,而我从来没用过安卓,就照葫芦画瓢的搭建了安卓环境,就为这个环境浪费了2天时间,期间磕磕碰碰的遇到了各种问题,后来看了上面提到的文章弄完了这个推送功能才明白:这个“进行推送配置时给的demo”对于使用APICloud的我来说根本就不需要去研究,它只不过是一个插件用来安装到APP所在的手机用来接收消息,而APICloud中的ajpush模块就是干这个用的,已经集成了就不需要再安装了。
所以在这里提醒使用ajpush模块实现推送功能的童鞋们,这个该死的demo跟咱们的APP没有半毛钱关系,也不要想着从这里去找咱们需要的jar包因为它根本就没有。
好啦, 废话说到这里,言归正传。
2、新建web项目,导入上面的6个jar包,并build-path
3、将官网例子中\jpush-api-java-client-xxx\src\main\java路径下cn文件夹整个拖入到src中,参考一下官网的例子。可能官方下载的没有例子(我下载jpush-api-java-client-3.2.20.zip就没有),jpush-api-java-client-3.2.19的有,已经上传到附件,有需要的可以下载。
4、根据Example写的自己的推送:
public class JpushInstance { protected static final Logger LOG = LoggerFactory.getLogger(JpushInstance.class); // demo App defined in resources/jpush-api.conf private static String appKey="xxxxxx"; private static String masterSecret="xxxxxx"; //long 可选 //保存离线消息的时长。秒为单位。最多支持10天(864000秒)。 //0 表示该消息不保存离线。即:用户在线马上发出,当前不在线用户将不会收到此消息。 //此参数不设置则表示默认,默认为保存1天的离线消息(86400秒)。 private static int timeToLive=3; private static String TITLE = "wjl"; private static String ALERT = "发布了公告"; private static String MSG_CONTENT = TITLE+":"+ALERT; private static JPushClient jpushClient=null; private static Map<String,String> extrasMap = null;//用来保存需要用的参数 /** * 该方法用来推送消息 * @param title:通知标题,如果指定了,则通知里原来展示 App名称的地方,将展示成这个字段。 * @param alert:通知内容,这里指定了,则会覆盖上级统一指定的 alert 信息;内容可以为空字符串,则表示不展示到通知栏。 * @param extras:拓展字段这里自定义 JSON 格式的 Key/Value 信息,以供业务使用。 * **/ public static void sendPush(String title,String alert,Map<String,String> extras) { jpushClient = new JPushClient(masterSecret, appKey, timeToLive); TITLE = title; ALERT = alert; if(extras!=null)extrasMap = extras; //生成推送的内容,全部推送 PushPayload payload=buildPushObject_android_tag_alertWithTitle(); try { //System.out.println(payload.toString()); PushResult result = jpushClient.sendPush(payload); // System.out.println(result+"................................"); LOG.info("/******************************极光推送开始******************************/"); LOG.info("时间:"+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())+"\r\n"); LOG.info("极光推送:发送状态: " + result); LOG.info("/******************************极光推送结束******************************/"); } catch (APIConnectionException e) { LOG.error("极光推送:Connection error. Should retry later. ", e); } catch (APIRequestException e) { LOG.info("/******************************极光推送开始******************************/"); LOG.info("时间:"+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())+"\r\n"); LOG.error("Error response from JPush server. Should review and fix it. ", e); LOG.info("HTTP Status: " + e.getStatus()); LOG.info("Error Code: " + e.getErrorCode()); LOG.info("Error Message: " + e.getErrorMessage()); LOG.info("Msg ID: " + e.getMsgId()); LOG.info("/******************************极光推送结束******************************/"); } } public static PushPayload buildPushObject_all_all_alert() { return PushPayload.alertAll(ALERT); } public static PushPayload buildPushObject_all_alias_alert() { return PushPayload.newBuilder() .setPlatform(Platform.all())//设置接受的平台 .setAudience(Audience.all())//Audience设置为all,说明采用广播方式推送,所有用户都可以接收到 .setNotification(Notification.alert(ALERT)) .build(); } public static PushPayload buildPushObject_android_tag_alertWithTitle() { return PushPayload.newBuilder() .setPlatform(Platform.android())//安卓平台 .setAudience(Audience.all())//Audience设置为all,说明采用广播方式推送,所有用户都可以接收到 .setNotification(Notification.android(ALERT, TITLE, extrasMap)) .build(); } public static PushPayload buildPushObject_android_and_ios() { return PushPayload.newBuilder() .setPlatform(Platform.android_ios()) .setAudience(Audience.tag("tag1")) .setNotification(Notification.newBuilder() .setAlert("alert content") .addPlatformNotification(AndroidNotification.newBuilder() .setTitle("Android Title").build()) .addPlatformNotification(IosNotification.newBuilder() .incrBadge(1) .addExtra("extra_key", "extra_value").build()) .build()) .build(); } public static PushPayload buildPushObject_ios_tagAnd_alertWithExtrasAndMessage() { return PushPayload.newBuilder() .setPlatform(Platform.ios()) .setAudience(Audience.tag_and("tag1", "tag_all")) .setNotification(Notification.newBuilder() .addPlatformNotification(IosNotification.newBuilder() .setAlert(ALERT) .setBadge(5) .setSound("happy") .addExtra("from", "JPush") .build()) .build()) .setMessage(Message.content(MSG_CONTENT)) .setOptions(Options.newBuilder() .setApnsProduction(true) .build()) .build(); } public static PushPayload buildPushObject_ios_audienceMore_messageWithExtras() { return PushPayload.newBuilder() .setPlatform(Platform.android_ios()) .setAudience(Audience.newBuilder() .addAudienceTarget(AudienceTarget.tag("tag1", "tag2")) .addAudienceTarget(AudienceTarget.alias("alias1", "alias2")) .build()) .setMessage(Message.newBuilder() .setMsgContent(MSG_CONTENT) .addExtra("from", "JPush") .build()) .build(); } }
5、在需要推送消息的地方进行调用,我这里是手机APP上发布一条消息,通过ajax传到后台,服务器将数据保存到数据库之后,调用推送程序进行推送:
Map<String,String> extrasMap = new HashMap<String,String>(); extrasMap.put("user_id", user_id); extrasMap.put("notice_id",(result2)+""); com.tzj.tsp.admin.jpush.JpushInstance.sendPush("wjl","发布了公告",extrasMap);
6、测试:手机APP发送一条消息,测试手机能否收到推送消息。
至此整个推送功能完成,希望对大家有所帮助。
最后祝大家好运!
相关推荐
人脸识别项目实战
PLC热反应炉仿真程序和报告 ,PLC; 热反应炉; 仿真程序; 报告,PLC热反应炉仿真程序报告
内容概要:本文详细介绍了 C++ 函数的基础概念及其实战技巧。内容涵盖了函数的基本结构(定义、声明、调用)、多种参数传递方式(值传递、引用传递、指针传递),各类函数类型(无参无返、有参无返、无参有返、有参有返),以及高级特性(函数重载、函数模板、递归函数)。此外,通过实际案例展示了函数的应用,如统计数组元素频次和实现冒泡排序算法。最后,总结了C++函数的重要性及未来的拓展方向。 适合人群:有一定编程基础的程序员,特别是想要深入了解C++编程特性的开发人员。 使用场景及目标:① 学习C++中函数的定义与调用,掌握参数传递方式;② 掌握不同类型的C++函数及其应用场景;③ 深入理解函数重载、函数模板和递归函数的高级特性;④ 提升实际编程能力,通过实例强化所学知识。 其他说明:文章以循序渐进的方式讲解C++函数的相关知识点,并提供了实际编码练习帮助理解。阅读过程中应当边思考边实践,动手实验有助于更好地吸收知识点。
人脸识别项目实战
内容概要:本文主要介绍了Ultra Ethernet Consortium(UEC)提出的下一代超高性能计算(HPC)和人工智能(AI)网络解决方案及其关键技术创新。文中指出,现代AI应用如大型语言模型(GPT系列)以及HPC对集群性能提出了更高需求。为了满足这一挑战,未来基于超乙太网络的新规格将采用包喷射传输、灵活数据报排序和改进型流量控制等机制来提高尾部延迟性能和整个通信系统的稳定度。同时UEC也在研究支持高效远程直接内存访问的新一代协议,确保能更好地利用现成以太网硬件设施的同时还增强了安全性。 适合人群:网络架构师、数据中心管理员、高性能运算从业人员及相关科研人员。 使用场景及目标:①为构建高效能的深度学习模型训练平台提供理论指导和技术路线;②帮助企业选择最合适的网络技术和优化现有IT基础设施;③推动整个行业内关于大规模分布式系统网络层面上的设计创新。 阅读建议:本文档重点在于展示UEC如何解决目前RDMA/RoCE所面临的问题并提出了一套全新的设计理念用于未来AI和HPC环境下的通信效率提升。在阅读时需要注意理解作者对于当前网络瓶颈分析背后的原因以及新设计方案所能带来的具体好处
(参考GUI)MATLAB道路桥梁裂缝检测.zip
pygeos-0.14.0-cp311-cp311-win_amd64.whl
人脸识别项目实战
基于Matlab的模拟光子晶体光纤中的电磁波传播特性 对模式场的分布和有效折射率的计算 模型使用有限差分时域(FDTD)方法来求解光波在PCF中的传播模式 定义物理参数、光纤材料参数、光波参数、PCF参数及几何结构等参数 有限差分时域(FDTD)方法:这是一种数值模拟方法,用于求解麦克斯韦方程,模拟电磁波在不同介质中的传播 特征值问题求解:使用eigs函数求解矩阵的特征值问题,以确定光波的传播模式和有效折射率 模式场分布的可视化:通过绘制模式场的分布图,直观地展示光波在PCF中的传播特性 程序已调通,可直接运行 ,基于Matlab模拟; 光子晶体光纤; 电磁波传播特性; 模式场分布; 有效折射率计算; 有限差分时域(FDTD)方法; 物理参数定义; 几何结构参数; 特征值问题求解; 程序运行。,基于Matlab的PCF电磁波传播模拟与特性分析
内容概要:《知识图谱与大模型融合实践研究报告》详细探讨了知识图谱和大模型在企业级落地应用的现状、面临的挑战及融合发展的潜力。首先,介绍了知识图谱与大模型的基本概念和发展历史,并对比分析了两者的优点和缺点,随后重点讨论了两者结合的可行性和带来的具体收益。接下来,报告详细讲解了两者融合的技术路径、关键技术及系统评估方法,并通过多个行业实践案例展示了融合的实际成效。最后提出了对未来的展望及相应的政策建议。 适合人群:对人工智能技术和其应用有兴趣的企业技术人员、研究人员及政策制定者。 使用场景及目标:①帮助企业理解知识图谱与大模型融合的关键技术和实际应用场景;②指导企业在实际应用中解决技术难题,优化系统性能;③推动相关领域技术的进步和发展,为政府决策提供理论依据。 其他说明:报告不仅强调了技术和应用场景的重要性,还关注了安全性和法律法规方面的要求,鼓励各界积极参与到这项新兴技术的研究和开发当中。
神经网络火焰识别,神经网络火焰识别,神经网络火焰识别,神经网络火焰识别,神经网络火焰识别
人脸识别项目实战
1、文件内容:telepathy-farstream-0.6.0-5.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/telepathy-farstream-0.6.0-5.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、更多资源/技术支持:公众号禅静编程坊
本东大每日推购物推荐网站管理员和用户两个角色。管理员功能有,个人中心,用户管理,商品类型管理,商品信息管理,商品销售排行榜管理,系统管理,订单管理。 用户功能有,个人中心,查看商品,查看购物资讯,购买商品,查看订单,我的收藏,商品评论。因而具有一定的实用性。 本站是一个B/S模式系统,采用Spring Boot框架作为开发技术,MYSQL数据库设计开发,充分保证系统的稳定性。系统具有界面清晰、操作简单,功能齐全的特点,使得东大每日推购物推荐网站管理工作系统化、规范化。 关键词:东大每日推购物推荐网站;Spring Boot框架;MYSQL数据库 东大每日推购物推荐网站的设计与实现 1 1系统概述 1 1.1 研究背景 1 1.2研究目的 1 1.3系统设计思想 1 2相关技术 3 2.1 MYSQL数据库 3 2.2 B/S结构 3 2.3 Spring Boot框架简介 4 3系统分析 4 3.1可行性分析 4 3.1.1技术可行性 5 3.1.2经济可行性 5 3.1.3操作可行性 5 3.2系统性能分析 5 3.2.1 系统安全性 5 3.2.2 数据完整性 6 3.3系统界面
二叉树实现。平衡二叉树(Balanced Binary Tree)是一种特殊的二叉树,其特点是树的高度(depth)保持在一个相对较小的范围内,以确保在进行插入、删除和查找等操作时能够在对数时间内完成。平衡二叉树的主要目的是提高二叉树的操作效率,避免由于不平衡而导致的最坏情况(例如,形成链表的情况)。本资源是使用C语言编程设计实现的平衡二叉树的源代码。
基于扩张状态观测器eso扰动补偿和权重因子调节的电流预测控制,相比传统方法,增加了参数鲁棒性 降低电流脉动,和误差 基于扩张状态观测器eso补偿的三矢量模型预测控制 ,基于扩张状态观测器; 扰动补偿; 权重因子调节; 电流预测控制; 参数鲁棒性; 电流脉动降低; 误差降低; 三矢量模型预测控制,基于鲁棒性增强和扰动补偿的电流预测控制方法
永磁同步电机全速域控制高频方波注入法、滑模观测器法SMO、加权切矢量控制Simulink仿真模型 低速域采用高频方波注入法HF,高速域采用滑膜观测器法SMO,期间采用加权形式切 送前方法 1、零低速域,来用无数字滤波器高频方波注入法, 2.中高速域采用改进的SMO滑模观测器,来用的是sigmoid函数,PLL锁相环 3、转速过渡区域采用加权切法 该仿真各个部分清晰分明,仿真波形效果良好内附详细控制方法资料lunwen 带有参考文献和说明文档,仿真模型 ,核心关键词: 1. 永磁同步电机; 2. 全速域控制; 3. 高频方波注入法; 4. 滑模观测器法SMO; 5. 加权切换矢量控制; 6. Simulink仿真模型; 7. 零低速域控制; 8. 中高速域控制; 9. 转速过渡区域控制; 10. 仿真波形效果; 11. 详细控制方法资料; 12. 参考文献和说明文档。,永磁同步电机多域控制策略的仿真研究
Buck变器二阶LADRC线性自抗扰控制matlab仿真 包括电压电流双闭环和ladrc控制外环加电流内环控制两种 并进行了对比,ladrc控制超调更小,追踪更快 参考文献 版本为2018b ,关键词:Buck变换器;二阶LADRC;线性自抗扰控制;Matlab仿真;电压电流双闭环;LADRC控制外环;电流内环控制;对比;超调;追踪;2018b版本。,Matlab仿真二阶LADRC控制的Buck变换器:外环LADRC+内环电流控制对比