binauyang
V2EX  ›  iOS

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

  •  
  •   binauyang · May 9, 2017 · 3975 views
    This topic created in 3298 days ago, the information mentioned may be changed or developed.

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

    这个问题我不能给出确定的答案,Remove notification 有 Priority 和 Expiration date 这两个标记,也许有关。
    binauyang
        12
    binauyang  
    OP
       May 9, 2017
    @mornlight #11 确实!试了下设置 expire date,有效果!感谢撒花!!!
    binauyang
        13
    binauyang  
    OP
       May 9, 2017
    我用的是 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  
       May 10, 2017
    你这个 expire date 设置了多久?
    binauyang
        15
    binauyang  
    OP
       May 10, 2017
    @13036101641 #14 看你自己啊,我设置了一天,如果一天都不开机,就不给他推了 2333
    shawkex
        16
    shawkex  
       Jul 15, 2020
    @binauyang 如果登录了才重推,那登录了都可以收长链消息和主动拉取了,那还有什么意义
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5068 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 68ms · UTC 09:20 · PVG 17:20 · LAX 02:20 · JFK 05:20
    ♥ Do have faith in what you're doing.