与共享扩展程序通信/打开包含应用程序[关闭]

Posted

技术标签:

【中文标题】与共享扩展程序通信/打开包含应用程序[关闭]【英文标题】:Communicating with/opening Containing app from Share extension [closed] 【发布时间】:2014-08-12 01:05:08 【问题描述】:

这是我尝试过但没有奏效的方法:

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

这是我认为行不通的方法:

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

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

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

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

【问题讨论】:

你是否也考虑过UIWebView的方式? ***.com/a/24614589/102008 啊!我已经翻阅了几十次,但从未真正彻底阅读过它,以至于无法看到他在说什么。似乎是另一种可行(如果不是 100% 可接受)的解决方法。谢谢! 这是一个很好的问题,如何关闭。 :(我不得不为此搜索很多 看看关了这个的人也没有ios经验 您找到解决方案了吗?我知道当用户未通过身份验证时,Pinterest 共享扩展也会打开包含应用程序,因此必须有办法做到这一点,苹果应该在审查过程中允许这样做。 【参考方案1】:

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

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

    在共享扩展中创建一个后台 NSURLSession。 开始下载任务。 调用 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 方法相比,此方法的主要优点是不需要额外的用户交互。更多细节会在我继续实验时提供。

【讨论】:

哇,时髦的方法……但我认为 Apple 的评论者不会允许这样做。 您能否确认使用这种方法的应用程序已成功获得AppStore批准? 这也不起作用.. Mac 应用有没有等效的方法?

以上是关于与共享扩展程序通信/打开包含应用程序[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

iOS 共享扩展关闭键盘

Android跨进程通信

基于WebRTC开源框架的实时视频聊天项目,搭建私人实时通信服务

将文件从 iOS 应用程序扩展保存到包含的应用程序

核心数据:将数据访问与应用程序和包含的扩展同步

Go中多协程协作之sync.Cond