V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
binauyang
V2EX  ›  iOS

iPhone 关机再开机之后收不到之前的 APNs 推送

  •  
  •   binauyang · 2017-05-09 10:51:56 +08:00 · 3241 次点击
    这是一个创建于 2742 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在关机后给 iPhone 推一条 APNs,再开机却没有收到; 微信是可以的。 苹果文档上这么写的:If APNs attempts to deliver a notification but the device is offline, the notification is stored for a limited period of time, and delivered to the device when it becomes available. 有知道的么?望指教

    16 条回复    2020-07-15 11:12:25 +08:00
    jiangzhuo
        1
    jiangzhuo  
       2017-05-09 10:54:35 +08:00
    苹果会隔段时间重试,重试间隔一次比一次长,最后就不试了。反正苹果没说推送策略,也可能在 1s 内重试 1 次就不重试了,反正苹果没有许诺保证什么。
    binauyang
        2
    binauyang  
    OP
       2017-05-09 10:56:16 +08:00
    @jiangzhuo 那开机之后能收到微信的推送是怎么做到的...
    paradoxs
        3
    paradoxs  
       2017-05-09 10:59:01 +08:00
    apns 里面加一个 token 手机收到后用接口传一下 代表收到了 不传的话 XX 时间内重发
    binauyang
        4
    binauyang  
    OP
       2017-05-09 11:01:53 +08:00
    @paradoxs 没太明白,能解释详细点么?
    paradoxs
        5
    paradoxs  
       2017-05-09 11:06:40 +08:00
    @binauyang
    {
    "aps" : { "alert" : "message" },
    "UserInfo" : [ "key", "value" ]
    }
    userinfo 里面加个 key, 作为这一次推送的 id, 在手机收到推送后, 解开 userinfo,把 key 拿出来, 然后往接口传一下, 代表这次推送完成了.
    binauyang
        6
    binauyang  
    OP
       2017-05-09 11:13:01 +08:00
    @paradoxs 但是如果不打开客户端的话,客户端一直是被杀死的状态,也就无法去做解析 userinfo 这样的操作了呀。
    paradoxs
        7
    paradoxs  
       2017-05-09 11:14:29 +08:00
    @binauyang 那就重发呗.
    binauyang
        8
    binauyang  
    OP
       2017-05-09 11:17:10 +08:00
    @paradoxs 那这样不就会重复给客户端推送了么...你的意思我了解,就是客户端收到推送后告诉后台“我收到了”,如果在规定时间内后台没有收到客户端的“收到回复”,则重发;但是客户端其实一直被杀死的状态,所以无论是否收到推送都无法告知后台...
    paradoxs
        9
    paradoxs  
       2017-05-09 11:18:15 +08:00
    @binauyang 不会重复推送的啊. deviceToken 和账号的登录状态是绑定的. 你是给账号推, 又不是给客户端推.
    paradoxs
        10
    paradoxs  
       2017-05-09 11:21:39 +08:00
    @binauyang 如果 deviceToken 对应的账号, 登录状态不对, 就不发!
    mornlight
        11
    mornlight  
       2017-05-09 11:26:00 +08:00   ❤️ 1
    @paradoxs #9 楼主说的事情和客户端无关。

    这个问题我不能给出确定的答案,Remove notification 有 Priority 和 Expiration date 这两个标记,也许有关。
    binauyang
        12
    binauyang  
    OP
       2017-05-09 11:37:25 +08:00
    @mornlight #11 确实!试了下设置 expire date,有效果!感谢撒花!!!
    binauyang
        13
    binauyang  
    OP
       2017-05-09 11:53:45 +08:00
    我用的是 pushy( https://github.com/relayrides/pushy)
    SimpleApnsPushNotification 的构造方法中有个参数是 Date invalidationTime,意义是:the time at which Apple's servers should stop trying to deliver this message. 即该条推送的有效期,如果不设置的话,只会尝试投递一次。
    13036101641
        14
    13036101641  
       2017-05-10 09:39:52 +08:00
    你这个 expire date 设置了多久?
    binauyang
        15
    binauyang  
    OP
       2017-05-10 10:25:15 +08:00
    @13036101641 #14 看你自己啊,我设置了一天,如果一天都不开机,就不给他推了 2333
    shawkex
        16
    shawkex  
       2020-07-15 11:12:25 +08:00
    @binauyang 如果登录了才重推,那登录了都可以收长链消息和主动拉取了,那还有什么意义
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2755 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 11:36 · PVG 19:36 · LAX 03:36 · JFK 06:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.