不积跬步,无以至千里

博客园 首页 新随笔 联系 订阅 管理

最近一直在做后台开发,但心里还是总惦记着Android,感觉还是Android有意思。正好项目中要用到极光推送,今天抽空来记录下这两天的研究成果。

         我们知道IOS有自己的推送服务,但很遗憾Android没有原生的推送服务,现在有很多第三方的推送服务,比如个推、极光、亚马逊、百度云、聚能等。今天我们就来研究下极光推送的后台服务器如何实现。

         关键点:

        1.首先最好是把极光官网java后台服务器的demo下载下来,里面有我们需要的jar包,以及example.

        2.极光推送的关键jpushClient = new JPushClient(masterSecret, appKey, 3);就是这个类。其中的参数需要我们从极光官网注册开发者,然后创建具体项目获取相应的两                 个key值。其中appKey值就是我们手机端对应的key值

        3.极光推送给我们提供了很多种推送的方式,我们可以选择某一个平台进行推送(Android ,IOS ,Windows Phone),也可以全部推送;我们可以针对某个特别的用户进行推送(设置alisa),也可以针对特别的群体进行推送(设置tag),第三个参数是设置推送保留的时间,只要在有效时间内上线就可以收到推送信息

        4. 极光推送现在都用https连接,提交请求是post,获取数据为get


        ok 接下来就看服务端的实现(JAVA),JdPush推送方法+一个Servlet

:

 

[java] view plaincopy
 
  1. package import import import importjpush.api.common.resp.APIConnectionException;  
  2. importjpush.api.common.resp.APIRequestException;  
  3. importjpush.api.push.PushResult;  
  4. importjpush.api.push.model.Message;  
  5. importjpush.api.push.model.Options;  
  6. importjpush.api.push.model.Platform;  
  7. importjpush.api.push.model.PushPayload;  
  8. importjpush.api.push.model.audience.Audience;  
  9. importjpush.api.push.model.audience.AudienceTarget;  
  10. importjpush.api.push.model.notification.AndroidNotification;  
  11. importjpush.api.push.model.notification.IosNotification;  
  12. importjpush.api.push.model.notification.Notification;  
  13. publicclass protectedstaticfinalclass jpush-api.conf  publicstaticfinal;  
  14. publicstaticfinal;  
  15. publicstaticfinal;  
  16. publicstaticfinal;  
  17. publicstaticfinal;  
  18. publicstaticnull publicstaticvoid new);  
  19.   
  20.   
  21.   
  22.   
  23. try );  
  24. catch catch JPush server. Should review and fix it. " publicstatic return publicstatic return   
  25.   
  26. publicstatic return null publicstatic return ))  
  27. )  
  28. ).build())  
  29. publicstatic return ))  
  30. )  
  31. )  
  32. JPush" true publicstatic return ))  
  33. ))  
  34. JPush" }  


可以看到上面我们推送平台设置的是所有平台,Audience设置为all(所有用户),这里key值和masterSecret值放在servlet中了。


servlet很简单,只要传入两个key值,调用该方法就可以

[java] view plaincopy
 
  1. package import import import import import import import import /** 
  2.  * Servlet implementation class tuisong 
  3.  */ publicclassextends privatestaticfinallong privatestaticfinal;  
  4. privatestaticfinal;  
  5. public super   
  6.      * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) 
  7.      */ protectedvoidthrows );  
  8.      * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) 
  9.      */ protectedvoidthrows   
  10. }  


最后来看下运行的结果,可以看到,提交数据是以json格式。如果返回

[java] view plaincopy
 
  1. {:,:,:{:},:{:,:false "msg_id"1663001319"sendno"1981162191 sucess  

 


源码分析:

 JPushClient jpushClient = new JPushClient(masterSecret, appKey, 3);实际上是实例化了一下三个类

[java] view plaincopy
 
  1. publicint new new new     }  

PushPayload payload = buildPushObject_all_all_alert();,PushPayload类里包含了传递和返回的所有数据

 

 

[java] view plaincopy
 
  1. publicclassimplements privatestaticfinal;  
  2. privatestaticfinal;  
  3. privatestaticfinal;  
  4. privatestaticfinal;  
  5. privatestaticfinal;  
  6. privatestaticfinalint;  JPush Docs privatestaticfinalint;  JPush Docs privatestaticnew privatefinal privatefinal privatefinal privatefinal private private this this this this this     }  


 PushResult result = jpushClient.sendPush(payload);可以看到就是sendPost方法,然后接受返回的数据

 

 

[java] view plaincopy
 
  1. publicthrows null if returnclass    }  


另外我专门找了下sendNo如何生成的,其实就是随机生成的一个数字

 

 

[java] view plaincopy
 
  1. publicstatic return    }  


[java] view plaincopy
 
  1. publicstaticint return) + MIN;  
  2.    }  


大家有兴趣也可以详细看一下代码的实现.

 


         刚开始值直接下载的demo运行,一直提示Audience没有对应的用户,是引文Audience设置了别名alias,而用户里面并没有设置对应的alias,所以找不到对应的用户。

最后我们来看一张图,再深入理解下极光推送的原理

posted on 2017-01-16 18:26  Zeroassetsor  阅读(213)  评论(0)    收藏  举报