关于推送通知,iOS推送主要是通过服务端来实现的,相关过程可以参考下面两篇文章:
文章中介绍的jar包列表:
- bcprov-jdk16-145-1.jar
- commons-io-2.0.1.jar
- commons-lang-2.5.jar
- javapns-jdk16-163.jar
- log4j-1.2.16.jar
其中介绍最全面的是这篇blog:http://tanqisen.github.io/blog/2013/02/27/ios-push-apns/
整体流程如下图所示:
其中涉及到的角色有:
- Provider:应用自己的服务器;
- APNS:Apple Push Notification Service的简称,苹果的PUSH服务器;
-
OS设备连接网络后,会自动与APNS保持类似TCP的长链接,等待APNS推送消息的到来;
-
应用启动时注册消息推送,并获取设备的在APNS中注册的唯一设备标示deviceToken上传给应用服务器(即Provider);
-
在需要给应用推送消息时,Provider把push内容、接收push消息的deviceToken按APNS指定的格式打包好,发送给APNS;
-
APNS收到Provider发送的消息后,查找deviceToken指定的设备,如果该设备已经和APNS建立了连接,则立即将消息推送给该设备,如果设备不在线,则在该设备下次连接到APNS后将消息推送到设备。请注意苹果并不保证推送一定成功;
-
设备收到push消息后,iOS系统会根据SSL证书判断这个push消息是发给那个应用的,进而启动相应客户端。
上述过程中,有两个关键步骤需要自己处理的是:1.客户端获取deviceToken,并上传到Provider;2.Provider发送push消息到APNS。这两个步骤中都需要苹果的push证书授权,下面就来介绍如何生成push证书,以及Provisioning Profile。
pom.xml中额外依赖一下的jar包:
<!-- Apple Push Notification Related Dependencies --> <dependency> <groupId>org.bouncycastle</groupId> <artifactId>bcprov-jdk16</artifactId> <version>1.46</version> </dependency> <dependency> <groupId>com.github.fernandospr</groupId> <artifactId>javapns-jdk16</artifactId> <version>2.3.1</version> </dependency>
发送消息通知的代码如下所示:
String deviceToken = "xxxxxxx"; //被推送的iphone应用程序标示符 PushNotificationPayload payload = new PushNotificationPayload(); payload.addCustomAlertBody("通知!"); payload.addBadge(1); payload.addSound("default"); PushNotificationManager pushManager = new PushNotificationManager(); Device device = new BasicDevice(deviceToken); String certificatePassword = "123456"; InputStream keyStoreFileInputStream = this.getClass().getClassLoader().getResourceAsStream("push.p12"); //注意:最后一个参数表明该请求是否为生产环境,如果配置的证书为测试使用的证书,请将该参数修改为false pushManager.initializeConnection( new AppleNotificationServerBasicImpl(keyStoreFileInputStream, certificatePassword, true)); pushManager.sendNotification(device, payload); pushManager.stopConnection();
发送消息通知涉及到的有deviceToken(每台设备,针对每个app都是不一样的),证书文件(keystore),验证密码,便可以正常向设置对应的APP发送通知了。
iOS 系统的推送(APNS,即 Apple Push Notification Service)依托一个或几个系统常驻进程运作,是全局的(接管所有应用的消息推送),所以可看作是独立于应用之外,而且是设备和苹果服务器之间的通讯,而非应用的提供商服务器。你的例子里面,腾讯 QQ 的服务器(Provider)会给苹果公司对应的服务器(APNs)发出通知,然后再中转传送到你的设备(Devices)之上。当你接收到通知,打开应用,才开始从腾讯服务器接收数据,跟你之前看到通知里内容一样,但却是经由两个不同的通道而来。
而 Android,就不同,更像是传统桌面电脑系统做法。每个需要后台推送的应用有各自的单独后台进程,才能和各自的服务器通讯,交换数据。另外其实 Android 也有类似 APNS 的 GCM(Google Cloud Message),属于开发者可选,非强制,但是Google的服务,你懂得。
自己开发倒不如直接用第三方的系统,不划算啊~费时费力,效果还不一定好。找个靠谱点的第三方,直接上去下载个文档用,方便啊。不知道你怎么看,我们公司比较了几家以后,使用第三方的极光推送来达到此目的,对应的Java SDK地址:http://docs.jpush.io/server/java_sdk/。
先去注册,登录完成后,即可创建一个新的应用,应用创建成功后,可以在应用信息下查看到具体详情:
应用信息
AppKey | xxxx | |
Master Secret | xxxx | |
创建日期 | 2016-03-17 13:10 | |
最后修改时间 | 2016-03-17 13:10 |
极光推送的文档相对来说还是比较全面的,从常见问题开始:http://docs.jpush.io/guideline/faq/
如果我们并不在服务端进行用户设备等数据的存储,那么就会丧失对所有的注册设备的所有权,只能通过极光推送的相关页面来手动发送通知,鉴于此,还是需要我们在后端设置对应的数据表来对所有注册用户进行处理。
推送服务的整体流程如下,以iOS为示例(android比较简单,不需要APNS服务角色)
整体的流程如下:
- 设备APP移动端向极光推送发送注册设备所需要的信息,包括deviceToken,手机号(用于收费版短信通知)等;
- 注册极光推送相关服务后,再向后端服务提供设备信息,注册的极光id,手机号用于后端存储;
- 后端服务需要将相关数据持久化;
- 如果触发了消息通知机制,一种方法是可以通过极光推送提供的网页端来进行,另外一种就是在后端服务中直接根据用户手机号/注册id/设备别名通过JPush API来进行;
- 极光推送服务收到通知后,需要将消息发送到APNS(Apple Push Notification Service)中;
- APNS根据设备deviceToken发送消息至移动端设备,点击后启动应用程序。
服务端的API主要分为以下几部分:
1. Push
向某一个或一类设备发送推送通知;
如果服务端使用Java作为开发语言,可以参考其中的Java SDK部分:http://docs.jpush.io/server/java_sdk/
需要注册极光推送ID相关的appKey,masterSecret等信息。
JPushClient jpushClient = new JPushClient(masterSecret, appKey, 3); // For push, all you need do is to build PushPayload object. PushPayload payload = buildPushObject_all_all_alert(); try { PushResult result = jpushClient.sendPush(payload); LOG.info("Got result - " + result); } catch (APIConnectionException e) { // Connection error, should retry later LOG.error("Connection error, should retry later", e); } catch (APIRequestException e) { // Should review the error, and fix the request LOG.error("Should review the error, and fix the request", e); LOG.info("HTTP Status: " + e.getStatus()); LOG.info("Error Code: " + e.getErrorCode()); LOG.info("Error Message: " + e.getErrorMessage()); }
JPush的相关文档以及API还是比较方便的,大量使用了创建者模式(Builder),可以快捷地创建推送对象,推送平台。
2. Report
Report API用于可以用于各类统计查询相关功能,Received API 以 msg_id 作为参数,去获取该 msg_id 的送达统计数据。如果一次 API 调用推送有很多对象(比如广播推送),则此 API 返回的统计数据会因为持续有客户端送达而持续增加。每条推送消息的送达统计数据最多保留一个月。即发起推送请求后从最后一个推送送达记录时间点开始保留一个月,如果保留期间有新的送达,将在这个新送达的时间点起再往后保留一个月。
如果我们想要对信息进行统计,那么需要在发送消息完成后记录该信息的msg_id。
3. Device
Device API可以用于服务器端查询,更新,删除设备的tags, alias信息,如果不想让APP客户端和服务端的tags,别名等信息互相覆盖,那么考虑只在 客户端或服务端来进行更新操作,http://docs.jpush.io/server/rest_api_v3_device/
但是服务端的Device API只能修改设备tags,alias信息,功能相对来说有局限,因此大部分功能的注册只能在客户端进行。
4. Schedule
在API层面,全面支持定时发送功能,这是一个相对独立的任务执行模块,http://docs.jpush.io/server/rest_api_push_schedule/。
可惜的是,JPush 的 Java SDK中并没有涉及到Device,Schedule相关的客户端可供直接使用,如果想要在服务端使用该功能,需要在参考JPush Java SDK的源码自己实现一部分功能。
相关推荐
iphone 推送通知 服务器端java 实现 iphone 推送通知 APNS 包含所需jar包和实现代码
App在后台,或是App进程已经被系统回收,收到推送后App进程会被个推拉起。这时候要展示通知,点击通知栏打开App并跳转到目标页面,关闭目标页面后需要返回到应用首页,而不是直接推出App 实现思路 App在前台时,弹...
现在一般的android软件都是需要不断更新的,当你打开某个app的时候,如果有新的版本,它会提示你有新版本需要更新。该项目实现的就是这个功能.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码...
Android实现APP在线下载更新,实现了软件自动更新功能的方法.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
APNS(Apple Push Notification Service)苹果推送通知服务。该技术由苹果公司提供的APNS服务。工作原理:首先,APNS会对用户进行物理连接认证,和设备令牌认证(简言之就是苹果的服务器检查设备里的证书已确定其为...
本次实现了用户登录注册,将用户保存到Application 里面实现用户持久化,用户有已读消息查看,未读消息查看,发送消息功能,未读消息读取后,添加到已读消息里面,发送消息具有 推送功能 可以全部发送,和选择人员...
只需三个步骤即可实现Android推送通知,并且非常简单。
Java后台实现前台下线通知推送,本例采用Servlet实现,简单易懂,有无经验的都易上手,在此感谢大家对我的支持
java极光推送demo,用于给手机app发送相关消息推送,实现通知的功能
java后台推送钉钉卡片消息带图片已经连接一个简单demo,需要更改为自己的AgentId,AppSecret,运行main方法即可
消息推送机制:服务器器端需要变被动为主动,通知客户一些开发商认为重要的信息,无论应用程序是否正在运行或者关闭。独立进程:无论程序是否正在运行,我们都要能通知到客户,我们需要一个独立进程的后台服务。我们...
SignalR 是 ASP.NET 团队正在开发的一个 Microsoft .NET Framework 库和 jQuery 插件,可能包括在以后版本的 ASP.NET 平台中。 winform 和 Asp.net 通信
在一个移动操作系统的生态中,app可以实现一个功能,叫做消息推送,即通知(push)。通知是能够起到提醒或者唤醒用户的作用的,也是app运营最优质的渠道,运用得当可以帮助产品运营人员更高效地实现运营目标,相反...
Android中利用App实现消息推送机制的代码,需要的朋友可以参考下。
WhatsApp借助推送通知服务,可以即刻接收亲友和同事发送的信息。可免费从发送手机短信转为使用WhatsApp程序,以发送和接收信息、图片、音频文件和视频信息。 WhatsApp桌面版截图 WhatsApp桌面版基本简介 Whats...
一个使用Go(Golang)编写的框架的推送通知微服务器,请参阅。 内容 支持平台 。 特征 使用适用于Android的库支持 。 使用库支持 Apple Push Notification Service。 使用库支持华为设备的。 支持配置。 支持...
为什么需要远程推送通知传统获取数据的局限性只要用户关闭了app,就无法跟app的服务器沟通,无法从服务器上获得最新的数据内容远程推送通知可以解决以上问题不管用户打开还是关闭app,只要联网了,都能接收到服务器...
1.该app具有管理员和用户两种登陆身份 2.系统主要分三个模块:广场模块、消息模块、个人中心模块 3.广场模块里应该实现:推荐内容...资源管理:包括分享资源和实时推送 9.用户管理:对用户的增删改查和搜索用户
当前,仅实现了对苹果公司的和Google的推送通知,但是其他推送服务可以轻松地添加到单独的模块中。 要求 韵律干线/0.12或更高版本。 Lua 5.1、5.2或5.3 已安装luasec Lua库0.5版(Debian软件包: lua-sec )或更...