是否可以在静态库中使用 StoreKit(应用内购买)?
Posted
技术标签:
【中文标题】是否可以在静态库中使用 StoreKit(应用内购买)?【英文标题】:Is it possible to use StoreKit (In App Purchase) inside a static library? 【发布时间】:2011-08-24 15:40:41 【问题描述】:我正在开发一个作为静态库分发的 SDK,供 ios 开发人员在他们的应用中使用。我有兴趣通过 SDK 中包含的接口直接向用户提供非消耗性可下载和内置内容。理想情况下,当用户在一个应用程序中从我的 SDK 界面购买东西时,他们可以在同样使用 SDK 的任何其他应用程序中使用这些东西。有没有使用过 StoreKit 的人知道是否可以使用 Apple 的应用内购买框架来实现这一点?如果我在应用购买系统中推出自己的服务,是否会违反 Apple 的 TOS?
我应该补充一点,如果我能提供帮助,我的目标是避免滚动我自己的自定义帐户/支付基础设施。使用 StoreKit 会更简单、更可靠。
tl;dr:
-
是否可以在没有应用 ID 的情况下使用 StoreKit,或者使用未部署的应用 ID(看起来可能不行)?
Apple 是否对自定义应用购买实施设置任何限制(我会违反 TOS)吗?
【问题讨论】:
当用户购买产品时,为什么不将用户设备的 UDID 或者他们在应用程序中独有的其他信息(例如用户名或电子邮件)上传到服务器,然后在其他应用程序中,如果它们被列出,那么就解锁所有东西? Apple 在 iOS 5 中弃用了对 UDID 的访问,因此在不同应用程序中唯一标识设备将变得越来越困难(不可能?)。此建议也不适用于拥有多台设备的用户。 例如,您可以让用户在应用程序启动时输入他们的姓名或电子邮件并将其存储在服务器上。像 Apple ID 对 Apple 所做的那样,唯一标识所有用户的东西。这确实是唯一的方法。 我更新了我的问题,补充说如果可以避免的话,我不想自己管理用户帐户。使用 StoreKit 会比将用户信息上传到我的服务器更加方便和安全。 好吧,我没有什么可以推荐的了。如果您无法以自己的任何方式识别用户,那么您无能为力。应用内购买的产品 ID 是特定于单个应用的,因此这些是不可能的。并且应用程序必须将文件保存在 iOS 设备上的沙盒区域内,因此您无法在应用程序之间共享数据。 【参考方案1】:抱歉,我认为您的两个问题的答案是否定的。
对于第一季度:
在 SDK 中无法做到这一点。由于 IAP 需要产品 id 和 App Bundle id,因此这两个 id 都是唯一的。这意味着,如果您的一位用户在他的 iTunes Connect 中添加了该 ID,则其他人无法再次使用它。而且您还需要知道用户的身份。这是不可能的,因为 Apple 不希望开发人员这样做。
当然,您可以通过使用设备的某些唯一标识来识别设备,但您仍然无法识别特定用户。而且从 iOS 5 开始,获取 UUID 的 API 也将被移除,很难识别特定的设备。
如果您正在做 Apple 不希望开发人员做的事情,我不确定会发生什么。
你唯一能做的就是:
让用户和开发者注册到您的服务器。
开发者应该告诉你他在他的应用中为你的内容使用了什么 id,他的 App bundle id 是什么。
用户购买您的内容后,您的 SDK 应使用 App id 和 IAP 产品 id 找出内容是什么,然后将信息保存在您的服务器上。
用户登录另一个应用程序后,您的 SDK 应检查服务器以获取信息。向用户提供内容。
听起来很复杂……
第二季度:
根据 Apple 的审核指南,
11. Purchasing and currencies
11.1 Apps that unlock or enable additional features or functionality with mechanisms other than the App Store will be rejected
在 App Store 的 App 中提供自己的支付系统也是不可能的。
所以,基本上你的问题的答案是......不......
【讨论】:
谢谢!我有一种感觉,这是一个注定失败的想法。我什至没有想过要查看审查指南,所以感谢您指出我那里。 FWIW,我见过至少一个带有自定义支付系统的 iOS SDK,但它是在销售真实商品,而不是添加功能。 不客气。我记得这个审查指南,因为我被拒绝了一次,因为我在我的应用程序中使用了兑换代码系统......不得不说苹果很难玩,但作为开发者我们别无选择。以上是关于是否可以在静态库中使用 StoreKit(应用内购买)?的主要内容,如果未能解决你的问题,请参考以下文章