在两个安卓应用程序之间共享数据

3

我看过很多类似的答案,但由于最近有很多变化,我想再次提问。

我有一个应用程序A,它将数据存储在Shared Preferences中。 我希望应用程序B能够访问应用程序A存储在Shared Preferences中的数据。

目前的发现 -

  • 我们不能使用WORLD_READABLE来共享Shared Preferences,因为它已被弃用。
  • 我们不能使用sharedUserId共享数据,因为它已被弃用。
  • 我还读到说用同一密钥签名的应用程序可以访问彼此的代码和数据。 但是仅通过签名就可以访问数据吗? (还是我们需要在签名过程中做其他事情?)。 如果可以,怎么做?

其中一种解决方案是使用内容提供程序共享数据(数据源为Shared Preferences)。 还有其他分享数据的方法吗?

1个回答

0
我还读到,使用相同密钥签名的应用程序可以访问彼此的代码和数据。
仅适用于sharedUserId。
还有其他共享数据的方法吗?
你可以:
- 一个应用程序公开一个服务,另一个应用程序通过Intent extras传递数据来启动该服务。 - 一个应用程序公开一个服务,另一个应用程序绑定该服务,并通过AIDL参数传递数据。 - 一个应用程序向其他应用程序发送显式广播Intent,并在Intent extras中包含数据。 - 一个应用程序在另一个应用程序中启动一个Activity,并在Intent extras中包含数据。
这些选项与ContentProvider的解决方案一样,都可以由Android的权限系统进行安全保护。如果您仔细设置了自定义权限,并将protectionLevel设置为signature,则这些应用程序将能够彼此通信,但其他应用程序将无法深入其中。
当然,另一个选择是只使用一个应用程序。

感谢您的回答。在上述提到的4种解决方案中,流程始于想要共享数据的应用程序,如果我有误请指正。我的用例是访问其他应用程序已存储的数据,内容提供程序允许我这样做。我的用例基本上是实现SSO以访问令牌和其他详细信息。 - BATMAN
@KashishMalhotra 如果是关于账户数据的话,你考虑过使用AccountManager了吗?https://developer.android.com/training/id-auth/custom_auth - Gabe Sechan
@KashishMalhotra:“在上述4种解决方案中,流程始于想要共享数据的应用程序,如果我错了,请纠正我”--第二种(绑定到服务)更像是一种“拉取”机制,而不是你想要的“推送”。 - CommonsWare
@GabeSechan 感谢您的建议,我已经仔细阅读了。我们已经有一个正在运行的应用程序,并且我们想要使另一个应用程序上线并使用SSO。由于大多数用户已经登录到第一个应用程序中,我们将无法使用第一个应用程序创建自定义帐户,对吗? - BATMAN
另外,我想知道像亚马逊这样的公司如何实现其应用程序的SSO,但我无法在任何地方找到相关信息。它们没有列出自定义帐户,所以我最好的猜测是这些应用程序之间共享数据。如果有人能指引我一些相关资源,那就太好了。 - BATMAN

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接