问题标签 [ios-background-mode]
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 - iOS 12 无故终止后台应用
从 iOS 12 开始,CLLocationManager 不再在后台无休止地运行。该应用程序会在随机时间终止而没有崩溃日志。这在 iOS 12 之前运行良好。
为了演示这个问题,我在这里创建了一个示例应用程序
演示应用程序只是启动一个 CLLocationManager 并让它在后台运行。在后台运行时,我们通过记录它来跟踪它。问题是该应用程序被iOS终止。创建演示应用程序来演示此问题。
重现步骤
- 在设备上运行应用程序
- 对位置管理器的访问权限
- 将应用程序置于后台
- 等待 1-48 小时
结果:
- 该应用程序已终止
应用程序在随机时间后无故终止。
预期结果:
- 该应用程序仍在运行。
它应该如何工作
苹果工程师证实了这一点:
一旦 CLLocationManager 更新在前台启动并且您完成了所有工作以使其在后台运行,位置更新应该在后台无休止地运行,直到:
- 应用程序是强制退出
- 设备已重新启动
- 应用停止位置更新
- app 释放 CLLocationManager 对象
- 应用程序崩溃
- iOS由于内存不足而终止应用程序,
- locationManager 对象被释放、过度释放或覆盖。你应该确保你的视图控制器没有被实例化,然后重置 locationController 类。如果在应用程序处于后台时发生这种情况,您将重新启动更新,这将导致应用程序最终被暂停。您应该确保 locationController 是一个单例。
- 应用程序崩溃。检查您正在测试的设备上是否有崩溃日志
- 由于内存不足,iOS 正在终止应用程序。在这种情况下,您会在显示您的应用程序被终止的设备上找到 JetsamEvent 日志。您可以检查时间戳并找到您的应用程序停止工作的时间。
ios - 当 iOS 应用收到推送通知且状态为关闭时触发 API 调用
制定解决方案 当在 iOS 中收到推送通知时,客户端应用程序应确认服务器已传递消息。为了实现这一点,我应该在 iOS 应用程序中收到通知时调用确认 API,以便在应用程序状态关闭但不在后台/活动状态时调用。需要知道触发了哪个方法以及如何在不打开应用程序的情况下调用 API。我也在使用后台模式。
能够调用 API 以获取活动/后台状态,但不能处于非活动状态。
请帮帮我。
react-native - React-native:在 20 秒后执行发布请求,即使应用程序在后台运行
当应用程序在前台运行时,我使用 setTimeout 在 20 秒内成功执行 POST 请求,如下所示:
但是,如果同时用户将应用程序置于后台,例如按下主页按钮,那么我的帖子将不会在 20 秒后被触发。不过,在 Android 上,我检查了是否超过 20 秒,然后我打开应用程序(使其位于前台),然后立即执行 post。(尚未在 ios 上进行测试以查看是否会发生同样的事情)。所以我有以下问题:
1) 同样的行为也发生在 IOS 端?
2)如果超时时间为 15 分钟而不是 20 秒,我是否应该期待完全相同的行为?
3)我该如何解决这个问题?一段时间后我需要联系一个端点,并且当应用程序在后台使用 setTimeout 时不能这样做。
在这种情况下,使用react-native-background-task之类的库没有帮助,因为我需要在 20 秒(或 10 分钟等)之后执行代码,而不是像 15 分钟+这样的未来某个时间
background - 锁屏时的蓝牙后台模式IOS
我想在IOS上实现后台蓝牙扫描。当应用程序进入后台模式时,它会调用实现 DiscoveredPeripheral 功能的 TestCentralManagerDelegate。当检测到新的蓝牙外围设备时触发。如果检测到新的蓝牙设备,则应用程序读取字典广告数据中显示的制造数据(作为 DiscoveredPeripheral 函数的参数)。制造数据通过调用ManufactureData = adsData["kCBAdvDataManufacturerData"].ToString()获得。制造数据的发现是在两个不同的 iPhone 5s 和 6 上测试的,它们的 iOS 12.1 相同。当应用程序进入后台模式时,我锁定了屏幕。在 iPhone 5s 的情况下,我观察到每次触发 DiscoveredPeripheral 函数时都会找到 ManufactureData。每次我得到 ManufactureData = null 时,iPhone 6 都不是这样。值得一提的是,如果屏幕未锁定,两种情况下都会收到制造数据。
我不明白为什么 iPhone 6 找不到 ManufactureData,而 iPhone 5s 却找不到。我会接受手机具有不同操作系统的事实,这意味着不同的响应,但在我的情况下,情况并非如此。对于更好地理解上述问题的任何帮助,我将不胜感激。
这是我使用 Xamarin.iOS 的代码。
ios - iOS中的不同背景模式
为了识别我的应用程序进入后台模式[单击主页按钮],我使用此功能:
但是我如何识别我的应用程序进入了应用程序切换模式[两次短主页按钮点击]?applicationDidEnterBackground
在这种情况下不调用该方法。
ios - 如何检查是什么杀死了我的音频放大器应用程序?(ios,目标 C)
我有一个 ios 应用程序,它从手机麦克风获取音频,实时对麦克风数据进行一些处理并将结果发送到耳机
在项目 -> 功能 -> 背景模式中,我选择了音频、AirPlay 和画中画
我希望应用程序在后台(用户按下主页按钮)和使用锁定按钮锁定手机屏幕时继续读取麦克风数据并将音频发送到耳机
所有这一切都在发生,所以我认为应用程序权限没有任何问题,但我注意到应用程序在后台运行后,它突然被杀死,通常不到一分钟
我设法在 xcode 控制台的后台捕获了一个应用程序实例被杀死,消息是
在谷歌中环顾四周表明这仅仅意味着该应用程序被操作系统使用 SIGKILL 销毁
有什么方法可以找出应用程序被杀死的原因吗?让应用程序在后台长时间运行是不可能的吗?在我启用Audio, AirPlay and Picture in Picture
背景模式之前,一旦我按下主页按钮或屏幕锁定按钮,音频就会停止。我假设由于当我按下主页按钮时音频继续运行,这意味着我确实能够在需要时在后台运行麦克风/扬声器,并且有音乐播放器和录音机应用程序在后台工作直到用户专门关闭它们。
我怎样才能找出我的应用程序自动关闭的确切原因,以及我可以做些什么来让它无限期地在后台运行,直到用户关闭它?
react-native - 如何在 react-native iOS 的后台继续下载多个文件(AWS 服务器图像)
我创建了一个应用程序,用户可以使用在 Android 中完美运行的 react-native-fs 一键下载多个图像。但是在 iOS 中,当应用程序处于非活动状态时,下载会停止,用户必须重新开始下载。
},function (err) { if (!err) { callback(true) } else { callback(false) } }));