关于极光推送Jpush的demo

关于极光推送Jpush

  推送是手机app必不可少的一样功能,这次由于公司项目需要研究了一下。由于推送一般写于服务端,所以对于不会Android的javaweb程序员要写出一个完整的demo是一件很头痛的事情。所以我就在这里从头到尾写一个例子以示参考。由于我也不懂Android 只是由于项目需要百度了一个demo,当中有很多不足的地方忘各位大神指正。

一、首先先简单的介绍一下什么是极光推送

①为什么需要推送:为了解决数据同步的问题,在手机平台上,常用的方法有2种。一种是定时去服务器上查询数据,也叫Polling,还有一种手机跟服务器之间维护一个 TCP 长连接,当服务器有数据时,实时推送到客户端,也就是我们说的 Push。由于做推送在移动网络下维持长连接有一定的技术难度,而且当用户量上去的时候,需要很多服务器来维持长连接,成本也是很大的。因此我们需要一个第三方的jar包来支持我们的推送服务。如果想了解更多内容可参看极光推送官方文档。

②极光推送的通俗解答:就是把需要推送的内容通过调用jpush的api的发送到极光推送的服务器上,极光推送的服务器根据我们推送过去的内容选择推送到具体的app。

二、源码

服务端代码:http://pan.baidu.com/s/1bpH55uR

安卓客户端代码:http://pan.baidu.com/s/1jIqmN7S

安卓环境为:ADT+SDK+eclipse

ADT下载:http://pan.baidu.com/s/1dFmZlZF

SDK下载:http://pan.baidu.com/s/1kU53AUr

所需JDK的环境安装就不一一叙述了。

注:代码可直接导入只需要改几个地方后面会阐述。首先教大家搭下安卓环境先保证代码能导入成功

三、操作步骤

①  安装插件

②安装sdk

此步骤完成后页面会切换到Android的开发界面,页面会多两个东西

选择你要安装的一般选择Tools里面的和Android你所需要的版本,然后带你安装,我这里已经没有选,所以示灰色的。

注:关于安装很慢或者安装失败

有两种方法:

①  使用FQ软件  我用的蓝灯

②  使用配置镜像服务器  如图:

③然后导入安卓工程(服务端的工程就不叙述怎么导入了)

在工程列表的空白处右键--选择import--然后操作如图

然后是运行安卓程序(最好是插上数据线--打开手机的usb调试--然后程序运行的时候回下到手机上)

具体的可以百度下。

四、极光推送的使用(肯定要到官网注册一个账号)

具体使用请百度,或者参照官网,下面是主要截图

appkey和master secret 后面会用到

五、修改Android配置文件,将appkey改成你所添加的应用的appkey

六、服务端代码展示,代码均有注释就不一一解释了

只用的到这三个代码

