• iOS 关于远程推送(push) 的几个问题


    1  push 基本流程原理

       (1)启动 app  
       (2)注册远程通知
       (3)苹果服务器回调一个deviceToken "didRegisterForRemoteNotificationsWithDeviceToken:”
       (4)把该deviceToken传递给我们的服务器/第三方push服务接收deviceToken方法
       (5)当我们需要给用户推送消息的时候,服务器或者第三方就会给把这个用户的deviceToken和推送必要内容发送给苹果都得APNS服务器.然后APNS服务器再将消息推送到该deviceToken对应的这台手机上面.
     
    2  deviceToken 认识
     
       "If the user restores backup data to a new device or computer, or reinstalls the operating system, the device token changes"  
        当手机重置刷机生系统,deviceToken会变化 ,开发者生产者证书的切换也会使deviceToken有变化.
        对于1的介绍, 也就是说发送远程push 对手机的识别基于deviceToken.来判断的. 那么 deviceToken是唯一的可用来作为主键的吗?
       个人认为:辩证看这个问题,deviceToken是会变化的,但是推送一定是拿deviceToken来做推送识别的.也就是说deviceToken是作为设备的唯一标示.
    那么,这就是为什么注册远程通知的步骤是在启动app时候,每次都注册远程通知,这样即使deviceToken会变化(说明之前的deviceToken失效无法获得推送),或者之前由于网络等各种原因没有注册上都会重新获得deviceToken.
        所以,deviceToken是否变化理应不影响推送.
     
        那么下面两个问题是关键:
        
    3  给同一个用户同一个手机推送推送多条推送 问题
        说明 deviceToken变化后,在旧deviceToken还未失效,那么服务端一条一条推送 就推送了多个... 那么当前情况就是应该推送当前用户当前应用一条有效推送,即告诉服务端哪个deviceToken才是有效的.
        这里解决方案是 获取当前设备的UUID + keychain + DeviceToken 来处理该问题.
        使用keychain能够保证用户当前设备不刷机情况,即使用户删掉应用重新安装仍然还能获取到keychain中的UUID,这样 告诉服务端 当前UUID 有效deviceToken 是哪一个即可
     
    4  给同一用户 多个硬件端 推送问题
     
        如果有这样的用户 用同一个账号登了好几个硬件, 这个时候 是给几个硬件都发推送????还是只发其中一个??? 感觉有点蒙逼…
        首先要考虑第一点 3 中提到的问题, 其二 需求是只发一台 还是当前用户所有设备都发.
        都发:多台设备 多个UDID 就对应多个deviceToken  就是正常维护每个UDID对应的deviceToken 发送push即可
        如果只发一台:那么 服务端 需要纠结判断一下到底该给当前用户 哪个UDID 所维护最新deviceToken 发送 push呢???
     
        这个我们这里遵守规则维护当前时间戳最新的一条deviceToken的设备 发送push.
     
      推荐工具 : PushMeBaby  
                         noodlewerk/NWPusher 
                        除了使用push第三方外 测试 当前证书 当前测试机 调通 push功能 简单暴力 方便 直接
                        地址:
                        https://github.com/stefanhafeneger/PushMeBaby
                        https://github.com/noodlewerk/NWPusher
     
  • 相关阅读:
    python基础6 迭代器 生成器
    Netty入门之客户端与服务端通信(二)
    Netty入门之HelloWorld
    Java并发之BlockingQueue的使用
    Java并发之Semaphore的使用
    Java并发之CyclicBarria的使用(二)
    Java并发之CyclicBarria的使用
    Java并发之CountDownLatch的使用
    MongoDB的下载与安装
    Hibernate5.2之反向工程
  • 原文地址:https://www.cnblogs.com/someonelikeyou/p/6420786.html
Copyright © 2020-2023  润新知