问题标签 [ios-app-suspended-state]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ios - 终止/暂停时重大更改位置 API 的行为?
这是CLLocationManager文档中使用startMonitoringSignificantLocationChanges描述应用程序行为的部分:
如果您启动此服务并且您的应用程序随后终止,则系统会在新事件到达时自动将应用程序重新启动到后台。在这种情况下,传递给 application:didFinishLaunchingWithOptions: 应用程序委托方法的选项字典包含键 UIApplicationLaunchOptionsLocationKey 以指示您的应用程序是由于位置事件而启动的。重新启动后,您仍然必须配置位置管理器对象并调用此方法以继续接收位置事件。当您重新启动位置服务时,当前事件会立即传递给您的委托。此外,即使在您启动位置服务之前,您的位置管理器对象的位置属性也会填充最新的位置对象。
所以我的理解是,如果您的应用程序终止(并且我假设您不从applicationWillTerminate调用stopMonitoringSignificantLocationChanges ),您将被application:didFinishLaunchingWithOptions的UIApplicationLaunchOptionsLocationKey参数唤醒。此时,您创建CLLocationManager,调用startMonitoringSignificantLocationChanges并在有限的时间内进行后台位置处理。所以我对这一点很好。
上一段只讨论了应用程序终止时会发生什么,并没有建议您在应用程序暂停时做什么。didFinishLaunchingWithOptions的文档说:
该应用程序在后台跟踪位置更新,已被清除,现在已重新启动。在这种情况下,字典包含一个键,表明应用程序由于新的位置事件而重新启动。
建议您仅在您被终止后启动应用程序(由于位置更改)时才会收到此呼叫。
然而,位置感知编程指南中关于重大变化服务的段落有以下说法:
如果您保持此服务运行并且您的应用程序随后被暂停或终止,则该服务会在新的位置数据到达时自动唤醒您的应用程序。在唤醒时,您的应用程序将进入后台并给予少量时间来处理位置数据。因为您的应用程序在后台,所以它应该做最少的工作并避免任何可能阻止它在分配的时间到期之前返回的任务(例如查询网络)。如果没有,您的申请可能会被终止。
这表明如果您的应用程序已暂停,您会被位置数据唤醒,但没有提及您是如何被唤醒的:
- UIApplicationDelegate是否收到一个回调,告诉我我正在从挂起状态恢复到后台状态?
- 位置管理器(在应用程序暂停时被冻干)是否开始接收locationManager:didUpdateToLocation:fromLocation回调?
- 我是否只需要在我的didUpdateToLocation消息中实现代码来检查应用程序状态并在后台模式下进行最少的处理?
在写这篇文章的过程中,我想我可能刚刚回答了我自己的问题,但如果我对这个问题的理解得到更有知识的人的证实,那就太好了。
ios - 如何从挂起的应用程序状态唤醒 iOS 设备?
我目前正在尝试创建一个 Flutter 应用程序,该应用程序可以在由另一个用户引起的特定(未知)时间振动用户。我针对 Android 版本的解决方案是使用 Firebase Cloud Messaging 启用推送通知,同时也未优化电池(针对应用程序)。当它是高优先级有效负载将处理 App Doze(空闲待机)并且它在 android 上运行良好时,我听到了推送通知。我最近在 iOS 版本上收到了推送通知,但通知似乎并没有唤醒设备(并允许它监听 Firebase Firestore 上的变化,以便它可以振动)。如果收到推送通知,一种解决方案是运行代码(振动 API),但我不确定如何执行此操作。有没有办法让应用程序从挂起的应用程序状态中唤醒,以便它可以检查 Firestore 上的更改?目前,当应用程序处于后台时它可以工作,但这还不够。
如果有帮助,这是我的通知负载:
我目前正在使用contentAvailable: true
,因为我听说它可以用来解决这个问题。我也在使用该vibration.dart
插件,它似乎无法让我像在 Android 上那样完全控制振动。在 xcode 的功能上,我启用了 backgroundfetch、后台进程、远程消息传递和推送通知。但是,我没有添加任何info.plist
关于这些的具体内容,因为我不确定后台获取和进程是否是解决方案。
编辑:我了解到,当另一个应用程序在它之后打开时它也被暂停/不工作(直到你返回我的应用程序)。
ios - UNLocationNotificationTrigger 仅在特定时间范围内
目前,当我的 iOS 应用程序处于挂起状态时,当我穿过地理围栏区域时,我会从 UNLocationNotificationTrigger 获得正确的触发器。但是,我需要在预订时间前几个小时显示通知。无法保证用户在预订后会打开应用程序
例如,假设我的预订时间是下午 4 点,那么我希望仅当用户在下午 3 点到 4 点之间而不是下午 3 点之前穿过地理区域时才触发地理通知。
ios - 每 5 到 10 分钟将应用程序从挂起状态唤醒到后台的任何方法
我正在研究必须跟踪用户位置的项目,我正在使用后台模式在后台获取位置但是当应用程序在后台并且用户关闭他的位置时,我必须告诉服务器“位置已关闭”和“应用程序在后台”每 5 分钟一次。即使应用程序在后台,应用程序也应该与服务器持续工作。
(申请在后台)
1)静默推送通知工作正常,我调用了我想要的 API。
2)背景位置工作正常。
以下问题:当用户关闭位置应用程序在后台无法运行时。
(申请已暂停)
1)静默推送通知很少(一个小时两次)内容可用= 1和优先级高。
2) 发出声音通知,但并非每次都调用 API。
3) 尝试过后台抓取,但 BackGroundFetch 也不保证每 5 分钟调用一次 API。
每 5 分钟在后台调用 API 的任何解决方案。
ios - 冷启动和热启动有什么区别?
这些是虚构的吗?冷是否意味着应用程序被杀死。温暖意味着应用程序在内存中?
ios - iOS15.01 的地理围栏和重要位置更新问题
是否有人在 IOS 15 中遇到触发地理围栏事件或重要位置更新事件被暂停和后台状态的问题,
我面临一个问题,该功能大部分时间都在工作,有时地理围栏和位置更新不会触发任何回调
谢谢