如何在两个 iOS 应用之间共享应用内购买数据?

Posted

技术标签:

【中文标题】如何在两个 iOS 应用之间共享应用内购买数据?【英文标题】:How to share In-App purchase data between two iOS apps? 【发布时间】:2013-10-04 13:36:18 【问题描述】:

我想将应用内购买的产品标识符从一个应用(例如“App1”)共享到另一个应用(例如“App2”)。两者都在 ios 7 设备上运行。更重要的是,由于“App2”是很久以前发布的,这两个应用程序都有不同的团队 ID。当用户点击“从 App1 恢复购买”按钮时,我希望“App2”解锁某些功能基于用户在“App1”中进行的购买。实现这一目标的最佳方法是什么?

我不想使用 UIDocumentInteractionController 或 UIActivityViewController,因为这需要不必要的用户交互。 无法共享密钥链项目或 iCloud 键值存储,因为这两个应用具有不同的团队 ID。 无法使用两个应用程序可以通过其进行通信的独占服务器。

【问题讨论】:

【参考方案1】:

您无法通过使用 IAP API 来执行此操作。您可以将信息存储在您的服务器上并为用户解锁,但是,这违反了App Store Review Guidelines

Apps utilizing a system other than the In-App Purchase API (IAP) to purchase content, functionality, or services in an App will be rejected.

从技术上讲,如果您检查自己的服务器并通过它提供内容,您将不会使用 API。

【讨论】:

我必须使用 IAP API。我可以通过阅读 [NSBundle appStoreReceiptURL] 中的文件来获取在“App1”中购买的所有产品的列表。真正的问题是我如何将这个列表(这是一个 NSStrings 数组)从“App1”发送到“App2”。我也不能使用自定义 URL。它可能很容易被破解! 对,从技术上讲,您可以实现它。但它违反了 App Store 审查指南。如果您提交具有此类功能的应用程序,您可能会遇到麻烦,并且您的应用程序会被撤消。 “从技术上讲,如果您检查自己的服务器并通过它提供内容,您将不会使用 API。”否 请参阅developer.apple.com/LIBRARY/IOS/documentation/…“您的应用程序负责在用户购买后在所有用户的设备上提供订阅,并让用户恢复过去的购买。例如,大多数订阅是由服务器提供的;您的服务器需要一些机制来识别用户并将订阅购买与购买它们的用户相关联。”【参考方案2】:

现在这对于使用 App Bundles 的订阅来说是可能的:https://developer.apple.com/documentation/storekit/in-app_purchase/offering_a_subscription_across_multiple_apps

您可以为客户提供可通过一个或多个操作系统上的多个应用访问的自动续订订阅服务。

为了提供此功能,您的服务器必须授予对所有应用订阅内容的访问权限,尽管用户已在特定应用中购买了订阅。您可以使用统一的帐户管理数据库以及服务器端收据验证来验证用户的购买并确保处理应用内交易。通过从您的服务器授权订阅访问,您可以让用户能够跨多个应用访问您的订阅。

【讨论】:

以上是关于如何在两个 iOS 应用之间共享应用内购买数据?的主要内容,如果未能解决你的问题,请参考以下文章

在两个不同的应用程序之间共享非消耗性应用内购买是不是违反了 App Store 指南?

我们可以在属于同一个开发者帐户的应用之间共享应用内购买吗?

我们可以在属于同一开发者帐户的应用之间共享应用内购买吗?

IOS应用内购买验证或数据检索

iOS中的应用内购买使用[重复]

iOS - 我们如何通过促销代码为应用内购买提供折扣?