【问题标题】:Sharing data between 2 Android applications在 2 个 Android 应用程序之间共享数据
【发布时间】:2021-05-23 23:07:45
【问题描述】:

类似的回答我也经历过很多,但是最近因为很多事情都变了,所以想再问一遍。

我有一个将数据存储在共享首选项中的应用程序 A。我希望应用程序 B 能够访问应用程序 A 存储在共享首选项中的数据。

目前的调查结果 -

  • 我们不能将 WORLD_READABLE 用于共享首选项,因为它有 已弃用。
  • 我们不能使用 sharedUserId 来共享数据,因为它已经 已弃用。
  • 我还了解到使用相同密钥签名的应用程序可以访问每个 别人的代码和数据。但是我们可以通过这样做来访问数据吗? (或者我们还需要在签名的同时做其他事情吗? 过程?)。如果是,怎么做?

其中一种解决方案是使用 Content Providers 共享数据(数据源是 Shared Preferences)。 还有其他方法可以共享数据吗?

【问题讨论】:

    标签: android sharedpreferences ipc


    【解决方案1】:

    我还了解到使用相同密钥签名的应用可以访问彼此的代码和数据

    仅通过sharedUserId

    还有其他方法可以共享数据吗?

    你可以:

    • 让一个应用公开另一个应用启动的服务并通过Intent extras 传递数据
    • 让一个应用公开另一个应用绑定的服务并通过 AIDL 参数传递数据
    • 让一个应用向另一个应用发送显式广播Intent,并在Intent extras 中包含数据
    • 让一个应用使用Intent extras 中包含的数据在另一个应用中启动一个活动

    ContentProvider 解决方案一样,这些选项可以通过Android 的权限系统进行保护。如果您仔细设置自定义权限,将protectionLevel 设置为signature,这些应用程序将能够相互通信,但其他应用程序将无法侵入这些通信通道。

    当然,另一种选择是只拥有一个应用程序。

    【讨论】:

    • 感谢您的回答。在上面提到的所有 4 个解决方案中,流程都是从要共享数据的应用程序开始的,如果我错了,请纠正我。我的用例是访问其他应用程序已经存储的数据,内容提供者允许我这样做。我的用例基本上是用于访问令牌和其他详细信息的 SSO 实现。
    • @KashishMalhotra 如果用于帐户数据,您是否考虑过 AccountManager? developer.android.com/training/id-auth/custom_auth
    • @KashishMalhotra:“在上面提到的所有 4 种解决方案中,流程从想要共享数据的应用程序开始,如果我错了,请纠正我”——第二个(绑定到service) 更像是一种“拉”机制,而不是“推”,这似乎是您想要的。
    • @GabeSechan 谢谢你的建议,我通过了。我们已经有一个正在运行的应用程序,我们想让另一个应用程序运行并使用 SSO。由于大多数用户已经登录到第一个应用程序,我们将无法使用第一个应用程序创建自定义帐户,对吗?
    • 另外,我想知道像亚马逊这样的公司如何通过他们的应用程序实现 SSO,我在任何地方都找不到。他们没有列出自定义帐户,所以我最好的猜测是这些应用程序正在它们之间共享数据。 CMIIW。如果有人可以向我指出一些相关资源,那就太好了。
    猜你喜欢
    • 2011-10-26
    • 1970-01-01
    • 2021-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多