APPKET和MASTERSECRET 改成你在极光开发者服务添加的应用时所生产的字符串

  1  package com.uxun.serviceImpl;
  2
  3 import com.uxun.service.JPushService;
  4
  5 import cn.jiguang.common.resp.APIConnectionException;
  6 import cn.jiguang.common.resp.APIRequestException;
  7 import cn.jpush.api.JPushClient;
  8 import cn.jpush.api.push.PushResult;
  9 import cn.jpush.api.push.model.Platform;
 10 import cn.jpush.api.push.model.PushPayload;
 11 import cn.jpush.api.push.model.audience.Audience;
 12 import cn.jpush.api.push.model.notification.AndroidNotification;
 13 import cn.jpush.api.push.model.notification.IosNotification;
 14 import cn.jpush.api.push.model.notification.Notification;
 15
 16 public class JPushServiceImpl implements JPushService {
 17
 18     private final static String APPKET = "44262636e2afd75d9b9f7932";
 19
 20     private final static String  MASTERSECRET = "ae5c0ab5f093b2aba1f8ce25";
 21
 22     private static JPushClient jPushClient = new JPushClient(MASTERSECRET, APPKET);//通知默认保留24小时。
 23
 24     @Override
 25     public int sendToRegistrationId(String registrationId, String notification_alert, String notification_title,
 26             String extrasparam) {
 27         int result = 0;
 28         try {
 29             PushPayload pushPayload= JPushServiceImpl.buildPushObjectWithRegistrationId(registrationId,
 30                     notification_alert, notification_title, extrasparam);
 31             System.out.println(pushPayload);
 32             PushResult pushResult=jPushClient.sendPush(pushPayload);  //发送推送对象
 33             //System.out.println(pushResult);
 34             if(pushResult.getResponseCode() == 200) {  //状态码等于200 为成功
 35                 result=1;
 36             }
 37         } catch (APIConnectionException e) {
 38             e.printStackTrace();
 39         } catch (APIRequestException e) {
 40             e.printStackTrace();
 41         }
 42
 43          return result;
 44     }
 45
 46     @Override
 47     public int sendToAll(String notification_alert, String notification_title, String extrasparam) {
 48         int result = 0;
 49         try {
 50             PushPayload pushPayload= JPushServiceImpl.buildPushObjectWithAll(notification_alert,
 51                     notification_title, extrasparam);
 52             System.out.println(pushPayload);
 53             PushResult pushResult=jPushClient.sendPush(pushPayload);  //发送推送对象
 54             //System.out.println(pushResult);
 55             if(pushResult.getResponseCode() == 200) {  //状态码等于200 为成功
 56                 result=1;
 57             }
 58         } catch (APIConnectionException e) {
 59             e.printStackTrace();
 60         } catch (APIRequestException e) {
 61             e.printStackTrace();
 62         }
 63
 64          return result;
 65     }
 66
 67     @Override
 68     public int sendToAllIos(String notification_alert, String notification_title, String extrasparam) {
 69
 70         int result = 0;
 71         try {
 72             PushPayload pushPayload= JPushServiceImpl.buildPushObjectWithIos(notification_alert,
 73                     notification_title, extrasparam);
 74             System.out.println(pushPayload);
 75             PushResult pushResult=jPushClient.sendPush(pushPayload);  //发送推送对象
 76             //System.out.println(pushResult);
 77             if(pushResult.getResponseCode() == 200) {  //状态码等于200 为成功
 78                 result=1;
 79             }
 80         } catch (APIConnectionException e) {
 81             e.printStackTrace();
 82         } catch (APIRequestException e) {
 83             e.printStackTrace();
 84         }
 85
 86          return result;
 87     }
 88
 89     @Override
 90     public int sendToAllAndroid(String notification_alert, String notification_title, String extrasparam) {
 91
 92         int result = 0;
 93         try {
 94             PushPayload pushPayload= JPushServiceImpl.buildPushObjectWithAndroid(notification_alert,
 95                     notification_title, extrasparam);
 96             System.out.println(pushPayload);
 97             PushResult pushResult=jPushClient.sendPush(pushPayload);  //发送推送对象
 98             //System.out.println(pushResult);
 99             if(pushResult.getResponseCode() == 200) {  //状态码等于200 为成功
100                 result=1;
101             }
102         } catch (APIConnectionException e) {
103             e.printStackTrace();
104         } catch (APIRequestException e) {
105             e.printStackTrace();
106         }
107
108          return result;
109     }
110
111     /**
112      * 建立以唯一设备标识符推送的对象
113      * @param registrationId  唯一设备标识
114      * @param notification_alert  通知内容
115      * @param notification_title  通知标题
116      * @param extrasparam  扩展字段
117      * @return  返回推送对象
118      */
119     private static PushPayload buildPushObjectWithRegistrationId(String registrationId, String notification_alert, String notification_title,
120             String extrasparam) {
121         return PushPayload.newBuilder()
122                 //指定要推送的平台,all代表当前应用配置了的所有平台,也可以传android等具体平台
123                 .setPlatform(Platform.all())
124                 //指定推送的接收对象,all代表所有人,也可以指定已经设置成功的tag或alias或该应应用客户端调用接口获取到的registration id
125                 .setAudience(Audience.registrationId(registrationId))
126                 //jpush的通知,android的由jpush直接下发,iOS的由apns服务器下发,Winphone的由mpns下发
127                 .setNotification(Notification.newBuilder()
128                 //指定当前推送的android通知
129                 .addPlatformNotification(AndroidNotification.newBuilder()
130                     .setAlert(notification_alert)   //设置通知内容(必填)
131                     .setTitle(notification_title)    //设置通知标题(可选)
132                     //此字段为透传字段,不会显示在通知栏。用户可以通过此字段来做一些定制需求,如特定的key传要指定跳转的页面(value)
133                     .addExtra("androidNotification extras key",extrasparam)
134                     .build())
135
136                 //指定当前推送的iOS通知
137                 .addPlatformNotification(IosNotification.newBuilder()
138                     //传一个IosAlert对象,指定apns title、title、subtitle等
139                     .setAlert(notification_alert)
140                     //直接传alert
141                     //此项是指定此推送的badge(应用角标)自动加1
142                     .incrBadge(1)
143                     //此字段的值default表示系统默认声音;传sound.caf表示此推送以项目里面打包的sound.caf声音来提醒,
144                     // 如果系统没有此音频则以系统默认声音提醒;此字段如果传空字符串,iOS9及以上的系统是无声音提醒,以下的系统是默认声音
145                     .setSound("sound.caf")
146                     //此字段为透传字段,不会显示在通知栏。用户可以通过此字段来做一些定制需求,如特定的key传要指定跳转的页面(value)
147                     .addExtra("iosNotification extras key",extrasparam)
148                     //此项说明此推送是一个background推送,想了解background看:http://docs.jpush.io/client/ios_tutorials/#ios-7-background-remote-notification
149                     //取消此注释,消息推送时ios将无法在锁屏情况接收
150                     // .setContentAvailable(true)
151                     .build())
152
153                 //指定当前推送的winPhone通知
154                 /*.addPlatformNotification(WinphoneNotification.newBuilder()
155                       .setAlert(notification_alert)
156                       //.setTitle(""))  //设置通知标题(可选)此标题将取代显示app名称的地方
157                     .build())*/
158                     .build())
159                     .build();
160     }
161
162     /**
163      * 建立推送所有用户的推送对象
164      * @param notification_alert  通知内容
165      * @param notification_title  通知标题
166      * @param extrasparam  扩展字段
167      * @return  返回推送对象
168      */
169     private static PushPayload buildPushObjectWithAll(String notification_alert,
170             String notification_title, String extrasparam) {
171         return PushPayload.newBuilder()
172                 //指定要推送的平台,all代表当前应用配置了的所有平台,也可以传android等具体平台
173                 .setPlatform(Platform.all())
174                 //指定推送的接收对象,all代表所有人,也可以指定已经设置成功的tag或alias或该应应用客户端调用接口获取到的registration id
175                 .setAudience(Audience.all())
176                 //jpush的通知,android的由jpush直接下发,iOS的由apns服务器下发,Winphone的由mpns下发
177                 .setNotification(Notification.newBuilder()
178                 //指定当前推送的android通知
179                 .addPlatformNotification(AndroidNotification.newBuilder()
180                     .setAlert(notification_alert)   //设置通知内容(必填)
181                     .setTitle(notification_title)    //设置通知标题(可选)
182                     //此字段为透传字段,不会显示在通知栏。用户可以通过此字段来做一些定制需求,如特定的key传要指定跳转的页面(value)
183                     .addExtra("androidNotification extras key",extrasparam)
184                     .build())
185
186                 //指定当前推送的iOS通知
187                 .addPlatformNotification(IosNotification.newBuilder()
188                     //传一个IosAlert对象,指定apns title、title、subtitle等
189                     .setAlert(notification_alert)
190                     //直接传alert
191                     //此项是指定此推送的badge(应用角标)自动加1
192                     .incrBadge(1)
193                     //此字段的值default表示系统默认声音;传sound.caf表示此推送以项目里面打包的sound.caf声音来提醒,
194                     // 如果系统没有此音频则以系统默认声音提醒;此字段如果传空字符串,iOS9及以上的系统是无声音提醒,以下的系统是默认声音
195                     .setSound("sound.caf")
196                     //此字段为透传字段,不会显示在通知栏。用户可以通过此字段来做一些定制需求,如特定的key传要指定跳转的页面(value)
197                     .addExtra("iosNotification extras key",extrasparam)
198                     //此项说明此推送是一个background推送,想了解background看:http://docs.jpush.io/client/ios_tutorials/#ios-7-background-remote-notification
199                     //取消此注释,消息推送时ios将无法在锁屏情况接收
200                     // .setContentAvailable(true)
201                     .build())
202
203                 //指定当前推送的winPhone通知
204                 /*.addPlatformNotification(WinphoneNotification.newBuilder()
205                       .setAlert(notification_alert)
206                       //.setTitle(""))  //设置通知标题(可选)此标题将取代显示app名称的地方
207                     .build())*/
208                     .build())
209                     .build();
210     }
211
212     /**
213      * 建立推送所有ios用户的推送对象
214      * @param notification_alert  通知内容
215      * @param notification_title  通知标题
216      * @param extrasparam  扩展字段
217      * @return  返回推送对象
218      */
219     private static PushPayload buildPushObjectWithIos(String notification_alert,
220             String notification_title, String extrasparam) {
221         return PushPayload.newBuilder()
222                 //指定要推送的平台,all代表当前应用配置了的所有平台,也可以传android等具体平台
223                 .setPlatform(Platform.ios())
224                 //指定推送的接收对象,all代表所有人,也可以指定已经设置成功的tag或alias或该应应用客户端调用接口获取到的registration id
225                 .setAudience(Audience.all())
226                 //jpush的通知,android的由jpush直接下发,iOS的由apns服务器下发,Winphone的由mpns下发
227                 .setNotification(Notification.newBuilder()
228
229                 //指定当前推送的iOS通知
230                 .addPlatformNotification(IosNotification.newBuilder()
231                     //传一个IosAlert对象,指定apns title、title、subtitle等
232                     .setAlert(notification_alert)
233                     //直接传alert
234                     //此项是指定此推送的badge(应用角标)自动加1
235                     .incrBadge(1)
236                     //此字段的值default表示系统默认声音;传sound.caf表示此推送以项目里面打包的sound.caf声音来提醒,
237                     // 如果系统没有此音频则以系统默认声音提醒;此字段如果传空字符串,iOS9及以上的系统是无声音提醒,以下的系统是默认声音
238                     .setSound("sound.caf")
239                     //此字段为透传字段,不会显示在通知栏。用户可以通过此字段来做一些定制需求,如特定的key传要指定跳转的页面(value)
240                     .addExtra("iosNotification extras key",extrasparam)
241                     //此项说明此推送是一个background推送,想了解background看:http://docs.jpush.io/client/ios_tutorials/#ios-7-background-remote-notification
242                     //取消此注释,消息推送时ios将无法在锁屏情况接收
243                     // .setContentAvailable(true)
244                     .build())
245                     .build())
246                     .build();
247     }
248
249     /**
250      * 建立推送所有安卓用户的推送对象
251      * @param notification_alert  通知内容
252      * @param notification_title  通知标题
253      * @param extrasparam  扩展字段
254      * @return  返回推送对象
255      */
256     private static PushPayload buildPushObjectWithAndroid(String notification_alert,
257             String notification_title, String extrasparam) {
258         return PushPayload.newBuilder()
259                 //指定要推送的平台,all代表当前应用配置了的所有平台,也可以传android等具体平台
260                 .setPlatform(Platform.android())
261                 //指定推送的接收对象,all代表所有人,也可以指定已经设置成功的tag或alias或该应应用客户端调用接口获取到的registration id
262                 .setAudience(Audience.all())
263                 //jpush的通知,android的由jpush直接下发,iOS的由apns服务器下发,Winphone的由mpns下发
264                 .setNotification(Notification.newBuilder()
265                     //指定当前推送的android通知
266                     .addPlatformNotification(AndroidNotification.newBuilder()
267                         .setAlert(notification_alert)   //设置通知内容(必填)
268                         .setTitle(notification_title)    //设置通知标题(可选)
269                         //此字段为透传字段,不会显示在通知栏。用户可以通过此字段来做一些定制需求,如特定的key传要指定跳转的页面(value)
270                         .addExtra("androidNotification extras key",extrasparam)
271                         .build())
272                         .build())
273                         .build();
274     }
275
276
277
278 }

