【问题标题】:Keep a live websocket when app is in terminated ( kill ) state当应用程序处于终止( kill )状态时保持实时 websocket
【发布时间】:2016-08-21 12:25:55
【问题描述】:

我正在使用websocket 和 Swift 2 来维护应用程序和服务器之间的一些数据。这个 websocket 在前台和后台状态下工作正常,但是当我终止( kill )应用程序时,websocket 连接中断。再次访问该应用程序时,它将再次开始工作。

注意事项:

  • 已授予所有后台、VOIP 和其他权限。
  • 一般情况下,websocket 在后台是不行的,我已经弄清楚了 一种保持在后台状态和设备运行时工作的解决方案 锁定。
  • 也尝试了静默推送通知,它调用方法 websocket连接,静默推送通知发生,但方法 仅在返回应用程序时有效。

那么,对于如何在应用程序处于终止 (kill) 状态时保持实时 websocket 的任何想法和建议表示赞赏?

提前致谢!

【问题讨论】:

  • 你永远不会有一个处理程序,使用静默推送,只有当应用程序再次激活时,它才会被处理。我真的看不到这样做的方法。
  • @Brduca - 我没有得到任何处理程序,而且静默推送通知仅在我返回应用程序时才有效。谁能知道其他选择?
  • Hasya,这就是我要告诉你的。这是不可能的。
  • 有人知道使用静默 pushnotification 或 pushkit 来调用特定方法吗?
  • 你好 Hasya,你能告诉我你是如何在应用程序处于后台时保持 websocket 活动的吗??

标签: ios iphone swift websocket push-notification


【解决方案1】:

这是不可能的。当用户终止应用程序时,一切都会随之而来,如果不是这种情况,那么用户将无法阻止应用程序做奇怪的事情(除了重新启动整个设备)。

此外,您不应该尝试新奇事物来绕过系统限制,因为这将(最终)导致应用拒绝您发布到商店和/或在您的应用运行时对电池寿命不满意的用户。

【讨论】:

  • 非常感谢 Wain,我需要从你那里知道一件事,例如应用程序处于终止状态,应用程序收到推送通知为“来电”,1 分钟后再次收到另一个推送通知为“未接电话”,我仍然没有触摸任何通知,所以当通知托盘(栏)出现“未接电话”通知时,我们可以清除/删除“来电”推送通知吗? (用户还没有接触任何东西。)
  • 不,无法编辑该列表,iOS 会为您处理(与用户交互相关)
  • Wain,Skype iOS 应用程序会发生这种情况吗? Skype 会发生这种情况。你的帮助对我很有帮助。
  • 您使用 Skype 观察到了什么?当我打开应用程序时,我的 Skype 通知不会自动删除...
  • 来电通知到达,当未接听来电时未接来电通知到来,此时来电通知被删除。 (用户还没有触摸通知)仍然发生这样的事情,有什么想法吗?
【解决方案2】:

您可以尝试通过包含可用内容的推送通知来实现您正在寻找的行为,这让您有一些时间在后台下载内容(更多信息here),为了做到这一点,您的有效负载应该结构类似,

{
    "aps" : {
        "content-available" : 1
    },
    "data-id" : 1234
}

然后实现以下方法来下载内容,或者在您的情况下使用您的网络套接字做一些事情

- (void) application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler

这个方法应该只用于更新你的应用程序中的一些状态或下载一些数据,Apple 不建议使用它来保持你的套接字始终处于活动状态,如果你使用它来保持你的应用程序,我相信最终会拒绝你的应用程序你的套接字永远活着。

【讨论】:

  • 我知道这一点并且已经实现,静默推送通知无助于保持网络套接字的活动。但这仅在从终止状态返回应用程序时才有效。非常感谢弗朗西斯科。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-01
  • 1970-01-01
  • 2012-09-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多