本地推送和远程推送

1.本地推送算法

本地通知是有本地应用触发的,它是基于时间行为的一种通知形式,例如闹钟定时、代办事项提醒,又或者一个应用在一段时间后不使用一般服务器

会提示用户使用此应用等都是本地通知。建立一个本地通知一般分为如下几个步骤:网络

  1.建立UILocalNotification。app

  2.设置处理通知的时间fireDate。框架

  3.配置通知的内容:通知主体、通知声音、图表数字等。性能

  4.配置通知传递的自定义数据参数userInfo(这一步可选)。优化

  5.调用通知,可使用scheduleLocalNotification:按计划调度一个通知,也可使用presentLocalNotificationNow当即调用通知。spa

 

2.远程推送代理

和本地推送不一样,远程推送通知是由应用服务提供商发起的,经过苹果的APNS(Apple Push Notification Server)发送到应用客户端。调试

PushNotification_FlowChart

远程通知的过程能够分为如下几步:

  1.应用服务提供商从服务器端把要发送的消息和设备令牌(device token)发送给苹果的消息推送服务器APNS。

  2.APNS根据设备令牌在已注册的设备(iPhone、iPad、iTouch、mac等)查找对应的设备,将消息发送给相应的设备。

  3.客户端设备接收到的消息传递给相应的应用程序,应用程序根据用户设置弹出通知消息。

固然,这只是一个简单的流程,有了这个流程咱们还无从下手编写程序,将上面的流程细化能够获得以下流程图,在这个过程当中会提到如何在程序中完成这些步骤:

PushNotification_FlowChartDetail

1.应用程序注册APNs推送消息。

说明:

a.只有注册过的应用才有可能接收到消息,程序中一般经过UIApplication的registerUserNotificationSettings:方法注册,iOS8中通知注册的方法发生了改变,若是是iOS7及以前版本的iOS请参考其余代码。

b.注册以前有两个前提条件必须准备好:开发配置文件(provisioning profile,也就是.mobileprovision后缀的文件)的App ID不能使用通配ID必须使用指定APP ID而且生成配置文件中选择Push Notifications服务,通常的开发配置文件没法完成注册;应用程序的Bundle Identifier必须和生成配置文件使用的APP ID彻底一致。

2.iOS从APNs接收device token,在应用程序获取device token。

说明:

a.在UIApplication的-(void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken代理方法中获取令牌,此方法发生在注册以后。

b.若是没法正确得到device token能够在UIApplication的-(void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error代理方法中查看详细错误信息,此方法发生在获取device token失败以后。

c.必须真机调试,模拟器没法获取device token。

3.iOS应用将device token发送给应用程序提供商,告诉服务器端当前设备容许接收消息。

说明:

a.device token的生成算法只有Apple掌握,为了确保算法发生变化后仍然可以正常接收服务器端发送的通知,每次应用程序启动都从新得到device token(注意:device token的获取不会形成性能问题,苹果官方已经作过优化)。

b.一般能够建立一个网络链接发送给应用程序提供商的服务器端, 在这个过程当中最好将上一次得到的device token存储起来,避免重复发送,一旦发现device token发生了变化最好将原有的device token一块发送给服务器端,服务器端删除原有令牌存储新令牌避免服务器端发送无效消息。

4.应用程序提供商在服务器端根据前面发送过来的device token组织信息发送给APNs。

说明:

a.发送时指定device token和消息内容,而且彻底按照苹果官方的消息格式组织消息内容,一般状况下能够借助其余第三方消息推送框架来完成。

5.APNs根据消息中的device token查找已注册的设备推送消息。

说明:

a.正常状况下能够根据device token将消息成功推送到客户端设备中,可是也不排除用户卸载程序的状况,此时推送消息失败,APNs会将这个错误消息通知服务器端以免资源浪费(服务器端此时能够根据错误删除已经存储的device token,下次再也不发送)。

相关文章
相关标签/搜索