我的应用程序有两个版本,一个是免费版,一个是专业版,应用程序数据的内容提供者需要在两者之间共享。
设计时应牢记以下几点
- 任何版本创建的数据都应该立即在另一个版本中可见
- 据我所知,专业版和免费版都不能声明 same content provider in the manifest file
- 牢记最后一点,我需要为免费版和专业版创建单独的提供程序
可能的解决方案:
- 创建两个内容提供者,一个由免费版创建,另一个由专业版创建
- 第一次上线专业版时,如果免费版有数据,复制到专业版
- 无论何时在免费版或专业版中写入任何数据,我都应检查是否存在其他版本的 Content Provider,如果存在则写入两个 Content Provider
- 将 android:protectionLevel 属性设置为“signature”,这样两个版本都可以访问两个 Content Provider
请告诉我这是否合理并遵循共享内容提供商的最佳实践。请分享任何其他执行此操作的方法。
最佳答案
所以这就是我最后做的:
- 我为每个版本创建了两个单独的内容提供者(每个都有单独的权限)并唯一声明它们
- 将他们的“android:exported”设置为“true”以启用跨应用共享内容提供者数据
- 为每个内容提供者(具有读+写访问权限)定义自定义权限以限制对数据的访问
- 对于每个权限定义,我都将“android:protectionLevel” 属性定义为“signature”,这样我的应用程序就可以隐式且安全地相互通信
- 在任何给定版本中,然后我明确要求访问内容提供者在另一个版本中使用 uses-permission android:name="MY_CUSTOM_PERMISSION 元素
结果:
- 这两个版本现在都可以安全隐式地访问彼此的内容提供者
- 当付费版本启动时,它会静默地将所有数据从免费版本复制到付费版本,以准备无缝使用
关于android - 共享内容提供者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15254211/