iOS11 - 无限期在后台运行应用程序
Posted
技术标签:
【中文标题】iOS11 - 无限期在后台运行应用程序【英文标题】:iOS11 - Indefinitely run an app on background 【发布时间】:2017-11-05 20:40:02 【问题描述】:我需要设计一款适合人们的应用。
-
用户 A 将地点标记为“我在这里”。具有特定范围,例如150 米。
用户 B 用范围标记地点,其中包括用户 A。
如果它们在标记位置的范围内,则会进行匹配。
如果任何用户不在他们的范围内。那么用户将不会与新用户匹配。
有了这个要求,我面临着很多挑战。
如果用户 A 标记了他的位置并且他离开了该区域,CoreLocation
包含一个类似 区域监控 的功能。所以我可以随时跟踪用户退出他们所在地区的情况。它确实是一个很好的功能,即使应用程序处于暂停或终止状态,它也会唤醒应用程序。
如果所有用户都有有效的互联网连接,则完全没有问题。
因此,如果任何用户的互联网连接丢失,然后用户退出他们的区域,那么他们就无法将CoreLocation
Region Monitoring 已经提供的退出区域通知发送到节点服务器。
但是如果用户用区域标记了一个坐标,那么用户已经在用户没有互联网连接的时候退出了,exitRegion
信息将不会被发送。因此,即使不在范围内,用户也会得到匹配。
因此,在这种情况下,在任何比赛之前,我都需要 ping 用户,例如 Region Monitoring 提供的“嘿,你在吗”或regionState
。
问题从这里开始,
作为一个想法,我想我可以使用静默通知,如果在应用程序唤醒后 30 秒的有限后台工作后我没有得到客户端的响应,我可以考虑它“我不知道如果用户已经在其区域中”然后不产生匹配。但是每当有新人来到 MongoDB 时,我都无法向所有客户端发送静默通知。
苹果这么说;
静默通知并不意味着让您的应用保持清醒状态 背景,也不是为了高优先级更新。 APNs 将静默通知视为低优先级,并可能限制其 如果总数变得过多,则完全交付。实际上 限制是动态的,可以根据条件改变,但尽量不要 每小时发送多个通知。
所以我不能保证静默通知会到达,我不能连续发送静默通知。如果静默通知过期会怎样?
我可以在后台使用套接字 io 为每个客户端保持打开的连接。所以苹果再次将后台操作限制为时间有限。 ios 我从后台状态杀死我的应用程序,当手机处于锁定状态时我的打开连接丢失,即使客户端有活动的互联网连接,我也可以看到客户端处于离线状态。
如果我使用 voip 等特定后台模式的授权来确定用户有活动的互联网连接但应用程序被终止,则唤醒应用程序并向服务器发送响应。但随后苹果会拒绝我的应用程序。因为我不是 voip 应用程序。
我需要一个解决方案来向每个客户发送 ping 以确定他们是否仍在他们的范围内。如果由于丢失客户端互联网而没有得到响应,我将阻止未来的比赛。
如果我成功完成此行为,当用户打开具有活动互联网连接的应用程序时,我可以从记录的信息中更新用户离线时的匹配项。就像您在 2 小时前与另一个用户进行了匹配,但由于您的 exitRegion
而错过了一些匹配。
如果没有有效的互联网连接,我需要问每个客户是否在他们所在的地区?
谢谢,
【问题讨论】:
“如果没有有效的互联网连接,我需要问每个客户是否在他们所在的地区”魔术? 大声笑。你是对的。但是您对解决这种情况有什么建议吗?或者只是让应用程序在没有互联网连接时无法使用。那么在这种状态下,标记地点的用户在离线时不会得到匹配? 查看“查找我的朋友”。如果找不到我朋友的位置(可能是他们的手机没电了),则表示我们无法获得位置,并且可能会显示我们确实拥有的最后一个位置。 井数据不能在没有介质的情况下传输。除了互联网、蓝牙等,几乎没有其他选择。 好的,所以如果任何客户端上都没有互联网连接。我可以阻止客户进行新的比赛。但是如果客户端有互联网并且应用程序被暂停,那么有没有办法唤醒应用程序? 【参考方案1】:查看 swift 的后台模式。具体来说,如果用户的位置更新,位置更新将唤醒您的应用程序。你可以找到更多信息here
【讨论】:
很难实现在用户离线时监控用户退出区域以防止新匹配。我认为我的应用程序逻辑中有一些错误的地方。或者我要求的东西在技术上是不可能的。【参考方案2】:听起来 iBeacons 可能是您解决方案的一部分。让您的应用程序的所有用户在运行时广播一个特定的 iBeacon,并设置一个信标区域来监听您的应用程序的广播。当设备检测到一个,它会通知你的应用程序,如果检测到信标时它没有运行,它甚至会启动它。
【讨论】:
以上是关于iOS11 - 无限期在后台运行应用程序的主要内容,如果未能解决你的问题,请参考以下文章