问题标签 [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.

0 投票
0 回答
29 浏览

ios - 如何在不使用“位置更新”功能的情况下检测用户何时从多任务 UI 终止 iOS 应用程序

如何在不使用“位置更新”功能的情况下检测用户何时从多任务 UI 终止 iOS 应用程序。我从 Apple 的文档中知道,在这种情况下不会调用 AppDelegate 中的“applicationWillTerminate”函数。 iOS 应用程序编程指南

暂停的应用程序在终止时不会收到通知;系统杀死进程并回收相应的内存。如果应用程序当前正在后台运行且未挂起,则系统会在终止之前调用其应用程序委托的 applicationWillTerminate:。设备重启时系统不会调用该方法。

除了系统终止您的应用程序外,用户还可以使用多任务 UI 显式终止您的应用程序。用户发起的终止与终止暂停的应用程序具有相同的效果。应用程序的进程被终止,并且没有通知发送到应用程序。

但是,当我们设置“位置更新”功能时,allowBackgroundLocationUpdates = truestartUpdatingLocation()就会调用函数“applicationWillTerminate”。我的问题是,是否有任何解决方法或任何其他功能可以在不使用“位置更新”的情况下调用“applicationWillTerminate”。

0 投票
0 回答
146 浏览

ios - 在什么情况下,应用程序可以在设备重启后但在用户解锁设备之前运行?

我们正在开发一个可以接收静默推送通知的应用程序。收到通知后,应用程序会进入后台并执行一些代码。在此代码执行期间,应用程序需要访问受保护级别kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly保护的钥匙串中的项目。根据这篇 SO 帖子如果 UIBackgroundModes 中定义的远程通知和新的推送通知来了,iOS 在重启后是否在后台启动应用程序?)和Apple 的应用程序生命周期图,应用程序在设备重启后处于未运行状态,因此可以在用户至少将其启动到前台一次之前,不会将其放入后台。

在此处输入图像描述

但是,Apple 还提供了保护级别kSecAttrAccessibleAlways。如果一个应用程序在首次启动后只能在后台运行,那么kSecAttrAccessibleAlways属性的用途是什么?用户不是必须先解锁设备才能让应用程序在后台运行吗?在什么情况下,应用程序可以在设备重启后但在用户解锁设备之前运行?Apple 还为应用程序沙箱容器中的文件提供保护级别NSFileProtectionCompleteUntilFirstUserAuthentication。在什么情况下,应用程序甚至可以在用户重新启动后解锁设备之前尝试访问其文件?非常感谢您对此的任何见解,谢谢。

0 投票
0 回答
243 浏览

ios - iOS后台获取不断启动应用程序

我正在开发一个 iOS 应用程序,该应用程序通过 启用了Background FetchInfo.plist大约一年。发布了多个启用后台获取的版本,但几周前,需要后台获取的功能被删除了。该UIBackgroundModes密钥已从 中完全删除Info.plist,并且该应用程序已发布到 App Store。但令人惊讶的是,遥测表明该应用程序仍在后台定期启动!这是实际应用程序委托源代码的片段:

有没有人经历过类似的事情?UIBackgroundModes根据文档,如果字典不包含正确的值,应该不可能启动应用程序。在这种情况下,根本没有打开后台模式,但应用程序会定期在后台启动以执行获取...

遥测数据表明它仅发生在 iOS 11 上,但这可能是巧合,因为只有一小部分安装基数在 iOS 9/10 上。

顺便说一句,已向 Apple 发送了有关此问题的源级协助请求,但他们尚未回复;但也许其他应用程序的开发者以前也遇到过这个问题。

0 投票
0 回答
201 浏览

ios - 应用程序未使用静默通知从终止状态启动

我想在收到静默通知时将用户位置更新到服务器。我已启用推送通知和后台模式作为远程通知和位置。但是

-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))handler

当应用程序处于终止或未运行状态时,不会调用 my 。我正在通过将位置数据发送到 pubnub 来对此进行测试。主要问题是,当我开始编写这部分代码时,它工作得很好,但过了一段时间它就停止了工作,在那之后直到现在我都在努力解决这个问题。任何帮助将不胜感激。

这是我的代码:

// 在应用程序委托中

//远程通知模式

我正在使用 Firebase 使用邮递员发送通知。

这是我的通知格式:

0 投票
1 回答
942 浏览

ios - 应用程序在后台模式下执行 180 秒后重新启动。通过在功能中启用后台模式

我为我的要求制作了一个示例应用程序,代码如下

设计:包含 1 个按钮 1 个标签

在此处输入图像描述

.h 文件代码

.m 文件代码

问题是,在后台运行此应用程序时(通过按主页按钮并最小化 iPhone 中的应用程序),即使在功能中启用后台模式,它也会在 180 秒后重新启动。我需要将其延长至 4 小时。请帮我。

