草庐IT

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

coder 2024-01-28 原文

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

  1. 用户 A 将某个地点标记为“我在这里”。具有特定范围,例如150 米。
  2. 用户B用范围标记了一个地方,其中包括用户A。
  3. 如果他们在标记位置的范围内,则会进行匹配。
  4. 如果有任何用户不在他们的范围内。然后用户将不会与新用户匹配。

有了这个要求,我面临着很多挑战。

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

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

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

所以在这种情况下,在任何比赛之前,我需要像“嘿,你在吗”或区域监控提供的 regionState 之类的 ping 用户。

问题从这里开始,

作为一个想法,我想我可以使用静默通知,如果在应用程序唤醒后 30 秒的有限后台工作后我没有得到客户端的响应,我可以考虑它“我不知道是否用户已经在它的区域”然后不产生匹配。但是每当新手来到 MongoDB 时,我都无法向所有客户端发送静默通知。

Apple 是这么说的;

Silent notifications are not meant as a way to keep your app awake in the background, nor are they meant for high priority updates. APNs treats silent notifications as low priority and may throttle their delivery altogether if the total number becomes excessive. The actual limits are dynamic and can change based on conditions, but try not to send more than a few notifications per hour.

所以我不能保证静默通知一定会到达,也不能连续发送静默通知。如果静默通知过期会怎样?

我可以在后台使用套接字 io 为每个客户端保持一个打开的连接。所以Apple再次限制后台操作为时间限制。 iOS 我从后台状态杀死了我的应用程序,当手机处于锁定状态时,我的打开连接丢失了,我可以看到客户端处于离线状态,即使它有事件的互联网连接。

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

我需要一个解决方案来向每个客户端发送 ping 以确定它们是否仍在它们的范围内。如果由于客户端丢失互联网而没有收到回复,我会阻止以后的比赛。

如果我成功完成此行为,当用户打开具有事件互联网连接的应用程序时,我可以根据记录的信息更新离线时用户的匹配项。就像您在 2 小时前与另一位用户进行了比赛,但由于您的 exitRegion 而错过了一些比赛。

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

谢谢,

最佳答案

研究 swift 的后台模式。具体来说,位置更新会在用户位置更新时唤醒您的应用程序。您可以找到更多信息 here

关于iOS11 - 无限期地在后台运行应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47126400/

