當下有個產品需要給移動端(安卓和ios)推送消息通知,個人覺得消息推送功能如何有條件的話還是別依賴於第三方的服務。
因為消息由第三方軟件公司去發送首先安全性就沒有保障了,其次是對數據的處理,盡管很多第三方服務都提供了很多的api接口,但是總有一些需求是這種第三方服務滿足不了的,所以有條件的公司可以自己搭一套消息推送服務。好了廢話不多說,先講一下極光推送這個第三方的服務吧,總體來講還是比較專業的,官網也給出了比較簡單的demo,但是也僅限於簡單的demo,如果想傳遞帶附加消息的通知你在官網是看不到的,找了半天才在別人的博客上找到,所以這里曬一下我使用極光推送用到的幫助類。
1 package cfs.wsdl.jpush; 2 3 import java.sql.Timestamp; 4 import java.text.SimpleDateFormat; 5 import java.util.ArrayList; 6 import java.util.Date; 7 import java.util.List; 8 import java.util.UUID; 9 import java.util.regex.Pattern; 10 11 import com.google.gson.JsonElement; 12 import com.google.gson.JsonObject; 13 14 import cfs.core.constant.CfsConstant; 15 import cfs.core.util.Util; 16 import cfs.wsdl.cache.Mycache; 17 import cfs.wsdl.constant.MobileConstant; 18 import cfs.wsdl.model.AnswerQuestion; 19 import cfs.wsdl.model.Questions; 20 import cfs.wsdl.model.QuestionsBank; 21 import cfs.wsdl.model.Ranking; 22 import cn.jpush.api.JPushClient; 23 import cn.jpush.api.common.resp.APIConnectionException; 24 import cn.jpush.api.common.resp.APIRequestException; 25 import cn.jpush.api.push.PushResult; 26 import cn.jpush.api.push.model.Message; 27 import cn.jpush.api.push.model.Options; 28 import cn.jpush.api.push.model.Platform; 29 import cn.jpush.api.push.model.PushPayload; 30 import cn.jpush.api.push.model.audience.Audience; 31 import cn.jpush.api.push.model.notification.AndroidNotification; 32 import cn.jpush.api.push.model.notification.IosNotification; 33 import cn.jpush.api.push.model.notification.Notification; 34 35 public class JpushUtil { 36 37 //教師端 38 public static final String mastersecret_teacher="51411********"; 39 public static final String appkey_teacher="f85d6231*********"; 40 public static final String content_teacher="學生們提交作業啦,快去看看吧。"; 41 42 43 public static void main(String[] args) { 44 JsonObject j= new JsonObject(); 45 j.addProperty("homework_name", "隨便寫的"); 46 j.addProperty("assignmen_id", "bc58e262-6b27-477f-a605-7e1b1318e0dd"); 47 JpushUtil ju=new JpushUtil(); 48 ju.jpushSend(JpushUtil.mastersecret_teacher,JpushUtil.appkey_teacher,"單獨給小偉發個測試用的數據",j); 49 } 50 51 52 53 public void jpushSend(String mastersecret,String appkey, String content,JsonObject extra){ 54 JPushClient jpushClient = new JPushClient(mastersecret, appkey); 55 PushPayload payload =PushPayload.newBuilder() 56 .setPlatform(Platform.all()) 57 // .setAudience(Audience.tag_and("tag1", "tag_all")) 58 .setAudience(Audience.all()) 59 .setNotification(Notification.newBuilder() 60 //設置安卓平台消息推送 61 .addPlatformNotification(AndroidNotification.newBuilder().setAlert(content) 62 .addExtra("param", extra) 63 .build()) 64 //設置ios平台消息推送 65 .addPlatformNotification(IosNotification.newBuilder() 66 .setAlert(content) 67 .autoBadge() 68 // .setBadge(5) 69 // .setSound("happy") 70 .addExtra("param", extra) 71 .build()) 72 .build()) 73 // .setMessage(Message.content(content)) 74 .setOptions(Options.newBuilder() 75 .setApnsProduction(false) 76 .build()) 77 .build(); 78 try { 79 PushResult result = jpushClient.sendPush(payload); 80 System.out.println("消息發送成功 - " + result); 81 } catch (APIConnectionException e) { 82 System.out.println("Connection error, should retry later========"+ e); 83 } catch (APIRequestException e) { 84 System.out.println("Should review the error, and fix the request========"+ e); 85 System.out.println("HTTP Status: " + e.getStatus()); 86 System.out.println("Error Code: " + e.getErrorCode()); 87 System.out.println("Error Message: " + e.getErrorMessage()); 88 } 89 } 90 91 }