前言:
最近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发送一条消息,测试手机能否收到推送消息。
至此整个推送功能完成,希望对大家有所帮助。
最后祝大家好运!
相关推荐
此指南涉及了iOS推送证书的申请、转换、设置推送消息以及查看推送统计等多个方面,同时也详细解释了在接收推送消息时如何使用push模块进行绑定、设置群组和获取推送消息。 首先,对于iOS设备的推送服务,开发者必须...
APICloud是一个强大的移动应用开发平台,它允许开发者使用JavaScript进行跨平台的原生应用开发。WebStorm是一款由JetBrains公司推出的高效JavaScript IDE,专为前端开发者设计,提供了丰富的代码提示、调试、版本...
在完成构建后,可以使用`apicloud preview`命令进行真机预览,将应用推送到设备上测试。你需要注册APICloud账号,并在设备上安装APICloud预览App。 7. **发布应用** 当项目开发完毕,准备发布时,可以使用`...
这个SDK专为Android Studio设计,便于在apicloud的自定义模块开发中使用。以下将详细介绍APICloud视频播放模块SDK的核心功能、使用方法以及在Android应用开发中的实践。 一、APICloud视频播放模块SDK概述 APICloud...
### APICloud教程:服务器上的页面执行API #### 背景介绍 APICloud作为一款混合开发平台,为开发者提供了高效便捷的应用开发...希望本文能为正在使用或即将使用APICloud进行应用开发的朋友提供一些有用的参考和启发。
APICloud提供了丰富的云服务,包括数据存储、云API调用、在线应用开发控制台、版本管理、统计分析、推送等功能。APICloud的云服务能够帮助开发者快速开发和部署应用,提高应用的可靠性和用户体验。 知识点7:...
在IT行业中,APICloud是一个强大的混合移动应用开发平台,它允许开发者使用JavaScript进行原生APP的开发,大大降低了跨平台开发的复杂性。本篇我们将深入探讨如何在APICloud中实现上拉加载数据和长按事件,这两个...
6. **推送通知**:集成推送服务,如极光推送,实现新订单通知、促销信息推送等功能。 7. **用户体验优化**:包括页面加载速度优化、交互设计、错误处理等,确保应用流畅、易用。 8. **性能监控**:使用APICloud...
融云是一家专注于即时通讯解决方案的提供商,其IM云服务提供了包括单聊、群聊、消息推送等多种功能,适用于各种类型的移动应用。在APICloud中,融云IM云服务通过一个名为`rongCloud chatBox`的模块来实现这些功能。 ...
APICloud开发工具及插件源码合集 Sublime Text插件 Sublime APICloud插件是为HTML5前端开发者提供的一套开源的Sublime Text扩展插件,包括:应用管理,应用框架,页面模板,代码提示,代码管理,小部件打包,真机...
1. **APICloud**:APICloud 是一套完整的移动应用开发解决方案,它提供了丰富的API接口,使得开发者可以通过Web技术进行原生应用的开发,降低了跨平台开发的门槛。 2. **模块权限**:在Android和iOS系统中,为了...
- **推送服务**:用于向用户发送即时消息,提高应用的用户参与度。 - **云修复服务**:允许应用程序在遇到问题时快速回滚到之前的稳定版本。 - **大数据分析**:提供数据分析服务,帮助开发者深入了解用户行为和...
app推送 自动更新(apicloud官方提供了,可以整合使用) 快速开始 # 1. 先检查下 Node.js 是否安装成功 $ node -v v10.0.0 $ npm -v 6.2.0 # 2. 由于众所周知的原因,可以考虑切换源为 taobao 源 $ npm set registry ...
这款工具是基于Eclipse和Aptana这两个知名的集成开发环境(IDE)进行构建的,因此它继承了这些平台的强大功能,并针对APICloud的特性进行了定制化。 首先,APICloud Studio的核心功能是支持多平台应用开发。通过...
2. **丰富的组件库**:APICloud提供了大量的原生模块和组件,包括地图、推送通知、支付、社交媒体分享等,这些都为开发者提供了丰富的功能选项。 3. **云编译服务**:通过云编译,开发者无需安装复杂的本地环境,只...
5. **热更新能力**:通过APICloud的云端推送服务,开发者可以对已发布的应用进行在线更新,无需用户手动下载新版本,提高了用户体验。 现在我们来看看压缩包中的具体内容: - **APICloud案例源码**:这些案例源码...
在APICloud七天培训课程的第三天,我们深入学习了如何使用APICloud平台进行移动应用开发,特别是关于代码编写和项目构建的相关知识。APICloud是一个跨平台的移动开发框架,它允许开发者使用JavaScript来构建原生的...
APICloud是一款强大的移动应用开发平台,它允许开发者使用JavaScript进行Hybrid App(混合应用)的开发,同时结合原生的iOS和Android功能,实现高效、便捷的跨平台开发。混合开发模式结合了Web开发的灵活性和原生...