2

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

编辑- 一些背景:我们的应用程序正在通过 pubnub 频道将其地理位置传达给服务。我们要求用户在后台授权位置,当它被授予时,我们已经偶尔从操作系统获得时间。我们一直在尝试使用在线状态功能,以便服务可以知道我们的应用程序是否已退出/断开连接,还是刚刚停止移动。但是,当设备在后台停止移动时,我们不会从到达的位置获得执行时间,因此无论如何都会发生 pubnub 超时。

启用该背景状态后,看起来我需要

  • 当我们有一个我们不想超时的连接时调用setMinimumBackgroundFetchInterval一个间隔(当我们不想超时时也是Never如此)。
  • 实施一个application:performFetchWithCompletionHandler:

但是,有些事情并不明显:

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

  2. 我认为我不需要在我的performFetchWithCompletionHandler方法中做任何事情来确保发送存在心跳,而只是通过唤醒应用程序的事实会让 PubNub 的计时器触发并处理所有事情。但是,我可以做任何事情吗仅在心跳事务之后调用完成块,或者知道何时返回newDatavs. noDatavs. failed。另外,我担心每次都立即调用完成noData将被操作系统作为回退获取间隔的线索。

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

4

1 回答 1

2

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 相同。

此心跳pingsubscribe与长时间运行的连接具有相同的效果。它将保持给定的 UUID 存在于您传入的通道上。

有关更多详细信息,请参阅PubNub REST 文档

于 2017-05-02T21:50:18.737 回答