PubNub 防止存在超时

PubNub prevent presence timeout

我正在考虑在我们的 iOS 应用程序中启用后台获取,以便为 PubNub 留出时间以防止出现超时。

编辑 - 一些背景:我们的应用程序正在通过 pubnub 频道将其地理位置传达给服务。当用户在后台时,我们会要求用户授权位置,当授权时,我们已经从 os 获得了偶尔的时间。我们一直在尝试使用在线状态功能,以便服务可以知道我们的应用程序是否具有 quit/dropped 连接与刚刚停止移动。然而,当设备在后台停止移动时,我们无法从到达的位置获得执行时间,因此无论如何都会发生 pubnub 超时。

启用该后台状态后,我似乎需要

然而,有些事情并不明显:

  1. 关于我们的 pubnub 超时,我应该选择os什么获取间隔? os 似乎不一定遵守指定的提取间隔。一般来说,我们希望保持超时时间较短,以便当我们的应用程序离线或强制退出时,我们的另一端会很快检测到。这似乎与心跳不一致,并确保我们不会无意中超时。我正在考虑只使用 Minimum 间隔。

  2. 我不认为我需要在我的 performFetchWithCompletionHandler 方法中做任何事情来确保发送存在心跳,而仅仅因为应用程序被唤醒会让 PubNub 的计时器启动并处理一切。但是,我能做些什么吗?只在心跳交易之后调用完成块,或者知道什么时候 return newData vs. noData vs. failed。此外,我担心每次使用 noData 立即调用完成将被 os 用作退出获取间隔的线索。

或者,如果有人可以推荐这种方法的替代方法来防止超时,我将不胜感激。

PubNub 状态检测信号

如果你想在一个或多个频道上保持你的后台应用程序存在,你可以简单地使用 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 长连接具有相同的效果。它会将给定的 UUID 保留在您传入的频道上。

有关详细信息,请参阅 PubNub REST Docs