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

2019-04-15 17:00:43 +08:00
 fvckDaybyte2
卸载后尝试进行推送,苹果服务器依然是 200 推送成功,导致主叫方一直在静音等待,如果没卸载,被叫被推送唤醒后会发送彩铃音频流给主叫。

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

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

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

客户端收到推送唤醒时发送一个信号给后端。
后端发送推送后等待信号, 如果一定时间内没收到这个信号,则认为客户端不在线, 被叫方没网或者应用被卸载。
然后提示主叫方拨打的号码无法接通,这样总比主叫方一直等着要好吧
skylancer
2019-04-15 19:07:58 +08:00
@fvckDaybyte2 你换个思路啊,我没记错 voip 推送是可以带参数唤起 App 的,等收到回应再播放彩铃给呼叫方,没收到回应就看你想怎么说了
fvckDaybyte2
2019-04-16 00:05:56 +08:00
@skylancer 现在就是这个机制,和你说的一模一样……
fvckDaybyte2
2019-04-16 00:12:38 +08:00
@finab 如果网络不好 pushkit 会延时 10 秒以上甚至 20 秒,就是指这段时间的静音。如果能预先知道已经卸载,则完全可以避免。如果这次推送没响应,不知道对方是关机 /网络不好还是卸载,下次还是无法避免这 20 秒静音,无从判断,总不能上机器学习吧……

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/555396

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX