消息推送

原创 2015年11月21日 16:35:54

APNS的推送机制

⾸首先我们看⼀一下苹果官⽅方给出的对ios推送机制的解释。如下图

Provider就是我们⾃自⼰己程序的后台服务器,APNSApple Push Notification Service的缩写,也就是苹果的推送服务器。

上图可以分为三个阶段:第⼀一阶段:应⽤用程序的服务器端把要发送的消息、⺫⽬目的iPhone的标识打包,发给APNS

第⼆二阶段:APNS在⾃自⾝身的已注册Push服务的iPhone列表中,查找有相应标识的iPhone,并把消息发送到iPhone

第三阶段:iPhone把发来的消息传递给相应的应⽤用程序,并且按照设定弹出Push通知。

APNS推送通知的详细⼯工作流程

下⾯面这张图是说明APNS推送通知的详细⼯工作流程:

根据图⽚片我们可以概括⼀一下:

1. 应⽤用程序注册APNS消息推送。
2. iOSAPNS Server获取devicetoken,应⽤用程序接收device token3. 应⽤用程序将device token发送给程序的PUSH服务端程序。
4. 服务端程序向APNS服务发送消息。
5. APNS服务将消息发送给iPhone应⽤用程序。

远程推送操作过程简介

1. App启动过程中,使⽤用UIApplication::registerForRemoteNotificationTypes函数与苹果的APNS服务器通信,发出注册远程推送的申请。若注册成功,回调函

application:(UIApplication *)application
didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken

会被触发,App可以得到deviceToken,该token就是⼀一个与设备相关的字符串.

  1. App获取到DeviceToken后,将DeviceToken发送给⾃自⼰己的服务端。

  2. 服务端拿到DeviceToken以后,使⽤用证书⽂文件,向苹果的APNS服务器发起⼀一个SSL连接。连接成功之后,发送⼀一段JSON串,该JSON串包含推送消息的类型及内容。

  3. 苹果的APNS服务器得到JSON串以后,向App发送通知消息,使得App的回调函数

application:(UIApplication *)application
didReceiveRemoteNotification:(NSDictionary *)userInfo

userInfo中即可得到推送消息的内容。

⽤用到的证书⽂文件及⽣生成过程

被调⽤用,App

  1. certSigningRequest⽂文件,该⽂文件在MAC系统中⽣生成,⽤用于在Apple⺴⽹网站上申请推送证书⽂文件。 ⽣生成过程: 打开应⽤用程序中的钥匙串访问软件,从菜单中选择 钥匙串访问”-证书助理”-从证书颁发机构请求证书,邮箱和名称随便填写,然后选择保存到磁盘,就可以在本地⽣生成⼀一个CertificateSigningRequest.certSigningRequest⽂文件。

  2. 注册⼀一个⽀支持pushapp id,后⾯面会⽤用到。 ⽣生成过程: 进⼊入developer.apple.com,选择member center - Certificates, Identifiers & Profiles - Identifiers- App Ids,然后选择注册app id,设置appid名称,同时,app id suffix⼀一栏必须选择explicit app id,然后设置bundleid,最后勾选 App Services中的 Push Notifications,这样就可以注册⼀一个⽀支持pushaphid

  3. 推送证书cer⽂文件,该⽂文件在developer.apple.com中⽣生成,⽤用于⽣生成服务端需要的⽂文件。⽣生成过程: 进⼊入developer.apple.com,选择member center - Certificates, Identifiers &Profiles - Certificates,然后选择创建certificate,类型分为DevelopmentProduct。这⾥里以Development为例,选择Apple Push Notification service SSL (Sandbox) ,然后下⼀一步,选择之前⽣生成的⽀支持pushAppId,然后下⼀一步,提交之前创建的CSR⽂文件,再下⼀一步就可以⽣生成cer⽂文件,然后保存到本地。

  4. ⽣生成服务端使⽤用的证书⽂文件。如果是使⽤用⺴⽹网上的mac PushMeBaby⼯工具,在mac机器上进⾏行推送消息的发送,那么有上⾯面的cer⽂文件就够了。如果是使⽤用PHPjava/c#开发⾃自⼰己的服务端,那么还需要将上⾯面的cer⽂文件做⼀一个转换,⽣生成pem⽂文件或者p12⽂文件。

  5. ⽣生成Xcode使⽤用的provisioning⽂文件,该⽂文件⽤用于真机调试。⽣生成过程:进⼊入developer.apple.com,选择member center - Certificates, Identifiers & Profiles -Provisioning Profiles,然后选择创建Provisioning file,接着选择iOS App Development ,下⼀一步选择AppId,选中之前建⽴立的⽀支持pushappid,接着下⼀一步选择⽀支持pushcertificate,下⼀一步勾选需要⽀支持的device id,最后⼀一步设置provisioning⽂文件的⽂文件名,这样provisioning⽂文件就⽣生成了。

客户端的开发

⾸首先下载前⾯面建⽴立的cer⽂文件和provisioning⽂文件,双击,导⼊入到xcode中,在build settingcode signing⼀一栏⾥里选择这两个⽂文件的名称,这样就可以将⽀支持pushapp部署到真机中。然后是要处理推送消息。

客户端对推送消息的处理分两种情况:

1. App没有运⾏行的情况下,系统收到推送消息,⽤用户点击推送消息,启动App。此时,不会执⾏行前⾯面提到的 didReceiveRemoteNotification 函数,⽽而是在AppapplicationDidFinishLaunching函数中处理推送,通过以下代码可以获取推送消息中的数据:

1. APP处于前台时,系统收到推送消息,此时系统不会弹出消息提⽰示,会直接触发application:(UIApplication )application didReceiveRemoteNotification:(NSDictionary)userInfo函数,推送数据在userInfo字典中。

App处于后台时,如果系统收到推送消息,当⽤用户点击推送消息时,会执⾏行application:(UIApplication )application didReceiveRemoteNotification:(NSDictionary )userInfo函数, 此时

NSDictionary *userInfo =[launchOptions objectForKey:UIApplicationLaunchOp
tionsRemoteNotificationKey];

AppDelegate中函数执⾏行的顺序为:

applicationWillEnterForeground
application:didReceiveRemoteNotification

applicationDidBecomeActive
版权声明:本文为博主原创文章,未经博主允许不得转载。

springMVC+dwr技术实现消息推送实例

  • 2017年12月05日 15:26
  • 5.08MB
  • 下载

消息推送服务

  • 2017年11月02日 13:31
  • 38KB
  • 下载

java WebSocket 简易聊天消息推送

环境:
  • hzw2312
  • hzw2312
  • 2014年11月18日 20:02
  • 43831

友盟+消息推送Demo

  • 2017年09月28日 10:17
  • 4.42MB
  • 下载

DWR消息推送简单实例

  • 2017年04月10日 21:39
  • 26KB
  • 下载

使用EventSource实现页面消息推送 与 websocket 的区别

什么是EventSource 确切的说应该问什么是Server-Sent Events(简称SSE)?Wikipedia的介绍是这样的: Server-sent events (SSE) ...

android消息推送

  • 2013年08月12日 21:12
  • 17.26MB
  • 下载

android 消息推送09_02

  • 2012年09月02日 14:34
  • 1.14MB
  • 下载

Android友盟消息推送配置——eclipse

android配置友盟消息推送

APNS消息推送服务端

  • 2012年11月30日 20:30
  • 88KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:消息推送
举报原因:
原因补充:

(最多只允许输入30个字)