我一直在研究如何在应用程序之间安全地共享数据。在我深入研究使用错误方法的实现之前,我想获得一些有关处理此问题的正确方法的信息。仅仅因为你可以做某事并不一定意味着你应该做某事。
用户案例:我正在开发一套语言学习应用程序,该应用程序具有由数百个音频文件和 json 文件组成的共享音频文件库,其中包含与语言相对应的重要数据。我希望用户在使用我们套件中的另一个应用程序时不必重新下载语言包。
1. 应用程序扩展 - 文档提供程序非 UI 变体
根据文档:
文件提供程序扩展允许通过打开和移动操作访问主机应用程序沙箱之外的文件。此扩展(有时在此处缩写为文件提供程序)还允许主机应用程序下载文件,而无需提供文档选择器视图控制器。此功能允许主机应用程序使用安全 URL 书签访问以前打开的文档,即使这些文件不再存储在设备上。
从表面上看,这似乎是一个非常可靠的解决方案。我主要担心的是最后几行,其中指出应用程序可以下载不再存储在设备上的文件。我希望将文件存储在设备本地以防止不断下载。如果文档提供程序确实在本地存储文件并允许组中的各个应用程序访问这些文件,那么我认为这可以工作。
2. 共享钥匙串访问
允许您将数据安全地存储到应用程序套件中的其他应用程序可以访问的共享钥匙串。共享钥匙串访问权限的所有应用程序必须使用相同的应用程序 ID 前缀。有关共享钥匙串访问的实际示例。
我稍微研究了一下这个文档,我认为这可能是最合适的。我对此解决方案主要关心的是上传的数据是否有大小限制以及是否允许 mp3/ogg/json 文件类型。我发现这个解决方案的大多数示例/用途都指向共享字符串和小数据,我不确定它是否会处理 json 或音频文件等大数据。
我还发现这个仓库这显然使得处理钥匙串变得更容易:
3. 自定义粘贴板
自定义粘贴板最适合在两个应用程序之间半私密地共享自定义数据。自定义粘贴板使用唯一的名称进行标识。它们可以在创建它们的应用程序之外保留数据,从而允许粘贴板在应用程序终止后甚至重新启动设备后保留数据。
在向粘贴板写入或读取数据时,必须指定粘贴板类型。粘贴板类型通常使用统一类型标识符 (UTI) 来标识进入粘贴板和从粘贴板检索的数据类型。有关更多信息,请参阅 Apple 的 UIPasteboard 类参考文档。
以上文档摘自这个帖子
我对这个解决方案主要担心的是它可能有点黑客行为。从逻辑上讲,粘贴板看起来像是临时保存数据并允许在应用程序之间共享的东西,而我正在寻找的解决方案需要更多的是永久解决方案。
我希望获得有关在应用程序之间共享这些类型文件的最佳实践的任何信息。我认为这里省略了很多其他解决方案,因此如果有更好的替代方案,我希望提供一些相关信息。如果发生这种情况,我在这里列出的解决方案之一是解决此问题的好方法,我很想了解更多有关您与他们合作的经验的信息,以及我对他们的担忧是否有效,或者无需担心。
提前谢谢。一如既往,写得好的答案会获得投票;)