iOS Apps共享文档目录

时间:2011-11-11 16:45:01

标签: iphone ios

两个应用程序是否可以访问其他应用程序中的文档,因为它们具有相同的bundle seed id。我知道可以与共享捆绑种子ID(see here)的应用程序共享钥匙串中的项目。

例如,假设您的应用程序具有免费版本和付费版本。有人从免费升级到付费版本后,您是否可以将其数据迁移到付费版本?

1 个答案:

答案 0 :(得分:4)

您无法在应用程序之间共享文档目录。但还有其他沟通渠道。

正如你所提到的,钥匙串是一种可能性。

另一种可能是自定义URL方案。也许有点像这样:

  1. 免费应用程序注册了使用freeapp://方案打开网址的功能。同样,专业版app注册了使用proapp://方案打开网址的功能。使用信息plist中的“URL类型”条目。
  2. 专业应用程序会检查[UIApplication canOpenURL:@"freeapp://goPro"] == YES
  3. 如果属实,专业版应用会调用[UIApplication openURL:@"freeapp://goPro"]
  4. 这将启动免费应用,该应用必须从handleOpenURL实施UIApplication
  5. 免费应用程序将必要的数据打包在一起。如果您愿意,可以使用类似HTTP的参数。您还可以使用NSCoding构建字典并将其序列化为长十六进制字符串。
  6. 免费应用使用[UIApplication openURL:@"proapp://YOUR_DATA_IN_WHATEVER_FORMAT"]
  7. 将数据传回专业应用
  8. 专业版应用从handleOpenURL覆盖其覆盖的UIApplication实施中的网址,并执行必要的数据迁移。
  9. 显然,您希望使用比上述更多的唯一URL方案。

    考虑使用URL将这种类型的数据注入您的应用程序的安全隐患。它可能出于很多目的,但我敢肯定,如果Facebook应用程序提供了一种通过URL来破解帐户设置的方法,有些人会发现在任何地方发布facebookapp://reset_my_account个链接都很有趣。

    奖励提示:URL方案也非常便于弥合本机代码和Web视图之间的差距。我有一些带有嵌入式Web视图的应用程序,显示了我控制下的服务器上的页面。通过从JS设置文档位置,网页可以与应用程序通信。该应用可以拦截网络视图委托中的请求,并使用stringByEvaluatingJavaScriptFromString与网络视图对话。