Apple 是不是允许使用套接字在两个 iOS 应用程序之间进行通信?
Posted
技术标签:
【中文标题】Apple 是不是允许使用套接字在两个 iOS 应用程序之间进行通信?【英文标题】:Does Apple permit the usage of socket for communication between two iOS apps?Apple 是否允许使用套接字在两个 iOS 应用程序之间进行通信? 【发布时间】:2019-05-14 13:57:51 【问题描述】:所以基本上我在同一台设备上安装了两个 ios 应用程序,它们需要通过相互发送数据来进行通信。我不想使用 URL 方案或通用链接,因为这两个会在 UI 中打开另一个应用程序,而不是在后台相互发送消息。目前,我有一个使用 unix 套接字连接的解决方案,方法是将一个应用程序绑定到特定端口并让另一个应用程序连接到它。这很好用,但我只是想知道苹果是否允许使用它。 请注意,这两个 iOS 应用程序并非来自同一个开发人员,因此在这种情况下,任何其他依赖于 App Group 的应用程序都无法正常工作。
Apple 会允许在这种情况下使用套接字吗? 编辑:其中一个应用程序在后台运行是有效的,所以后台执行不是问题
【问题讨论】:
知道的唯一方法是尝试通过 AppStore 获取它。在这种情况下,没有人知道 Apple 会或不会允许什么。 即使可以,您的应用也可能不会在后台运行。也许您可以使用共享域在您的应用程序之间传输信息? 仅供参考,如果收件人应用程序恰好在后台运行,这可能会起作用,但如果它被暂停或终止(即,显然没有附加到 Xcode 调试器)怎么办? Apple 对允许应用程序在后台执行的操作非常严格(这是一件好事,因为这可以防止应用程序在后台持续运行,从而耗尽我们的电池)。如果您为了进程间通信而保持应用程序处于活动状态,则可能会与 App Store Review Guidelines 的 2.5.4 发生冲突。 对不起,我忘了说我有正当理由为其中一个应用启用后台执行,所以一个应用将在后台运行 【参考方案1】:不,这是不可能的,因为应用程序在进入后台模式时会失去网络连接。我邀请您查看以下与 iOS 应用后台模式相关的 Apple 开发者文档页面:
Background Execution
正如您在页面上看到的那样,当应用程序移动到后台时,操作系统会暂停应用程序,然后会切断包括网络访问在内的多个资源。
但是,该规则有一些例外情况,即语音 ip 应用程序。这些必须在 plist 文件中声明 voip 后台模式,以允许在后台保持网络流打开。
这个问题经常出现在 iOS 或 android 上,不幸的是,到目前为止的答案是否定的,我们可以在应用程序之间进行 tcp 客户端/服务器通信。
【讨论】:
对不起,我忘了说我有正当理由为其中一个应用启用后台执行,所以一个应用将在后台运行... 是的,但是即使应用程序在后台运行,它也会被操作系统挂起并且不会执行代码。默认情况下,应用程序在后台运行,除非您在 plist 中启用 UIApplicationExitsOnSuspend 标志,在这种情况下应用程序将退出。【参考方案2】:只要您的一个应用程序有权在后台运行,这是完全可行的。这样的例子是音乐应用程序。 Spotify 用他们的“app-remote”SDK 做同样的事情。
【讨论】:
以上是关于Apple 是不是允许使用套接字在两个 iOS 应用程序之间进行通信?的主要内容,如果未能解决你的问题,请参考以下文章
“使用 Apple 登录”是不是允许应用向后兼容 iOS 12 及更低版本?
Apple 是不是允许将 iOS 应用程序强制更新到较新版本?
iOS 的 8 iCloud Drive 是不是允许不同的用户共享文件?