有关iOS11 - 无限期地在后台运行应用程序的更多相关文章

  1. ruby - 如何从 ruby​​ 中的字符串运行任意对象方法? - 2

    总的来说,我对ruby​​还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用

  2. ruby - 将差异补丁应用于字符串/文件 - 2

    对于具有离线功能的智能手机应用程序,我正在为Xml文件创建单向文本同步。我希望我的服务器将增量/差异(例如GNU差异补丁)发送到目标设备。这是计划:Time=0Server:hasversion_1ofXmlfile(~800kiB)Client:hasversion_1ofXmlfile(~800kiB)Time=1Server:hasversion_1andversion_2ofXmlfile(each~800kiB)computesdeltaoftheseversions(=patch)(~10kiB)sendspatchtoClient(~10kiBtransferred)Cl

  3. ruby - 树顶语法无限循环 - 2

    我脑子里浮现出一些关于一种新编程语言的想法,所以我想我会尝试实现它。一位friend建议我尝试使用Treetop(Rubygem)来创建一个解析器。Treetop的文档很少,我以前从未做过这种事情。我的解析器表现得好像有一个无限循环,但没有堆栈跟踪;事实证明很难追踪到。有人可以指出入门级解析/AST指南的方向吗?我真的需要一些列出规则、常见用法等的东西来使用像Treetop这样的工具。我的语法分析器在GitHub上,以防有人希望帮助我改进它。class{initialize=lambda(name){receiver.name=name}greet=lambda{IO.puts("He

  4. ruby - 如何每月在 Heroku 运行一次 Scheduler 插件? - 2

    在选择我想要运行操作的频率时,唯一的选项是“每天”、“每小时”和“每10分钟”。谢谢!我想为我的Rails3.1应用程序运行调度程序。 最佳答案 这不是一个优雅的解决方案,但您可以安排它每天运行,并在实际开始工作之前检查日期是否为当月的第一天。 关于ruby-如何每月在Heroku运行一次Scheduler插件?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/8692687/

  5. ruby-on-rails - 如何在 ruby​​ 中使用两个参数异步运行 exe? - 2

    exe应该在我打开页面时运行。异步进程需要运行。有什么方法可以在ruby​​中使用两个参数异步运行exe吗?我已经尝试过ruby​​命令-system()、exec()但它正在等待过程完成。我需要用参数启动exe,无需等待进程完成是否有任何ruby​​gems会支持我的问题? 最佳答案 您可以使用Process.spawn和Process.wait2:pid=Process.spawn'your.exe','--option'#Later...pid,status=Process.wait2pid您的程序将作为解释器的子进程执行。除

  6. ruby-on-rails - Rails 应用程序之间的通信 - 2

    我构建了两个需要相互通信和发送文件的Rails应用程序。例如,一个Rails应用程序会发送请求以查看其他应用程序数据库中的表。然后另一个应用程序将呈现该表的json并将其发回。我还希望一个应用程序将存储在其公共(public)目录中的文本文件发送到另一个应用程序的公共(public)目录。我从来没有做过这样的事情,所以我什至不知道从哪里开始。任何帮助,将不胜感激。谢谢! 最佳答案 无论Rails是什么,几乎所有Web应用程序都有您的要求,大多数现代Web应用程序都需要相互通信。但是有一个小小的理解需要你坚持下去,网站不应直接访问彼此

  7. ruby - 无法运行 Rails 2.x 应用程序 - 2

    我尝试运行2.x应用程序。我使用rvm并为此应用程序设置其他版本的ruby​​:$rvmuseree-1.8.7-head我尝试运行服务器,然后出现很多错误:$script/serverNOTE:Gem.source_indexisdeprecated,useSpecification.Itwillberemovedonorafter2011-11-01.Gem.source_indexcalledfrom/Users/serg/rails_projects_terminal/work_proj/spohelp/config/../vendor/rails/railties/lib/r

  8. ruby-on-rails - Rails 应用程序中的 Rails : How are you using application_controller. rb 是新手吗? - 2

    刚入门rails,开始慢慢理解。有人可以解释或给我一些关于在application_controller中编码的好处或时间和原因的想法吗?有哪些用例。您如何为Rails应用程序使用应用程序Controller?我不想在那里放太多代码,因为据我了解,每个请求都会调用此Controller。这是真的? 最佳答案 ApplicationController实际上是您应用程序中的每个其他Controller都将从中继承的类(尽管这不是强制性的)。我同意不要用太多代码弄乱它并保持干净整洁的态度,尽管在某些情况下ApplicationContr

  9. ruby - Sinatra:运行 rspec 测试时记录噪音 - 2

    Sinatra新手;我正在运行一些rspec测试,但在日志中收到了一堆不需要的噪音。如何消除日志中过多的噪音?我仔细检查了环境是否设置为:test,这意味着记录器级别应设置为WARN而不是DEBUG。spec_helper:require"./app"require"sinatra"require"rspec"require"rack/test"require"database_cleaner"require"factory_girl"set:environment,:testFactoryGirl.definition_file_paths=%w{./factories./test/

  10. ruby-on-rails - 如何在我的 Rails 应用程序 View 中打印 ruby​​ 变量的内容? - 2

    我是一个Rails初学者,但我想从我的RailsView(html.haml文件)中查看Ruby变量的内容。我试图在ruby​​中打印出变量(认为它会在终端中出现),但没有得到任何结果。有什么建议吗?我知道Rails调试器,但更喜欢使用inspect来打印我的变量。 最佳答案 您可以在View中使用puts方法将信息输出到服务器控制台。您应该能够在View中的任何位置使用Haml执行以下操作:-puts@my_variable.inspect 关于ruby-on-rails-如何在我的R

随机推荐