运行服务端代码后手机会受到如下通知:

其实就是服务端通过唯一识别的appkey和master secret将通知发送到极光服务器,服务器再转发至对应的app(上面app的配置文件里也配置了appkey)

具体操作就是这么多,可能不是很详细,但是操作步骤实在太多,就不一一截图了,这里只给大部分的具体方向。

时间: 2024-10-18 19:06:21

关于极光推送Jpush的demo的相关文章

极光推送JPush

1.设置 AndroidManifest.xmllibs/jpush-sdk-release 1.x.y.jarlibs/armeabi/libsys 1.x.y.so 2.基础API init 初始化SDK setDebugMode 设置调试模式 3.MyReceiver /** * 自定义接收器 *  * 如果不定义这个 Receiver,则: * 1) 默认用户会打开主界面 * 2) 接收不到自定义消息 */public class MyReceiver extends Broadcast

极光推送 JPush 简介 集成

JPush产品简介 控制台:https://www.jiguang.cn/dev/#/app/list#dev 极光推送是一个端到端的推送服务,使得服务器端消息能够及时地推送到终端用户手机上,让开发者积极地保持与用户的连接,从而提高用户活跃度.提高应用的留存率. 主要功能: 保持与服务器的长连接,以便消息能够即时推送到达客户端 接收通知与自定义消息,并向开发者App传递相关信息 主要特点: 客户端维持连接占用资源少.耗电低 SDK丰富的接口,可定制通知栏提示样式 服务器大容量.稳定 原理:JPu

