我正在考虑在我们的iOS应用中启用后台提取功能,以便为PubNub提供时间以防止状态超时。
编辑 - 一些背景:我们的应用通过pubnub频道将其地理位置传达给服务。我们要求用户在后台授权位置,当授予该位置时,我们已经偶尔从该操作系统获得时间。我们一直在尝试使用状态功能,因此服务可以知道我们的应用是否已退出/断开连接而非停止移动。但是,当设备在后台停止移动时,我们不会从到达的位置获得执行时间,因此无论如何都会发生pubnub超时。
启用后台状态后,看起来我需要
setMinimumBackgroundFetchInterval
我们不想超时(当我们没有时,也请Never
)。application:performFetchWithCompletionHandler:
然而,有些事情并不明显:
我应该选择哪个获取时间间隔与pubnub超时相关?似乎指定的获取间隔不一定遵守操作系统。一般情况下,我们希望保持超时,以便当我们的应用程序脱机或强行退出时,我们的另一端会很快检测到。这似乎与心跳不一致,并确保我们不会无意中超时。我考虑使用Minimum
间隔。
我认为我不需要在我的performFetchWithCompletionHandler
方法中做任何事情以确保发送状态的心跳,而只是通过应用程序被唤醒的事实将让PubNub&#39 ;定时器开火并照顾一切。但是,我可以执行任何操作,仅在心跳事务之后调用完成块,或者知道何时返回newData
与noData
与failed
的对比。此外,我担心每次使用noData
立即调用完成时,操作系统将使用操作系统作为退回获取间隔的线索。
或者,如果有人可以推荐替代这种方法来防止超时,我会很感激。
答案 0 :(得分:2)
如果你想让你的后台应用程序存在于一个或多个频道上,你可以简单地使用一个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。