在应用程序被终止(kill)状态下保持WebSocket连接活动

6
我正在使用Swift 2和websocket来维护应用程序和服务器之间的一些数据。这个websocket在前台和后台状态下都可以正常工作,但是当我终止(kill)应用程序时,websocket连接就会断开。当再次进入应用程序时,它将重新开始工作。
注意:
- 已经授予所有后台、VOIP和其他权限。 - 通常情况下,websocket在后台不起作用,我已经找到了一种解决方案,在后台状态下和设备锁定时仍然能够工作。 - 也尝试过静默推送通知,它会调用websocket连接的方法,静默推送通知确实会发生,但是该方法只有在返回应用程序时才有效。
因此,任何关于如何在应用程序处于终止(kill)状态时保持活动websocket的想法和建议都将不胜感激!
提前致谢!

你永远不会为那个设置一个处理程序,只有当应用程序再次变为活动状态时,它才会被处理,使用静默推送。我真的看不到有什么办法可以做到这一点。 - brduca
@Brduca - 我没有得到任何处理程序,而且只有在我返回应用程序时才能使用静默推送通知。有人知道其他选项吗? - Hasya
Hasya,我告诉你这是不可能的。 - brduca
有没有人知道如何使用静默推送或PushKit调用特定方法? - Hasya
你好,Hasya,请问您是如何在应用程序处于后台时保持WebSocket连接的呢? - Varun Mehta
你好,Varun。我使用了 https://github.com/tidwall/SwiftWebSocket。当应用程序被终止时,websocket会关闭,否则在前台和后台模式下都可以正常工作。在后台模式下,你不能处理UI相关的事情,但是你可以处理代码相关的事情。 - Hasya
2个回答

3

不可能实现。当用户终止应用程序时,一切都会随之消失。如果不是这样的话,用户就没有办法停止应用程序做奇怪的事情(除非重启整个设备)。

此外,您不应尝试使用奇特的方法来规避系统限制,因为这将(最终)导致您发布到商店的应用程序被拒绝和用户对电池寿命感到不满意。


非常感谢你,Wain。我需要向你了解一件事情。例如,应用程序处于kill状态并且正在接收推送通知,如“来电”,1分钟后再次接收到另一个推送通知,如“未接来电”,仍然没有触摸任何通知,那么当“未接来电”通知出现在通知托盘(栏)中时,我们是否可以清除/删除“来电”推送通知?(用户尚未触摸任何内容。) - Hasya
不,没有办法编辑那个列表,iOS会为您处理(与用户交互相关)。 - Wain
Wain,Skype iOS 应用程序怎么了?这种情况发生在 Skype 上。你的帮助对我来说非常重要。 - Hasya
你在使用Skype时有什么观察到的问题吗?当我打开应用程序时,我的Skype通知不会自动消失... - Wain
当未接来电时,会出现未接来电通知,如果此时收到来电通知,则未接来电通知将被删除。(用户尚未触摸通知)仍然发生这种情况,有任何想法吗? - Hasya

0

您可以尝试使用一条带有可用内容的推送通知来实现所需的行为,这将使设备在后台保持苏醒状态并有时间下载内容(更多信息请参见此处)。要实现此功能,您的有效载荷应该被构建如下:

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

请实现以下方法来下载内容,或者在您的情况下使用您的Web套接字执行某些操作。
- (void) application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler

这个方法仅应用于更新应用程序中的某些状态或下载一些数据,苹果不建议使用此方法来保持您的套接字始终处于活动状态,如果您使用此方法来保持套接字始终处于活动状态,我相信苹果最终会拒绝您的应用程序。


我知道这个并已经实现了,静默推送通知无法帮助保持Web套接字的活动状态。但是这仅在从终止状态返回应用程序时有效。非常感谢Francisco。 - Hasya

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接