我正在构建一个应用程序,用户可以在其中从应用程序和共享扩展启动后台文件上传。用户应该能够监控从主应用程序上传的任何进度。
在从扩展程序启动上传的情况下,我需要创建一个后台会话配置,其 id 与扩展程序中使用的相同,以获取委托调用以监控应用程序中的进度等。
在应用程序中,直到扩展程序退出,我才能执行此操作。苹果文档说https://developer.apple.com/library/prerelease/content/documentation/Cocoa/Conceptual/URLLoadingSystem/Articles/UsingNSURLSession.html
您必须为每个标识符创建一个会话(在创建配置对象时指定)。共享同一标识符的多个会话的行为是未定义的。
我已经验证了这一点。如果我不关闭共享扩展,我可以在主应用程序中创建会话而不会出现任何错误,但我不会收到任何委托调用。当我在切换回主应用程序之前关闭扩展程序时,我可以附加到同一个后台会话并收到委托呼叫。都好。
completeRequestReturningItems:completionHandler:
当我使用in关闭共享扩展NSExtensionContext
时,进程何时退出?
提到
调用此方法最终会关闭应用扩展的视图控制器。
“最终”不是很具体。我如何从主应用程序中确定扩展程序没有运行?
我想出的唯一解决方法是定期在共享容器中写入一个文件,并在超过该时间段的超时后让主upp首先拿起后台会话。但这是一个丑陋的黑客。
如果上传很小,是否有可能在扩展进程运行时上传完成,以便我必须在扩展而不是主应用程序中处理上传的完成?
总结一下:您如何安全地将上传从应用程序扩展传输到应用程序?