你的位置:首页 > 操作系统

[操作系统]关于iOS的推送服务的点点

    苹果推送通知服务(Apple Push Notification Service) 简称APNS. 是iOS应用中十分常见的一种交互方式. 

    APNS依托一个或几个系统常驻进程运作,  接管所有应用的消息推送, 所以可看作是独立于应用之外, 而且是设备和苹果服务器之间的通讯, 而非应用的提供商服务器. 

    这和 Android不同, Android更像是传统桌面电脑系统的做法. 每个需要后台推送的应用有各自的单独后台进程, 才能和各自的服务器通讯, 交换数据. 

    另外其实 Android 也有类似 APNS 的 GCM(Google Cloud Message),属于开发者可选,非强制.

    所以你大概看出来区别,iOS 的消息推送机制面世之时是一种全新的解决方案(堪称平台中的平台),应用本身不能有常驻的后台进程,系统的开销少,内存使用更少,电量也

更少(把更多的运算和资源开销放在云端,非设备端)。而 Android 的特点,虽然开销大,优点是更稳定快速,但不明显。

    APNS的工作原理:

         1. App向设备请求是否允许使用通知服务

         2. 设备会携带App名向苹果的推送通知服务器发送允许接受通知服务的请求

         3. 苹果推送通知服务器将deviceToken和App名发送给设备

         4. App将deviceToken等信息发送至我们自己的存储通知内容的服务器

         5. 我们自己的存储通知内容的服务器将deviceToken和通知内容发送给苹果推送通知服务器

         6. 苹果推送通知服务器最后将通知内容按照deviceToken下发到设备

    APNS的使用:

         1. 在https://developer.apple.com/account/ios/identifiers/bundle/bundleList.action中注册App的id

         2. 在https://developer.apple.com/account/ios/certificate/certificateList.action?type=development中注册APNS推送证书下载并安装

         3. 一般的APNS都是在AppDelegate中进行.

            1). 首先要注册通知服务, 由于iOS8.0之后的推送通知注册方法改变, 所以要进行设备的系统版本判断

            // 注册通知服务

            if ([UIDevice currentDevice].systemVersion.floatValue < 8.0) {

                [[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge |

                                                                                       UIRemoteNotificationTypeSound |

                                                                                       UIRemoteNotificationTypeAlert)];

            } else {

               UIUserNotificationSettings* settings = [UIUserNotificationSettings settingsForTypes:(

                                                                                          UIRemoteNotificationTypeBadge |

                                                                                          UIRemoteNotificationTypeSound |

                                                                                          UIRemoteNotificationTypeAlert) categories:nil];

              [application registerUserNotificationSettings:settings];

              [ application registerForRemoteNotifications];

           }

       4. 注册成功调用的方法

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

       5. 注册失败调用的方法

         - (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error

       6. 接送推送消息的触发方法

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

   另: 推送中经常出现在icon上的角标 [UIApplication sharedApplication].applicationIconBadgeNumber