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

iOS11-在后台无限期运行应用程序,ios,iphone,swift,core-location,Ios,Iphone,Swift,Core Location,我需要设计一个应用程序,匹配的人 用户将一个地方标记为“我在这里”,具体范围为150米 用户B用一个范围标记一个地方,该范围包括用户a 如果它们在标记位置的范围内,则将进行匹配 如果任何用户不在其范围内。然后用户将无法与新用户匹配 有了这些要求,我在工作上面临很多挑战 如果用户A标记了他的位置,并且他离开了该区域,CoreLocation包括类似于区域监控的功能。所以我可以随时跟踪用户所在区域的出口。这真的是一个很好的功能,它可以唤醒应用程序,即使应用程序处于挂起或终止状态 如果所有用户都有活动

我需要设计一个应用程序,匹配的人

  • 用户将一个地方标记为“我在这里”,具体范围为150米
  • 用户B用一个范围标记一个地方,该范围包括用户a
  • 如果它们在标记位置的范围内,则将进行匹配
  • 如果任何用户不在其范围内。然后用户将无法与新用户匹配
  • 有了这些要求,我在工作上面临很多挑战

    如果用户A标记了他的位置,并且他离开了该区域,
    CoreLocation
    包括类似于区域监控的功能。所以我可以随时跟踪用户所在区域的出口。这真的是一个很好的功能,它可以唤醒应用程序,即使应用程序处于挂起或终止状态

    如果所有用户都有活动的internet连接,则根本没有问题。 因此,如果任何用户的internet连接丢失,然后用户退出他们的区域,那么他们就不能将其退出区域通知发送到节点服务器,该通知已由
    CoreLocation
    区域监视提供

    但是,如果用户标记了一个坐标区域,那么用户已经退出,并且用户没有internet连接,则不会发送
    exitRegion
    信息。因此,即使不在范围内,用户也将获得匹配

    因此,在这种情况下,在进行任何匹配之前,我需要ping用户,如“Hey are you there”或区域监控提供的
    regionState

    问题从这里开始

    作为一个想法,我认为我可以使用静默通知,如果在App醒后30秒的有限后台工作之后,我不能从客户端得到响应,我可以考虑“我不知道如果用户已经在它的区域”,那么就不能产生匹配。但是,每当新来者来到MongoDB时,我不能向所有客户发送无声通知

    苹果说

    静默通知并不是让你的应用保持清醒的方式 背景,也不是用于高优先级更新。APNs 将静默通知视为低优先级,并可能限制其优先级 如果总数过多,则全部交付。实际的 限制是动态的,可以根据条件改变,但尽量不要改变 每小时发送多个通知

    因此,我不能保证沉默通知将到达,我不能连续发送沉默通知。如果静默通知过期会发生什么

    我可以在后台使用socket io为每个客户端保持开放连接。因此,苹果再次限制后台操作的时间有限。iOS my kill my app from background state,当手机处于锁定状态时,我打开的连接将丢失,并且我可以看到客户端处于脱机状态,即使它具有活动的internet连接

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

    我需要一个解决方案,发送ping到每个客户端,以确定他们是否仍然在他们的范围内。如果我没有得到回应,由于失去了互联网的客户端比我将阻止未来的比赛

    如果我成功执行此操作,当用户打开具有活动internet连接的应用程序时,我可以从记录的信息更新用户脱机时的匹配项。就像你在2小时前与另一个用户进行了匹配,但由于你所在的
    地区
    ,你错过了一些


    所以我需要做的是询问每个客户是否在他们所在的地区,如果他们没有活动的internet连接


    谢谢,

    查看swift的背景模式。特别是,如果用户的位置更新,位置更新将唤醒您的应用程序。您可以找到更多信息

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

    “那么我需要做什么,询问每个客户是否在他们的区域,如果他们没有活动的互联网连接”Magic?Lol。你说得对。但是你有什么建议来解决这种情况吗?或者干脆在没有互联网连接的情况下使应用程序不可用。因此,在这种状态下,标记位置的用户在脱机时将无法获得匹配?请查看“查找我的朋友”。如果找不到我朋友的位置(可能是他们的手机没电了),它会说我们找不到位置,可能会显示我们最后的位置。如果没有媒体,数据是无法传输的。除了互联网、蓝牙等,几乎没有其他选择。好吧,如果任何客户端上都没有互联网连接。我可以阻止客户端进行新的匹配。但如果客户端有互联网,应用程序被挂起,那么有没有办法唤醒应用程序?很难实现在用户离线时监控用户退出区域以防止新的匹配。我认为我的应用程序的逻辑有些错误。或者我要求的东西在技术上是不可能的。