与共享扩展程序中的/打开包含应用程序进行通信

时间:2014-08-12 01:05:08

标签: ios ios8 ios-app-extension

以下是我尝试过的无效方法:

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

以下是我所想到的不起作用:

  • 使用本地通知提供指向包含应用的链接(从扩展程序创建本地通知)

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

  • 使用UIDocumentInteractionController和自定义文件扩展名类型提供指向我的包含应用程序(仅限我的应用程序)的链接
  • 启动“假”NSURL会话以获得以下功能:在iOS中,如果后台任务完成时您的扩展未运行,系统将在后台启动您的包含应用并调用应用程序:handleEventsForBackgroundURLSession:completionHandler: app委托方法。

UIDocumentInteractionController被确认在Xcode 6.5中工作,但流程有点不稳定。 NSURL的东西应该也可以,但它也有点可疑。有没有人有任何其他想法让我的包含应用程序从共享扩展中打开,或者想要通过共享扩展与它进行通信?

1 个答案:

答案 0 :(得分:5)

我已经确认NSURLSession方式("考虑"选项上面的第二个子弹)确实有效。我还在解决一些问题,但这里有基础知识。使用此方法,您确实可以从共享扩展程序中打开您的应用程序。

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

  1. 在共享扩展程序中创建后台NSURLSession。
  2. 开始下载任务。
  3. 致电退出(0)。
  4. 确保您下载的内容需要足够长的时间才能在下载任务完成之前终止扩展。

    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方法相比,此方法的主要优点是不需要额外的用户交互。我将继续进行实验,将会有更多细节。