binauyang
V2EX  ›  iOS

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

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

    这个问题我不能给出确定的答案,Remove notification 有 Priority 和 Expiration date 这两个标记,也许有关。
    binauyang
    binauyang
    OP
    May 9, 2017
    12
    @mornlight #11 确实!试了下设置 expire date,有效果!感谢撒花!!!
    binauyang
    binauyang
    OP
    May 9, 2017
    13
    我用的是 pushy( https://github.com/relayrides/pushy)
    SimpleApnsPushNotification 的构造方法中有个参数是 Date invalidationTime,意义是:the time at which Apple's servers should stop trying to deliver this message. 即该条推送的有效期,如果不设置的话,只会尝试投递一次。
    13036101641
    13036101641
    May 10, 2017
    14
    你这个 expire date 设置了多久?
    binauyang
    binauyang
    OP
    May 10, 2017
    15
    @13036101641 #14 看你自己啊,我设置了一天,如果一天都不开机,就不给他推了 2333
    shawkex
    shawkex
    Jul 15, 2020
    16
    @binauyang 如果登录了才重推,那登录了都可以收长链消息和主动拉取了,那还有什么意义
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1323 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 56ms · UTC 20:04 · PVG 04:04 · LAX 12:04 · JFK 15:04
    ♥ Do have faith in what you're doing.