0 投票
1 回答
269 浏览

ios - 如何知道蓝牙设备连接/断开状态回调到后台运行的iOS应用程序?

根据苹果文档,在后台运行的应用程序无法接收回调,除了基于位置、VOIP、Newstand、音乐播放器或启用 APNS 的应用程序。在这种情况下如何接收连接状态回调?该应用程序将 AVAudioSession 实例用作:

并以如下方式收听通知:

这在应用程序的启动中被调用。

0 投票
0 回答
93 浏览

ios - 在没有任何后台模式的情况下无限运行后台任务

我有一个应用程序不断收集设备的传感器数据并将其存储在 sqlite 数据库中。所有这一切都根据我设置的计时器不断发生,如下所示:

- 每 1 秒应用程序收集传感器数据

-应用程序每 30 分钟将收集到的数据发送到 aws iot

- 每 60 分钟调用一次 api 以刷新上述计时器值

现在,要求是即使应用程序进入后台状态或手机进入睡眠状态(屏幕关闭并锁定),所有这些都应该继续进行。我四处搜索,发现后台任务可以帮助解决这个问题。因此,我实现了一个简单的后台任务,该任务在应用程序进入后台状态时启动。现在,即使手机被锁定或应用程序处于后台,所有这些功能也能正常工作。我没有在我的项目中启用任何后台模式功能。

在阅读了很多之后,我认为这种行为被Apple拒绝了。就我而言,这会是问题吗?苹果会因为我的后台任务在没有启用任何后台模式的情况下无限运行而拒绝我的应用程序吗?

需要对此进行一些澄清。非常感谢。

0 投票
0 回答
64 浏览

ios - 只有当 iPhone 连接到系统(任何操作系统:Windows、Mac 或 Ubuntu)时才会执行后台任务,否则不会执行

该应用程序处于后台,并在与 BLE 设备断开连接时收到回调,之后应用程序必须等待一段时间(1 分钟)然后执行一些代码。该应用程序即使在后台运行并且只是连接到系统(Mac、Windows 或 Ubuntu)时也能按预期运行,但在其他情况下则不然。此行为仅在 iOS 11.3 上可见,在 10.3 上不可见。

当app处于后台,并且在BLE设备断开连接时收到回调,app注册一个定时器为1分钟的后台任务,之后会进行一定的api调用。

以下是我的观察:

  1. 如果设备连接到系统,所有后台任务和 api 调用都会优雅地进行。
  2. 如果设备未连接到系统,则后台任务和 api 调用不会在 iOS 11.3 中执行,但在 10.3 上运行良好(如果计时器超过 10 秒在 10.3 上运行良好,但在 11.3 上运行良好)
  3. 当我进行无线调试时,与 iPhone 的连接会在几秒钟后自动丢失(>10)。(在 11.3 中观察到此行为)
  4. 当计时器小于或等于 10 秒时,该应用程序在所有版本上都能完美运行,即使它没有连接到任何系统。

这是 AppDelegate 中用于在后台启动计时器的代码:

当与 BLE 设备断开连接时,我通过注册到后台任务来启动计时器:

0 投票
2 回答
1289 浏览

ios - 屏幕关闭/设备在 iOS 中锁定时计时器不运行

该应用程序在后台,它会在与 BLE 设备断开连接时收到回调,之后应用程序必须等待一段时间(1 分钟)然后执行一些代码。如果屏幕打开,即使在后台,应用程序也会按预期运行。但如果屏幕关闭,则计时器无法正常工作,并且应用程序无法按预期执行。

这是 AppDelegate 中用于在后台启动计时器的代码:

当与 BLE 设备断开连接时,我通过注册到后台任务来启动计时器:

0 投票
1 回答
1109 浏览

ios - 来自 iOS 后台 URLSession 的 REST 请求使用 APNs

2018 年 5 月 25 日更新:

我在这里阅读了 Rob 的回答后替换datatask为: https ://stackoverflow.com/a/44140059/4666760 。当应用程序在后台运行时,它仍然不起作用。downloadTask


你好

我需要一些有关 iOS 后台任务的帮助。我想使用 Apple 推送通知服务 (APN) 在后台唤醒我的应用程序,以便它可以对我的服务器进行简单的 RESTful API 调用。当应用程序在前台而不是在后台时,我可以让它工作。我想我的配置有问题URLSession,但我不知道。应用程序和服务器的完整代码位于下面链接的我的仓库中。拜托,克隆它并做任何你喜欢的事情 - 我只是想要你的帮助:)

https://github.com/knutvalen/ping

AppDelegate.swift应用程序中监听远程通知:

带有背景配置的RestController.swift句柄:URLSession