关于极光推送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小时内删除。
发表评论