【问题标题】:How can I make my iOS apps talk to each other?如何让我的 iOS 应用程序相互通信?
【发布时间】:2011-08-15 06:58:31
【问题描述】:

我有几个 iOS 应用程序,我需要它们相互了解。更准确地说,我需要知道是否已经安装了我的某个应用。

我考虑注册一个自定义 URL 方案(例如 my-app-present://),以便检查是否支持自定义方案,如果支持,我会知道设备上已经有我的一个应用程序。但这不起作用,因为方案是通过Info.plist 注册的,并且应用程序在有机会检查其是否存在之前就注册了该方案。换句话说,检查总是成功的。

然后我想在临时目录中创建一个文件,但是 NSTemporaryDirectory() 在应用程序沙箱中返回一个文件夹,所以这也行不通。我也考虑过钥匙串,但看起来每个应用程序在 iOS 上都有严格独立的钥匙串。

我不想浏览正在运行的应用程序列表,也不想使用网络。你还知道一些其他的技巧吗?

【问题讨论】:

  • 实际上,您的许多应用程序可能使用相同的钥匙串,但前提是它们具有您在 iOS Provisioning Portal 中提供给它们的 Bundle Seed ID 时创建新的应用 ID。这只是 P.S.,因为您已经从 @jtbandes 找到解决问题的方法。

标签: ios ipc


【解决方案1】:

自定义 URL 方案方法听起来不错,只要您为每个应用程序设置不同的方案,例如 my-app-1://my-app-2://。然后(我假设这是您已经知道的)您可以使用canOpenURL: 检查是否可以处理 URL(即,您的应用已安装)。

【讨论】:

  • 这实际上是大多数应用程序所做的,他们需要这种互操作性。
  • 谢谢 (+1)。我想过这一点,但我已经为滥用一个 URL 方案而感到尴尬,更不用说其中几个了。但更糟糕的是,每当我发布新应用时,我都必须更新所有应用中的逻辑,对吧?
  • 是的,如果您的所有应用都需要了解所有您的其他应用。如果是这种情况,也许您可​​以将所有 URL 方案存储在服务器上并动态加载它们?
  • 不幸的是,我所有的应用程序都需要知道它们是否首先在设备上。存储在服务器上的应用程序列表可以正常工作,但对于我正在尝试做的事情来说已经有点过火了。
  • 你想做什么?在提出问题时,这总是有用的信息。
【解决方案2】:

如果“互相交谈”意味着您只想检测是否已安装其他应用程序,那么 iHasApp 是一个开源 iOS 框架可能会派上用场。我还没用过。但从描述来看,它似乎是一个不错的选择。

http://www.ihasapp.com/documentation/Classes/iHasApp.html

【讨论】:

  • iHasApp 不再与 App Store 兼容
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-12
  • 1970-01-01
  • 2022-11-23
  • 2012-03-22
  • 2018-04-17
  • 1970-01-01
相关资源
最近更新 更多