最近一直在做后台开发,但心里还是总惦记着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
:
- package import import import importjpush.api.common.resp.APIConnectionException;
- importjpush.api.common.resp.APIRequestException;
- importjpush.api.push.PushResult;
- importjpush.api.push.model.Message;
- importjpush.api.push.model.Options;
- importjpush.api.push.model.Platform;
- importjpush.api.push.model.PushPayload;
- importjpush.api.push.model.audience.Audience;
- importjpush.api.push.model.audience.AudienceTarget;
- importjpush.api.push.model.notification.AndroidNotification;
- importjpush.api.push.model.notification.IosNotification;
- importjpush.api.push.model.notification.Notification;
- publicclass protectedstaticfinalclass jpush-api.conf publicstaticfinal;
- publicstaticfinal;
- publicstaticfinal;
- publicstaticfinal;
- publicstaticfinal;
- publicstaticnull publicstaticvoid new);
- try );
- catch catch JPush server. Should review and fix it. " publicstatic return publicstatic return
- publicstatic return null publicstatic return ))
- )
- , ).build())
- publicstatic return , ))
- )
- )
- , JPush" true publicstatic return , ))
- , ))
- , JPush" }
可以看到上面我们推送平台设置的是所有平台,Audience设置为all(所有用户),这里key值和masterSecret值放在servlet中了。
servlet很简单,只要传入两个key值,调用该方法就可以
- package import import import import import import import import /**
- * Servlet implementation class tuisong
- */ publicclassextends privatestaticfinallong privatestaticfinal;
- privatestaticfinal;
- public super
- * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
- */ protectedvoidthrows );
- * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
- */ protectedvoidthrows
- }
最后来看下运行的结果,可以看到,提交数据是以json格式。如果返回
- {:,:,:{:},:{:,:false "msg_id"1663001319"sendno"1981162191 sucess
源码分析:
JPushClient jpushClient = new JPushClient(masterSecret, appKey, 3);实际上是实例化了一下三个类
- publicint new new new }
PushPayload payload = buildPushObject_all_all_alert();,PushPayload类里包含了传递和返回的所有数据
- publicclassimplements privatestaticfinal;
- privatestaticfinal;
- privatestaticfinal;
- privatestaticfinal;
- privatestaticfinal;
- privatestaticfinalint; JPush Docs privatestaticfinalint; JPush Docs privatestaticnew privatefinal privatefinal privatefinal privatefinal private private this this this this this }
PushResult result = jpushClient.sendPush(payload);可以看到就是sendPost方法,然后接受返回的数据
- publicthrows null if returnclass }
另外我专门找了下sendNo如何生成的,其实就是随机生成的一个数字
- publicstatic return }
- publicstaticint return) + MIN;
- }
大家有兴趣也可以详细看一下代码的实现.
最后我们来看一张图,再深入理解下极光推送的原理
浙公网安备 33010602011771号