zoukankan      html  css  js  c++  java
  • 关于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

  • 相关阅读:
    java.lang.String 的 + 号操作到底做了什么事情?
    我的【Java】面试日记
    ReentrantLock源码学习总结 (二)
    ReentrantLock源码学习总结 (一)
    【Dubbo】带着问题看源码:什么是SPI机制?Dubbo是如何实现的?
    假如 Redis Cluster 模式用在 T-io 上
    Win10下安装tensorflow详细过程
    Python 3.7 使用pyhive (坑)
    ARIMA
    AttributeError: 'Series' object has no attribute 'ix'
  • 原文地址:https://www.cnblogs.com/sunSQuan/p/4662362.html
Copyright © 2011-2022 走看看