关于极光推送Jpush的demo
关于极光推送Jpush
  推送是⼿机app必不可少的⼀样功能,这次由于公司项⽬需要研究了⼀下。由于推送⼀般写于服务端,所以对于不会Android的javaweb 程序员要写出⼀个完整的demo是⼀件很头痛的事情。所以我就在这⾥从头到尾写⼀个例⼦以⽰参考。由于我也不懂Android 只是由于项⽬需要百度了⼀个demo,当中有很多不⾜的地⽅忘各位⼤神指正。
⼀、⾸先先简单的介绍⼀下什么是极光推送
①为什么需要推送:为了解决数据同步的问题,在⼿机平台上,常⽤的⽅法有2种。⼀种是定时去服务器上查询数据,也叫Polling,还有⼀种⼿机跟服务器之间维护⼀个 TCP 长连接,当服务器有数据时,实时推送到客户端,也就是我们说的 Push。由于做推送在移动⽹络下维持长连接有⼀定的技术难度,⽽且当⽤户量上去的时候,需要很多服务器来维持长连接,成本也是很⼤的。因此我们需要⼀个第三⽅的jar包来⽀持我们的推送服务。如果想了解更多内容可参看极光推送官⽅⽂档。
②极光推送的通俗解答:就是把需要推送的内容通过调⽤jpush的api的发送到极光推送的服务器上,极光推送的服务器根据我们推送过去的内容选择推送到具体的app。
⼆、源码
安卓环境为:ADT+SDK+eclipse
所需JDK的环境安装就不⼀⼀叙述了。
注:代码可直接导⼊只需要改⼏个地⽅后⾯会阐述。⾸先教⼤家搭下安卓环境先保证代码能导⼊成功
三、操作步骤
①安装插件
②安装sdk
此步骤完成后页⾯会切换到Android的开发界⾯,页⾯会多两个东西
选择你要安装的⼀般选择Tools⾥⾯的和Android你所需要的版本,然后带你安装,我这⾥已经没有选,所以⽰灰⾊的。
注:关于安装很慢或者安装失败
有两种⽅法:
①使⽤FQ软件我⽤的蓝灯
②使⽤配置镜像服务器如图:
③然后导⼊安卓⼯程(服务端的⼯程就不叙述怎么导⼊了)
在⼯程列表的空⽩处右键--选择import--然后操作如图
然后是运⾏安卓程序(最好是插上数据线--打开⼿机的usb调试--然后程序运⾏的时候回下到⼿机上)
具体的可以百度下。
四、极光推送的使⽤(肯定要到官⽹注册⼀个账号)
具体使⽤请百度,或者参照官⽹,下⾯是主要截图
appkey和master secret 后⾯会⽤到
五、修改Android配置⽂件,将appkey改成你所添加的应⽤的appkey
六、服务端代码展⽰,代码均有注释就不⼀⼀解释了
只⽤的到这三个代码
APPKET和MASTERSECRET 改成你在极光开发者服务添加的应⽤时所⽣产的字符串
1package com.uxun.serviceImpl;
2
3import com.uxun.service.JPushService;
4
5import sp.APIConnectionException;
6import sp.APIRequestException;
7import cn.jpush.api.JPushClient;
8import cn.jpush.api.push.PushResult;
9import cn.jpush.del.Platform;
10import cn.jpush.del.PushPayload;
11import cn.jpush.del.audience.Audience;
12import cn.jpush.ification.AndroidNotification;
13import cn.jpush.ification.IosNotification;
14import cn.jpush.ification.Notification;
15
16public class JPushServiceImpl implements JPushService {
17
18private final static String APPKET = "44262636e2afd75d9b9f7932";
19
20private final static String  MASTERSECRET = "ae5c0ab5f093b2aba1f8ce25";
21
22private static JPushClient jPushClient = new JPushClient(MASTERSECRET, APPKET);//通知默认保留24⼩时。 23
24    @Override
25public int sendToRegistrationId(String registrationId, String notification_alert, String notification_title,
26            String extrasparam) {
27int result = 0;
28try {
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);
ResponseCode() == 200) {  //状态码等于200 为成功
35                result=1;
36            }
37        } catch (APIConnectionException e) {
38            e.printStackTrace();
39        } catch (APIRequestException e) {
40            e.printStackTrace();
41        }
42
43return result;
44    }
45
46    @Override
47public int sendToAll(String notification_alert, String notification_title, String extrasparam) {
48int result = 0;
49try {
eclipse开发手机app50            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);
ResponseCode() == 200) {  //状态码等于200 为成功
56                result=1;
57            }
58        } catch (APIConnectionException e) {
59            e.printStackTrace();
60        } catch (APIRequestException e) {
61            e.printStackTrace();
62        }
63
64return result;
65    }
66
67    @Override
68public int sendToAllIos(String notification_alert, String notification_title, String extrasparam) {
69
70int result = 0;
71try {
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);
ResponseCode() == 200) {  //状态码等于200 为成功
78                result=1;
79            }
80        } catch (APIConnectionException e) {
81            e.printStackTrace();
82        } catch (APIRequestException e) {
83            e.printStackTrace();
84        }
85
86return result;
87    }
88
89    @Override
90public int sendToAllAndroid(String notification_alert, String notification_title, String extrasparam) {
91
92int result = 0;
93try {
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);
ResponseCode() == 200) {  //状态码等于200 为成功
100                result=1;
101            }
102        } catch (APIConnectionException e) {
103            e.printStackTrace();
104        } catch (APIRequestException e) {
105            e.printStackTrace();
106        }
107
108return result;
109    }
110
111/**
112    * 建⽴以唯⼀设备标识符推送的对象
113    * @param registrationId  唯⼀设备标识
114    * @param notification_alert  通知内容
115    * @param notification_title  通知标题
116    * @param extrasparam  扩展字段
117    * @return返回推送对象
118*/
119private static PushPayload buildPushObjectWithRegistrationId(String registrationId, String notification_alert, String notification_title, 120            String extrasparam) {
wBuilder()
122//指定要推送的平台,all代表当前应⽤配置了的所有平台,也可以传android等具体平台
123                .setPlatform(Platform.all())
124//指定推送的接收对象,all代表所有⼈,也可以指定已经设置成功的tag或alias或该应应⽤客户端调⽤接⼝获取到的registration id 125                .istrationId(registrationId))
126//jpush的通知,android的由jpush直接下发,iOS的由apns服务器下发,Winphone的由mpns下发
127                .wBuilder()
128//指定当前推送的android通知
129                .wBuilder()
130                    .setAlert(notification_alert)  //设置通知内容(必填)
131                    .setTitle(notification_title)    //设置通知标题(可选)
132//此字段为透传字段,不会显⽰在通知栏。⽤户可以通过此字段来做⼀些定制需求,如特定的key传要指定跳转的页⾯(value)133                    .addExtra("androidNotification extras key",extrasparam)
134                    .build())
135
136//指定当前推送的iOS通知
137                .wBuilder()
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看:docs.jpush.io/client/ios_tutorials/#ios-7-background-remote-notification 149//取消此注释,消息推送时ios将⽆法在锁屏情况接收
150// .setContentAvailable(true)
151                    .build())
152
153//指定当前推送的winPhone通知
154/*.wBuilder()
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*/
169private static PushPayload buildPushObjectWithAll(String notification_alert,
170            String notification_title, String extrasparam) {
wBuilder()
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                .wBuilder()
178//指定当前推送的android通知
179                .wBuilder()
180                    .setAlert(notification_alert)  //设置通知内容(必填)
181                    .setTitle(notification_title)    //设置通知标题(可选)
182//此字段为透传字段,不会显⽰在通知栏。⽤户可以通过此字段来做⼀些定制需求,如特定的key传要指定跳转的页⾯(value)
183                    .addExtra("androidNotification extras key",extrasparam)
184                    .build())
185
186//指定当前推送的iOS通知
187                .wBuilder()
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看:docs.jpush.io/client/ios_tutorials/#ios-7-background-remote-notification 199//取消此注释,消息推送时ios将⽆法在锁屏情况接收
200// .setContentAvailable(true)
201                    .build())
202
203//指定当前推送的winPhone通知
204/*.wBuilder()
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*/
219private static PushPayload buildPushObjectWithIos(String notification_alert,
220            String notification_title, String extrasparam) {
wBuilder()
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                .wBuilder()
228
229//指定当前推送的iOS通知
230                .wBuilder()
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看: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*/
256private static PushPayload buildPushObjectWithAndroid(String notification_alert,
257            String notification_title, String extrasparam) {
wBuilder()
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                .wBuilder()
265//指定当前推送的android通知
266                    .wBuilder()
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 }
View Code
运⾏服务端代码后⼿机会受到如下通知:
其实就是服务端通过唯⼀识别的appkey和master secret将通知发送到极光服务器,服务器再转发⾄对应的app(上⾯app的配置⽂件⾥也配置了appkey)
具体操作就是这么多,可能不是很详细,但是操作步骤实在太多,就不⼀⼀截图了,这⾥只给⼤部分的具体⽅向。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。