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
 

iOS 关于远程推送(push) 的几个问题的更多相关文章

  1. iOS导出远程推送所需要的P12 或pem文件

    http://www.saitjr.com/ios/ios-export-remote-notification-p12-pem-file.html iOS导出远程推送所需要的P12 或pem文件 h ...

  2. iOS注册远程推送消息证书后提示此证书签发者无效的解决办法

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 我们在编写关于远程推送消息的App时需要注册一个相关的证书,我 ...

  3. iOS APNs远程推送流程精简版

    1.去Apple Developer Center里创建应用的信息,指定APP ID(Bundle ID),配置里开启推送功能(Push Notifications). 后续步骤需要用到这个应用的包名 ...

  4. iOS APNS远程推送(史上最全步骤)

    /*****************************************1************************************************/ waterma ...

  5. ios远程推送和python版push server相关笔记

    今天研究了下ios的远程推送,网上的相关教程很多,做了一遍下来记录一下遇到的问题和注意事项(转载请注明) 1.证书及乱七八糟的配置 公钥:app id管理那儿的“Development Push SS ...

  6. iOS远程推送原理及实现过程

    ➠更多技术干货请戳:听云博客 推送通知,是现在的应用必不可少的功能.那么在 iOS 中,我们是如何实现远程推送的呢?iOS 的远程推送原理又是什么呢?在做 iOS 远程推送时,我们会遇到各种各样的问题 ...

  7. 包教包会:本地推送 & 远程推送

    什么是推送?注意,和我们常用的抽象通知不同(NSNotification): 可以让不在前台运行的app,告知用户app内部发生了什么事情:或者没有运行的app接收到服务器发来的通知..比如离线QQ接 ...

  8. iOS远程推送之友盟Push

    更新记录: 1.2015年10月23日上午10:10分更新,优化了该类,去除了不必要的方法. ----------------------------------------------------- ...

  9. iOS---iOS10适配iOS当前所有系统的远程推送

    一.iOS推送通知简介 众所周知苹果的推送通知从iOS3开始出现, 每一年都会更新一些新的用法. 譬如iOS7出现的Silent remote notifications(远程静默推送), iOS8出 ...

随机推荐

  1. BootstrapValidator 解决多属性被同时校验问题《转》

    问题描述:在使用bootstrapValidator插件校验表单属性,当表单属性过多需要每行并列多个属性 ,会出现校验第一个属性,发现整行被校验的效果 ,这不是我们工作想要的效果.如图: 问题分析:因 ...

  2. Web前端都学点儿啥?

    Web开发如今是如日中天,热的发烫.但是Web开发相关的技术和知识却像N座大山一样,耸立在我们面前,连绵起伏,漫无边际.那么这些山头那些我们应该占领,那些我们应该绕开,很多人看着就蒙了,这不光是初学者 ...

  3. Hibernate通过one-to-one元素的一对一映射

    正如我们在前面的例子中讨论过的,在hibernate中执行一对一映射有两种方法: 通过many-to-one元素 通过one-to-one元素 这里,我们将通过one-to-one元素进行一对一的映射 ...

  4. html表格上下居中

    在表格外面嵌套另一个高度为 100% 的表格,外层的表格设置 td 的 valign 属性 为 middle <table width="100%" height=" ...

  5. easyui datagrid onLoadSuccess加载两次。。

    今天使用EasyUI的datagrid时发现首次打开页面时onLoadSuccess方法执行了两次.后来发现主要问题是datagrid被初始化了两次.主要原因是一开始html中声明了dg为easyui ...

  6. 用Flex实现常见的几种布局

    用Flex实现常见的几种布局 1.水平,垂直居中. <style type="text/css"> .container{ display: flex; width: ...

  7. 第8章 Docker Compose 相关问题

    8.1 你那个LNMP例子中的docker-compose.yml中有好多networks,都是什么意思啊? 我写的 LNMP 多容器互通的例子:https://coding.net/u/twang2 ...

  8. Type Group(类型组)

    在 APAP 程序开发中, 经常需要定义一些常量或变量, 而且可能存在多个程序中需要用到的类似的变量或结构体, SAP 提供了类型组, 允许用户建立一些公用的对象, 允许在不同的程序中调用, 这样不但 ...

  9. 取得当前页面的value值问题

    取得当前输入input的值 <body>    <form action="">        <input type="text" ...

  10. python基本数据类型之操作

    python注释 当行注视:# 被注释内容多行注释:""" 被注释内容 """ 字符串操作 # 代表单行注释                ...