iOS11 - 无限期地在后台运行应用程序

时间:2017-11-05 20:40:03

标签: ios iphone swift core-location

我需要设计一个与人匹配的应用。

  1. 用户A将地点标记为"我在这里。"具有特定范围,例如150米。
  2. 用户B标记包含范围的地点,其中包括用户A.
  3. 如果他们在其标记位置的范围内,则会进行匹配。
  4. 如果任何用户不在其范围内。然后,用户将无法与新手用户匹配。
  5. 有了这些要求,我面临着许多挑战。

    如果用户A标记了他的位置,并且他离开了该区域,则CoreLocation包含区域监控等功能。因此,无论何时发生,我都可以跟踪用户所在地区的出口。它真的是一个很好的功能,即使应用程序处于暂停或终止状态,它也会唤醒应用程序。

    如果所有用户都有有效的互联网连接,则完全没有问题。 因此,如果任何用户的互联网连接丢失,然后用户退出他们的区域,那么他们就无法将已经由CoreLocation区域监控提供的退出区域通知发送到节点服务器。

    但是,如果用户使用区域标记坐标,则用户已经退出并且用户没有互联网连接的时间,则不会发送exitRegion信息。因此,即使不在范围内,用户也会获得匹配。

    所以在这种情况下,在任何比赛之前,我需要ping用户,例如"嘿,你在那里"或regionState由地区监测提供。

    问题从这里开始,

    作为一个想法,我想我可以使用无声通知,如果我在应用程序清醒后30秒的有限背景工作后没有得到客户的响应,我可以考虑它"我不要&不知道如果用户已经在其所在地区"然后不产生匹配。但是每当有新手来到MongoDB时,我都无法向所有客户发送无声通知。

    Apple说道;

      

    无声通知并不意味着让您的应用程序保持清醒状态   背景,也不是高优先级更新。的APN   将无声通知视为低优先级,并可能限制它们   如果总数过多,则完全交付。实际上   限制是动态的,可以根据条件改变,但尽量不要   每小时发送一次以上的通知。

    所以我不能保证无声通知会到达,我不能连续发送无声通知。如果无声通知到期会发生什么?

    我可以在后台使用socket io保持每个客户端的开放连接。因此Apple再次将后台操作限制在有限的时间内。 iOS我从后台状态杀了我的应用程序,当手机处于锁定状态时,我的打开连接丢失,即使它有活动的互联网连接,我也可以看到客户端处于离线状态。

    如果我使用像voip这样的特定后台模式的授权来确定用户具有活动的互联网连接但应用程序已终止,则唤醒应用程序并向服务器发送响应。但是Apple会拒绝我的应用程序。因为我不是一个voip应用程序。

    我需要一个解决方案来向每个客户端发送ping,以确定它们是否仍在其范围内。如果我因为丢失了客户端而没有得到回复,那么我将阻止未来的比赛。

    如果我成功这种行为,当用户打开具有活动互联网连接的应用程序时,我可以在登录信息离线时更新用户的匹配项。就像你2小时前与其他用户一起比赛,但由于你的exitRegion而错过了一些比赛。

    那么我需要做的就是询问每个客户是否在他们所在的地区,如果他们没有有效的互联网连接?

    谢谢,

2 个答案:

答案 0 :(得分:0)

查看swift的背景模式。具体而言,位置更新会在用户的位置更新时唤醒您的应用。您可以找到更多信息here

答案 1 :(得分:0)

听起来iBeacons可能是您解决方案的一部分。让应用的所有用户在他们运行时广播特定的iBeacon,并设置信标区域以收听应用的广播。当设备检测到一个时,它会通知您的应用,如果在检测到信标时它没有运行,它甚至会启动它。