ios - PubNub 防止存在超时

标签 ios pubnub background-fetch

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

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

启用后台状态后,看起来我需要

  • 当我们不想超时时,调用 setMinimumBackgroundFetchInterval 并设置一个时间间隔(如果不希望超时,则调用 Never)。
  • 实现application:performFetchWithCompletionHandler:

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

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

  2. 我认为我不需要在 performFetchWithCompletionHandler 方法中执行任何操作来确保发送存在心跳,而只是通过唤醒应用程序这一事实来让 PubNub 的计时器开火并照顾一切。但是,我可以做任何事情,仅在心跳事务之后调用完成 block ,或者知道何时返回 newDatanoDatafailed 。另外,我担心每次使用 noData 立即调用完成操作都会被操作系统视为取消获取间隔的线索。

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

最佳答案

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与长时间运行的订阅连接具有相同的效果。它将在您传入的 channel 上保留给定的 UUID。

参见PubNub REST Docs了解更多详情。

关于ios - PubNub 防止存在超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43725654/

相关文章:

Flutter WorkManager 后台获取带有 StateFull 小部件的示例

ios - 类型 'UIApplication' 没有成员 'didBecomeActiveNotification'

iphone - 自定义 MKAnnotationView 标注

ruby-on-rails - 了解 Rails 4 和 pubnub 集成

ios - 使用 Xcode 进行模拟时,PerformFetchWithCompletionHandler 调用了两次

android - 适用于移动设备的简单 HTML5 应用程序

ios - 如果键盘阻塞了 TextView ,则移动 UIView

ios - 无法将类型 "PFUser?"的值转换为类型“[NSObject : AnyObject]

ios - 钥匙串(keychain)有时会返回空值