极光推送Jpush(v3)服务端PHP版本集成(V3版本只调用推送API)

因为版本升级,极光推送的API也有了V3,功能也更丰富了,但是对于我们有的用户来说,我们还是只需要调用推送的API就够了. 下载了一份PHP服务端的SDK(下载地址:http://docs.jpush.io/resources/#sdk_1),然后我看蒙了...我们只需要推送,研究这个,花的时间也太长了一点吧!于是就到网上收集了看看有没有人集成一个类来调用的,这个特别感谢DoDobook的一个哥们儿额,参考他的我小改动了一下 就ok了!(他的博文http://www.dodobook.net/p

Android极光推送jPush混淆解决方案终极篇

今天在做混淆时,极光推送报错了,错误如下:(下面错误代码从别的文章摘录而来,因为已经解决,就不再显示我自己的错误信息了,基本是一致的,除了时间.) <span style="font-size:18px;">[2013-09-23 20:30:59 - TEST] Proguard returned with error code 1. See console [2013-09-23 20:30:59 - TEST] Note: there were 105 duplica

极光推送 JPush 项目简单使用

打开或者关闭推送 - (void)pushSwitch:(UISwitch *)sender { if (sender.on) { [[NSUserDefaults standardUserDefaults] setObject:@"1" forKey:@"JPushState"]; [APService registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge | UIRemoteNotif

JPush (极光推送) For Xamarin.Android

官方教程上讲的是 GCM (Google Cloud Messaging) , 不过 GFW 是 GCM 过不去的坎. 极光推送 JPush 是国内的一个不错的替代方案. JPush 提供的 API 易于理解, 使用也很简单, 但是要使用于 Xamarin 还是要费些周章: 要转制成 Binding Library. JPush 提供了一篇转制的示例: http://smilehyh.blog.163.com/blog/static/123343886201362110857402/ 按照过程走

记录vue项目 用hbuilder离线打包集成极光推送 安卓篇

极光推送的官方demo: https://github.com/jpush/jpush-hbuilder-demo 里面也记录有详细的方法了. 我记录下自己的过程. 首先去极光那里创建一个应用 获取AppKey ,创建后如下. 然后把vue 项目npm run build 打包一下.用hbuilder 里面 发行-->本地打包--->生成本地包资源--->生成一个离线包. 然后去https://ask.dcloud.net.cn/article/103 里面下载HBUILDER最新的SD

1行命令集成极光推送

本文写给那些想极速集成推送功能的开发者,不用阅读任何文档,不用写一行代码,1分钟集成,立即使用! 不论你的项目是用 Objective-C 开发的 native app 还是基于 Cordova(phonegap.ionic.We5x 等框架)的 Hybrid app 或是 Cocos2d-x 的 iOS 项目,统统只需打开 终端 输入一行命令: appkey=yourAppkey platform=yourPlatform npm install one-line-jpush-ios 下载推送

JPush极光推送快速创建Android Demo

第一步:创建极光推送开发者帐号 第二步:Portal上创建应用 第三步:下载应用Example 第四步:把Example(Android项目)导入 Eclipse 里 第五步:运行 Example 这个应用 第六步:Portal上推送消息 第七步:手机上收到消息 第八步:在LogCat中查看收到的消息 本文目的在于,指导新接触极光推送的开发者,在短短几分钟时间内把极光推送跑起来: 安装Demo客户端到手机 在Portal上推送通知 客户端收到推送并显示在状态栏p 第一步:创建极光推送开发者帐号