V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
iOS 开发实用技术导航
NSHipster 中文版
http://nshipster.cn/
cocos2d 开源 2D 游戏引擎
http://www.cocos2d-iphone.org/
CocoaPods
http://cocoapods.org/
Google Analytics for Mobile 统计解决方案
http://code.google.com/mobile/analytics/
WWDC
https://developer.apple.com/wwdc/
Design Guides and Resources
https://developer.apple.com/design/
Transcripts of WWDC sessions
http://asciiwwdc.com
Cocoa with Love
http://cocoawithlove.com/
Cocoa Dev Central
http://cocoadevcentral.com/
NSHipster
http://nshipster.com/
Style Guides
Google Objective-C Style Guide
NYTimes Objective-C Style Guide
Useful Tools and Services
Charles Web Debugging Proxy
Smore
fvckDaybyte2
V2EX  ›  iDev

苹果 voip pushkit 推送如何知道客户端已经被卸载

  •  
  •   fvckDaybyte2 · 2019-04-15 17:00:43 +08:00 · 6670 次点击
    这是一个创建于 2074 天前的主题,其中的信息可能已经有所发展或是发生改变。
    卸载后尝试进行推送,苹果服务器依然是 200 推送成功,导致主叫方一直在静音等待,如果没卸载,被叫被推送唤醒后会发送彩铃音频流给主叫。

    预期卸载了,推送时应该返回 410 或者 400 来提示 token 无效,这样主叫方就可以播放“您拨打的是空号”的提示音了,而不是静音等待……苹果这么设计是让我们自己做周期唤醒检测么,每小时推送唤醒检查一次?这样岂不是浪费电?
    11 条回复    2019-04-16 00:12:38 +08:00
    ai277014717
        1
    ai277014717  
       2019-04-15 17:21:22 +08:00
    无法检测
    ai277014717
        2
    ai277014717  
       2019-04-15 17:22:01 +08:00
    因为卸载的时候 App 没有机会处理事情
    finab
        3
    finab  
       2019-04-15 17:33:20 +08:00
    VoIP 应用不是可以后台建立一个 TCP 连接吗 ? 这个 TCP 连接被系统接管不会被杀一直存在

    另外收到这个推送时,APP 应该被激活了,可以执行一点代码,发个信号给服务端证明我收到了推送
    如果发了推送,被叫方没有回应,则证明不在线

    没开发过 VoIP 应用,上面仅供参考
    skylancer
        4
    skylancer  
       2019-04-15 17:38:19 +08:00
    我记得 VOIP Pushkit 发起推送的时候是会拉起 App 的,剩下的活自己干就行
    fvckDaybyte2
        5
    fvckDaybyte2  
    OP
       2019-04-15 18:34:03 +08:00
    @ai277014717 不是让 app 处理,预期是让苹果 apns 返回 token invalid ……
    fvckDaybyte2
        6
    fvckDaybyte2  
    OP
       2019-04-15 18:34:52 +08:00
    @skylancer 正如我所说,唤醒后会发送彩铃音频流给对方😂,问题就是我怎么知道有没有卸载?
    fvckDaybyte2
        7
    fvckDaybyte2  
    OP
       2019-04-15 18:36:43 +08:00
    @finab 很早就不让 tcp 长链接了,而且我们 server 也不支持 tcp,信令和 payload 都是 udp😂。感谢回复。
    finab
        8
    finab  
       2019-04-15 19:05:13 +08:00
    @fvckDaybyte2

    客户端收到推送唤醒时发送一个信号给后端。
    后端发送推送后等待信号, 如果一定时间内没收到这个信号,则认为客户端不在线, 被叫方没网或者应用被卸载。
    然后提示主叫方拨打的号码无法接通,这样总比主叫方一直等着要好吧
    skylancer
        9
    skylancer  
       2019-04-15 19:07:58 +08:00
    @fvckDaybyte2 你换个思路啊,我没记错 voip 推送是可以带参数唤起 App 的,等收到回应再播放彩铃给呼叫方,没收到回应就看你想怎么说了
    fvckDaybyte2
        10
    fvckDaybyte2  
    OP
       2019-04-16 00:05:56 +08:00
    @skylancer 现在就是这个机制,和你说的一模一样……
    fvckDaybyte2
        11
    fvckDaybyte2  
    OP
       2019-04-16 00:12:38 +08:00
    @finab 如果网络不好 pushkit 会延时 10 秒以上甚至 20 秒,就是指这段时间的静音。如果能预先知道已经卸载,则完全可以避免。如果这次推送没响应,不知道对方是关机 /网络不好还是卸载,下次还是无法避免这 20 秒静音,无从判断,总不能上机器学习吧……
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2397 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 16:05 · PVG 00:05 · LAX 08:05 · JFK 11:05
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.