我正在考虑在我们的 iOS 应用中启用后台获取,以便为 PubNub 留出时间以防止出现超时。
编辑 - 一些背景知识:我们的应用正在通过 pubnub channel 将其地理位置传递给服务。我们要求用户在后台授权位置,当它被授予时,我们已经偶尔从操作系统获得时间。我们一直在尝试使用在线状态功能,以便服务可以知道我们的应用程序是否已退出/断开连接,还是刚刚停止移动。但是,当设备在后台停止移动时,我们无法从到达的位置获取执行时间,因此无论如何都会发生 pubnub 超时。
启用该后台状态后,我似乎需要
- 当我们有一个不想超时的连接时调用
setMinimumBackgroundFetchInterval 并设置一个间隔(当我们不想超时时也使用 Never )。
- 实现一个
application:performFetchWithCompletionHandler:
但是,有些事情并不明显:
相对于我们的 pubnub 超时,我应该选择什么获取间隔?似乎操作系统不一定遵守指定的获取间隔。一般来说,我们希望保持我们的超时时间很短,所以当我们的应用程序离线或强制退出时,我们的另一端很快就会检测到。这似乎与心跳不一致,并确保我们不会无意超时。我正在考虑只使用 Minimum 间隔。
我认为我不需要在我的 performFetchWithCompletionHandler 方法中做任何事情来确保发送存在心跳,而只是因为应用程序被唤醒这一事实会让 PubNub 的计时器开火并照顾好一切。但是,我可以做任何事情吗仅在心跳事务之后调用完成 block ,或者知道何时返回 newData vs. noData vs. failed 。另外,我担心每次使用 noData 立即调用完成将被操作系统作为回退获取间隔的线索。
或者,如果有人可以推荐这种方法的替代方法来防止超时,我将不胜感激。
Best Answer-推荐答案 strong>
PubNub 状态检测信号
如果您想在一个(或多个) channel 上保持后台应用程序的存在,您可以简单地使用 REST 调用每 4 分钟发送一次心跳(比默认超时的每 5 分钟更快 - 4 看起来就像一个不错的整数):
https://ps.pndsn.com/v2/presence/sub-key/{yourSubKey}/channel/{listOfchannels}/heartbeat?&uuid={clientuuid}
例如:
https://ps.pndsn.com/v2/presence/sub-key/sub-c-1234.../channel/channel1,channel2/heartbeat?&uuid=db9c5e39-7c95-40f5-8d71 -125765b6f561
只需确保您发送的 UUID 与您在该用户的应用中初始化 PubNub 实例的 UUID 相同。
此心跳ping 与长时间运行的subscribe 连接具有相同的效果。它会在你传入的 channel 上保留给定的 UUID。
见 PubNub REST Docs了解更多详情。
关于ios - PubNub 防止存在超时,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/43725654/
|