通过/打开包含应用程序从共享扩展

这是我已经尝试过,没有工作:

  • 使用openURL尝试打开包含的应用程序

这是我所认为的不起作用的:

  • 使用本地通知来提供包含应用程序的链接(通过扩展程序创build本地通知)

以下是我正在考虑的选项:

  • 使用一个UIDocumentInteractionController和一个自定义的文件扩展名types来提供一个链接到我包含的应用程序(和我包含的应用程序只)
  • 启动一个“假的”NSURL会话以获得以下function:在iOS中,如果您的扩展在后台任务完成时未运行,系统将在后台启动您的包含应用程序并调用应用程序:handleEventsForBackgroundURLSession:completionHandler:app delegate method 。

UIDocumentInteractionController被确认可以在Xcode 6.5中工作,但是这个stream程有点怪异。 NSURL的东西应该可以工作,但它也有点可疑。 有没有人有任何其他想法让我的包含应用程序打开从共享扩展,或从共享扩展与它沟通的想法?

我已经确认NSURLSession的方式(上面的“考虑”选项下的第二个项目符号)确实有效。 我仍然在努力解决一些问题,但这里有一些基础知识。 使用这种方法,您确实可以从共享扩展中打开您的应用程序。

这种方法需要3个主要步骤,如下所示:

  1. 在共享扩展中创build背景NSURLSession。
  2. 开始下载任务。
  3. 调用exit(0)。

请确保您下载的东西需要足够长的时间,以便在下载任务完成之前分机终止。

 NSString *address = @"https://googledrive.com/host/0B5zObXR9UzgmbFpob2J5eXpjNXc/file3m"; self.mySession = [self configureMySession]; NSURL *url = [NSURL URLWithString:address]; NSURLSessionTask *myTask = [self.mySession downloadTaskWithURL:url]; [myTask resume]; exit(0); 

然后,在你的包含应用程序的UIApplicationDelegate类中,实现

 application:handleEventsForBackgroundURLSession:completionHandler: 

方法。 当您的扩展终止后下载任务完成时,将调用此方法。 那么,在这个方法中,你可以打电话

 [[UIApplication sharedApplication] openURL:url]; 

或者在你的应用程序中做一些其他的东西。

这种方法的主要问题是在分机终止的时间和包含应用程序启动的时间之间有延迟。 这个方法比UIDocumentInteractionController方法的主要优点是不需要额外的用户交互。 随着我继续试验,更多细节将会出现。