我们正在使用Swift设置共享扩展。用户发布后,我们会使用文件URL信息,并使用Almofire在后台进行多部分上传到服务器。
let configuration = NSURLSessionConfiguration.backgroundSessionConfigurationWithIdentifier("SomeName")
configuration.sharedContainerIdentifier = "SomeValidShare"
manager = Alamofire.Manager(configuration: configuration)
let authHeaderString = authHeader();
manager?.upload(.POST, url, headers: authHeaderString, multipartFormData: {
multipartFormData in multipartFormData.appendBodyPart(fileURL: videoUrl, name: "file")
},
encodingCompletion: { encodingResult in
switch encodingResult {
case .Success(let upload, _, _):
etc
我们从连续端点帖子所需的上传中获取信息。
完成此操作后,将使用
调用容器应用程序func application(application: UIApplication, handleEventsForBackgroundURLSession identifier: String, completionHandler: () -> Void)
但有时在上传的Success
在共享扩展程序中运行之前会调用此项,并且我们无法访问返回的JSON以从容器应用程序中进行更多调用。
问题:
1)如何确保在应用程序调用之前共享扩展中的返回信息可用?
2)当用户启动应用程序时,有没有办法让应用程序从此后台会话中获取会话/任务代理?我们已尝试获取会话,但是我们收到一个控制台错误,指出此会话已存在并且未调用委托。
3)有没有办法弄清楚后台会话是否在应用程序的事件处理程序例程中成功了?
4)有没有办法在事件处理程序例程中获取结果数据?
let configuration = NSURLSessionConfiguration.backgroundSessionConfigurationWithIdentifier("\SomeName")
let session = NSURLSession(configuration: configuration, delegate: self, delegateQueue: NSOperationQueue.mainQueue())
那么建议如何确保获得共享扩展程序的后台上传结果,然后通过共享用户默认值将其转移到容器应用程序?