您的位置:首页 > 其它

Jpush

2018-03-02 00:00 225 查看
1 import cn.jpush.api.JPushClient;
2 import cn.jpush.api.common.resp.APIConnectionException;
3 import cn.jpush.api.common.resp.APIRequestException;
4 import cn.jpush.api.push.PushResult;
5 import cn.jpush.api.push.model.Message;
6 import cn.jpush.api.push.model.Options;
7 import cn.jpush.api.push.model.Platform;
8 import cn.jpush.api.push.model.PushPayload;
9 import cn.jpush.api.push.model.audience.Audience;
10 import cn.jpush.api.push.model.notification.*;
11
12
13 public class JpushClientUtil {
14
15     private final static String appKey = "此处为appKey";
16
17     private final static String masterSecret = "此处为masterSecret";
18
19     private static JPushClient jPushClient = new JPushClient(masterSecret,appKey);
20
21     /**
22      * 推送给设备标识参数的用户
23      * @param registrationId 设备标识
24      * @param notification_title 通知内容标题
25      * @param msg_title 消息内容标题
26      * @param msg_content 消息内容
27      * @param extrasparam 扩展字段
28      * @return 0推送失败,1推送成功
29      */
30     public static int sendToRegistrationId( String registrationId,String notification_title, String msg_title, String msg_content, String extrasparam) {
31         int result = 0;
32         try {
33             PushPayload pushPayload= JpushClientUtil.buildPushObject_all_registrationId_alertWithTitle(registrationId,notification_title,msg_title,msg_content,extrasparam);
34             System.out.println(pushPayload);
35             PushResult pushResult=jPushClient.sendPush(pushPayload);
36             System.out.println(pushResult);
37             if(pushResult.getResponseCode()==200){
38                 result=1;
39             }
40         } catch (APIConnectionException e) {
41             e.printStackTrace();
42
43         } catch (APIRequestException e) {
44             e.printStackTrace();
45         }
46
47          return result;
48     }
49
50     /**
51      * 发送给所有安卓用户
52      * @param notification_title 通知内容标题
53      * @param msg_title 消息内容标题
54      * @param msg_content 消息内容
55      * @param extrasparam 扩展字段
56      * @return 0推送失败,1推送成功
57      */
58     public static int sendToAllAndroid( String notification_title, String msg_title, String msg_content, String extrasparam) {
59         int result = 0;
60         try {
61             PushPayload pushPayload= JpushClientUtil.buildPushObject_android_all_alertWithTitle(notification_title,msg_title,msg_content,extrasparam);
62             System.out.println(pushPayload);
63             PushResult pushResult=jPushClient.sendPush(pushPayload);
64             System.out.println(pushResult);
65             if(pushResult.getResponseCode()==200){
66                 result=1;
67             }
68         } catch (Exception e) {
69
70             e.printStackTrace();
71         }
72
73          return result;
74     }
75
76     /**
77      * 发送给所有IOS用户
78      * @param notification_title 通知内容标题
79      * @param msg_title 消息内容标题
80      * @param msg_content 消息内容
81      * @param extrasparam 扩展字段
82      * @return 0推送失败,1推送成功
83      */
84     public static int sendToAllIos(String notification_title, String msg_title, String msg_content, String extrasparam) {
85         int result = 0;
86         try {
87             PushPayload pushPayload= JpushClientUtil.buildPushObject_ios_all_alertWithTitle(notification_title,msg_title,msg_content,extrasparam);
88             System.out.println(pushPayload);
89             PushResult pushResult=jPushClient.sendPush(pushPayload);
90             System.out.println(pushResult);
91             if(pushResult.getResponseCode()==200){
92                 result=1;
93             }
94         } catch (Exception e) {
95
96             e.printStackTrace();
97         }
98
99          return result;
100     }
101
102     /**
103      * 发送给所有用户
104      * @param notification_title 通知内容标题
105      * @param msg_title 消息内容标题
106      * @param msg_content 消息内容
107      * @param extrasparam 扩展字段
108      * @return 0推送失败,1推送成功
109      */
110     public static int sendToAll( String notification_title, String msg_title, String msg_content, String extrasparam) {
111         int result = 0;
112         try {
113             PushPayload pushPayload= JpushClientUtil.buildPushObject_android_and_ios(notification_title,msg_title,msg_content,extrasparam);
114             System.out.println(pushPayload);
115             PushResult pushResult=jPushClient.sendPush(pushPayload);
116             System.out.println(pushResult);
117             if(pushResult.getResponseCode()==200){
118                 result=1;
119             }
120         } catch (Exception e) {
121
122             e.printStackTrace();
123         }
124
125         return result;
126     }
127
128
129
130     public static PushPayload buildPushObject_android_and_ios(String notification_title, String msg_title, String msg_content, String extrasparam) {
131         return PushPayload.newBuilder()
132                 .setPlatform(Platform.android_ios())
133                 .setAudience(Audience.all())
134                 .setNotification(Notification.newBuilder()
135                         .setAlert(notification_title)
136                         .addPlatformNotification(AndroidNotification.newBuilder()
137                                 .setAlert(notification_title)
138                                 .setTitle(notification_title)
139                                 //此字段为透传字段,不会显示在通知栏。用户可以通过此字段来做一些定制需求,如特定的key传要指定跳转的页面(value)
140                                 .addExtra("androidNotification extras key",extrasparam)
141                                 .build()
142                         )
143                         .addPlatformNotification(IosNotification.newBuilder()
144                                 //传一个IosAlert对象,指定apns title、title、subtitle等
145                                 .setAlert(notification_title)
146                                 //直接传alert
147                                 //此项是指定此推送的badge自动加1
148                                 .incrBadge(1)
149                                 //此字段的值default表示系统默认声音;传sound.caf表示此推送以项目里面打包的sound.caf声音来提醒,
150                                 // 如果系统没有此音频则以系统默认声音提醒;此字段如果传空字符串,iOS9及以上的系统是无声音提醒,以下的系统是默认声音
151                                 .setSound("sound.caf")
152                                 //此字段为透传字段,不会显示在通知栏。用户可以通过此字段来做一些定制需求,如特定的key传要指定跳转的页面(value)
153                                 .addExtra("iosNotification extras key",extrasparam)
154                                 //此项说明此推送是一个background推送,想了解background看:http://docs.jpush.io/client/ios_tutorials/#ios-7-background-remote-notification
155                                 // .setContentAvailable(true)
156
157                                 .build()
158                         )
159                         .build()
160                 )
161                 //Platform指定了哪些平台就会像指定平台中符合推送条件的设备进行推送。 jpush的自定义消息,
162                 // sdk默认不做任何处理,不会有通知提示。建议看文档http://docs.jpush.io/guideline/faq/的
163                 // [通知与自定义消息有什么区别?]了解通知和自定义消息的区别
164                 .setMessage(Message.newBuilder()
165                         .setMsgContent(msg_content)
166                         .setTitle(msg_title)
167                         .addExtra("message extras key",extrasparam)
168                         .build())
169
170                 .setOptions(Options.newBuilder()
171                         //此字段的值是用来指定本推送要推送的apns环境,false表示开发,true表示生产;对android和自定义消息无意义
172                         .setApnsProduction(false)
173                         //此字段是给开发者自己给推送编号,方便推送者分辨推送记录
174                         .setSendno(1)
175                         //此字段的值是用来指定本推送的离线保存时长,如果不传此字段则默认保存一天,最多指定保留十天,单位为秒
176                         .setTimeToLive(86400)
177                         .build()
178                 )
179                 .build();
180     }
181
182     private static PushPayload buildPushObject_all_registrationId_alertWithTitle(String registrationId,String notification_title, String msg_title, String msg_content, String extrasparam) {
183
184         System.out.println("----------buildPushObject_all_all_alert");
185         //创建一个IosAlert对象,可指定APNs的alert、title等字段
186         //IosAlert iosAlert =  IosAlert.newBuilder().setTitleAndBody("title", "alert body").build();
187
188         return PushPayload.newBuilder()
189                 //指定要推送的平台,all代表当前应用配置了的所有平台,也可以传android等具体平台
190                 .setPlatform(Platform.all())
191                 //指定推送的接收对象,all代表所有人,也可以指定已经设置成功的tag或alias或该应应用客户端调用接口获取到的registration id
192                 .setAudience(Audience.registrationId(registrationId))
193                 //jpush的通知,android的由jpush直接下发,iOS的由apns服务器下发,Winphone的由mpns下发
194                 .setNotification(Notification.newBuilder()
195                         //指定当前推送的android通知
196                         .addPlatformNotification(AndroidNotification.newBuilder()
197
198                                 .setAlert(notification_title)
199                                 .setTitle(notification_title)
200                                 //此字段为透传字段,不会显示在通知栏。用户可以通过此字段来做一些定制需求,如特定的key传要指定跳转的页面(value)
201                                 .addExtra("androidNotification extras key",extrasparam)
202
203                                 .build())
204                         //指定当前推送的iOS通知
205                         .addPlatformNotification(IosNotification.newBuilder()
206                                 //传一个IosAlert对象,指定apns title、title、subtitle等
207                                 .setAlert(notification_title)
208                                 //直接传alert
209                                 //此项是指定此推送的badge自动加1
210                                 .incrBadge(1)
211                                 //此字段的值default表示系统默认声音;传sound.caf表示此推送以项目里面打包的sound.caf声音来提醒,
212                                 // 如果系统没有此音频则以系统默认声音提醒;此字段如果传空字符串,iOS9及以上的系统是无声音提醒,以下的系统是默认声音
213                                 .setSound("sound.caf")
214                                 //此字段为透传字段,不会显示在通知栏。用户可以通过此字段来做一些定制需求,如特定的key传要指定跳转的页面(value)
215                                 .addExtra("iosNotification extras key",extrasparam)
216                                 //此项说明此推送是一个background推送,想了解background看:http://docs.jpush.io/client/ios_tutorials/#ios-7-background-remote-notification
217                                 //取消此注释,消息推送时ios将无法在锁屏情况接收
218                                 // .setContentAvailable(true)
219
220                                 .build())
221
222
223                         .build())
224                 //Platform指定了哪些平台就会像指定平台中符合推送条件的设备进行推送。 jpush的自定义消息,
225                 // sdk默认不做任何处理,不会有通知提示。建议看文档http://docs.jpush.io/guideline/faq/的
226                 // [通知与自定义消息有什么区别?]了解通知和自定义消息的区别
227                 .setMessage(Message.newBuilder()
228
229                         .setMsgContent(msg_content)
230
231                         .setTitle(msg_title)
232
233                         .addExtra("message extras key",extrasparam)
234
235                         .build())
236
237                 .setOptions(Options.newBuilder()
238                         //此字段的值是用来指定本推送要推送的apns环境,false表示开发,true表示生产;对android和自定义消息无意义
239                         .setApnsProduction(false)
240                         //此字段是给开发者自己给推送编号,方便推送者分辨推送记录
241                         .setSendno(1)
242                         //此字段的值是用来指定本推送的离线保存时长,如果不传此字段则默认保存一天,最多指定保留十天;
243                         .setTimeToLive(86400)
244
245                         .build())
246
247                 .build();
248
249     }
250
251     private static PushPayload buildPushObject_android_all_alertWithTitle(String notification_title, String msg_title, String msg_content, String extrasparam) {
252         System.out.println("----------buildPushObject_android_registrationId_alertWithTitle");
253         return PushPayload.newBuilder()
254                 //指定要推送的平台,all代表当前应用配置了的所有平台,也可以传android等具体平台
255                 .setPlatform(Platform.android())
256                 //指定推送的接收对象,all代表所有人,也可以指定已经设置成功的tag或alias或该应应用客户端调用接口获取到的registration id
257                 .setAudience(Audience.all())
258                 //jpush的通知,android的由jpush直接下发,iOS的由apns服务器下发,Winphone的由mpns下发
259                 .setNotification(Notification.newBuilder()
260                         //指定当前推送的android通知
261                         .addPlatformNotification(AndroidNotification.newBuilder()
262                                 .setAlert(notification_title)
263                                 .setTitle(notification_title)
264                                 //此字段为透传字段,不会显示在通知栏。用户可以通过此字段来做一些定制需求,如特定的key传要指定跳转的页面(value)
265                                 .addExtra("androidNotification extras key",extrasparam)
266                                 .build())
267                         .build()
268                 )
269                 //Platform指定了哪些平台就会像指定平台中符合推送条件的设备进行推送。 jpush的自定义消息,
270                 // sdk默认不做任何处理,不会有通知提示。建议看文档http://docs.jpush.io/guideline/faq/的
271                 // [通知与自定义消息有什么区别?]了解通知和自定义消息的区别
272                 .setMessage(Message.newBuilder()
273                         .setMsgContent(msg_content)
274                         .setTitle(msg_title)
275                         .addExtra("message extras key",extrasparam)
276                         .build())
277
278                 .setOptions(Options.newBuilder()
279                         //此字段的值是用来指定本推送要推送的apns环境,false表示开发,true表示生产;对android和自定义消息无意义
280                         .setApnsProduction(false)
281                         //此字段是给开发者自己给推送编号,方便推送者分辨推送记录
282                         .setSendno(1)
283                         //此字段的值是用来指定本推送的离线保存时长,如果不传此字段则默认保存一天,最多指定保留十天,单位为秒
284                         .setTimeToLive(86400)
285                         .build())
286                 .build();
287     }
288
289     private static PushPayload buildPushObject_ios_all_alertWithTitle( String notification_title, String msg_title, String msg_content, String extrasparam) {
290         System.out.println("----------buildPushObject_ios_registrationId_alertWithTitle");
291         return PushPayload.newBuilder()
292                 //指定要推送的平台,all代表当前应用配置了的所有平台,也可以传android等具体平台
293                 .setPlatform(Platform.ios())
294                 //指定推送的接收对象,all代表所有人,也可以指定已经设置成功的tag或alias或该应应用客户端调用接口获取到的registration id
295                 .setAudience(Audience.all())
296                 //jpush的通知,android的由jpush直接下发,iOS的由apns服务器下发,Winphone的由mpns下发
297                 .setNotification(Notification.newBuilder()
298                         //指定当前推送的android通知
299                         .addPlatformNotification(IosNotification.newBuilder()
300                                 //传一个IosAlert对象,指定apns title、title、subtitle等
301                                 .setAlert(notification_title)
302                                 //直接传alert
303                                 //此项是指定此推送的badge自动加1
304                                 .incrBadge(1)
305                                 //此字段的值default表示系统默认声音;传sound.caf表示此推送以项目里面打包的sound.caf声音来提醒,
306                                 // 如果系统没有此音频则以系统默认声音提醒;此字段如果传空字符串,iOS9及以上的系统是无声音提醒,以下的系统是默认声音
307                                 .setSound("sound.caf")
308                                 //此字段为透传字段,不会显示在通知栏。用户可以通过此字段来做一些定制需求,如特定的key传要指定跳转的页面(value)
309                                 .addExtra("iosNotification extras key",extrasparam)
310                                 //此项说明此推送是一个background推送,想了解background看:http://docs.jpush.io/client/ios_tutorials/#ios-7-background-remote-notification
311                                // .setContentAvailable(true)
312
313                                 .build())
314                         .build()
315                 )
316                 //Platform指定了哪些平台就会像指定平台中符合推送条件的设备进行推送。 jpush的自定义消息,
317                 // sdk默认不做任何处理,不会有通知提示。建议看文档http://docs.jpush.io/guideline/faq/的
318                 // [通知与自定义消息有什么区别?]了解通知和自定义消息的区别
319                 .setMessage(Message.newBuilder()
320                         .setMsgContent(msg_content)
321                         .setTitle(msg_title)
322                         .addExtra("message extras key",extrasparam)
323                         .build())
324
325                 .setOptions(Options.newBuilder()
326                         //此字段的值是用来指定本推送要推送的apns环境,false表示开发,true表示生产;对android和自定义消息无意义
327                         .setApnsProduction(false)
328                         //此字段是给开发者自己给推送编号,方便推送者分辨推送记录
329                         .setSendno(1)
330                         //此字段的值是用来指定本推送的离线保存时长,如果不传此字段则默认保存一天,最多指定保留十天,单位为秒
331                         .setTimeToLive(86400)
332                         .build())
333                 .build();
334     }
335
336 //    public static void main(String[] args){
337 //        if(JpushClientUtil.sendToAllIos("testIos","testIos","this is a ios Dev test","")==1){
338 //            System.out.println("success");
339 //        }
340 //    }
341 }
342
343
344
345 public class Jdpush {
346      protected static final Logger LOG = LoggerFactory.getLogger(Jdpush.class);
347
348      // demo App defined in resources/jpush-api.conf
349
350     public static final String TITLE = "申通快递";
351     public static final String ALERT = "祝大家新春快乐";
352     public static final String MSG_CONTENT = "申通快递祝新老客户新春快乐";
353     public static final String REGISTRATION_ID = "0900e8d85ef";
354     public static final String TAG = "tag_api";
355
356     public  static JPushClient jpushClient=null;
357
358     public static void testSendPush(String appKey ,String masterSecret) {
359
360
361
362          jpushClient = new JPushClient(masterSecret, appKey, 3);
363
364         // HttpProxy proxy = new HttpProxy("localhost", 3128);
365         // Can use this https proxy: https://github.com/Exa-Networks/exaproxy 366
367
368         // For push, all you need do is to build PushPayload object.
369         //PushPayload payload = buildPushObject_all_all_alert();
370          //生成推送的内容,这里我们先测试全部推送
371         PushPayload payload=buildPushObject_all_alias_alert();
372
373
374         try {
375             System.out.println(payload.toString());
376             PushResult result = jpushClient.sendPush(payload);
377             System.out.println(result+"................................");
378
379             LOG.info("Got result - " + result);
380
381         } catch (APIConnectionException e) {
382             LOG.error("Connection error. Should retry later. ", e);
383
384         } catch (APIRequestException e) {
385             LOG.error("Error response from JPush server. Should review and fix it. ", e);
386             LOG.info("HTTP Status: " + e.getStatus());
387             LOG.info("Error Code: " + e.getErrorCode());
388             LOG.info("Error Message: " + e.getErrorMessage());
389             LOG.info("Msg ID: " + e.getMsgId());
390         }
391     }
392
393     public static PushPayload buildPushObject_all_all_alert() {
394         return PushPayload.alertAll(ALERT);
395     }
396
397     public static PushPayload buildPushObject_all_alias_alert() {
398         return PushPayload.newBuilder()
399                 .setPlatform(Platform.all())//设置接受的平台
400                 .setAudience(Audience.all())//Audience设置为all,说明采用广播方式推送,所有用户都可以接收到
401                 .setNotification(Notification.alert(ALERT))
402                 .build();
403     }
404
405     public static PushPayload buildPushObject_android_tag_alertWithTitle() {
406         return PushPayload.newBuilder()
407                 .setPlatform(Platform.android())
408                 .setAudience(Audience.all())
409                 .setNotification(Notification.android(ALERT, TITLE, null))
410                 .build();
411     }
412
413     public static PushPayload buildPushObject_android_and_ios() {
414         return PushPayload.newBuilder()
415                 .setPlatform(Platform.android_ios())
416                 .setAudience(Audience.tag("tag1"))
417                 .setNotification(Notification.newBuilder()
418                         .setAlert("alert content")
419                         .addPlatformNotification(AndroidNotification.newBuilder()
420                                 .setTitle("Android Title").build())
421                         .addPlatformNotification(IosNotification.newBuilder()
422                                 .incrBadge(1)
423                                 .addExtra("extra_key", "extra_value").build())
424                         .build())
425                 .build();
426     }
427
428     public static PushPayload buildPushObject_ios_tagAnd_alertWithExtrasAndMessage() {
429         return PushPayload.newBuilder()
430                 .setPlatform(Platform.ios())
431                 .setAudience(Audience.tag_and("tag1", "tag_all"))
432                 .setNotification(Notification.newBuilder()
433                         .addPlatformNotification(IosNotification.newBuilder()
434                                 .setAlert(ALERT)
435                                 .setBadge(5)
436                                 .setSound("happy")
437                                 .addExtra("from", "JPush")
438                                 .build())
439                         .build())
440                  .setMessage(Message.content(MSG_CONTENT))
441                  .setOptions(Options.newBuilder()
442                          .setApnsProduction(true)
443                          .build())
444                  .build();
445     }
446
447     public static PushPayload buildPushObject_ios_audienceMore_messageWithExtras() {
448         return PushPayload.newBuilder()
449                 .setPlatform(Platform.android_ios())
450                 .setAudience(Audience.newBuilder()
451                         .addAudienceTarget(AudienceTarget.tag("tag1", "tag2"))
452                         .addAudienceTarget(AudienceTarget.alias("alias1", "alias2"))
453                         .build())
454                 .setMessage(Message.newBuilder()
455                         .setMsgContent(MSG_CONTENT)
456                         .addExtra("from", "JPush")
457                         .build())
458                 .build();
459     }
460 }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Jpush