我的应用程序提供应用内购买非消耗类型.该应用程序具有登录功能.是否可以根据登录用户购买我的应用程序?
我知道这听起来很尴尬.我来说明一下这个问题.
该设备已在iTunes商店登录用户.那时,当我的应用程序第一次安装到设备时,任何用户都可以使用凭据登录我的应用程序.考虑一下,他做了一些购买并从应用程序注销.现在,另一个用户登录到应用程序,并且在应用程序购买后无法使用以前用户可用的工具.但是,如您所知,基于iTunes商店帐户购买非消费品(每个帐户只能购买一个非消费品).我试过以下方式..
>将用户ID存储到iCloud,但我不知道购买的是哪个iTunes帐户.因此,我无法显示正确的消息“您应该使用其他iTunes帐户登录才能购买”.
>在Android中,通过应用内结算v3,可以与购买请求一起发送开发人员有效负载字符串.在对该购买进行查询时,也会返回此字符串.因此,这可用于识别进行购买的用户. iOS中有类似的东西吗?
解决方法
从iOS 7开始,SKMutablePayment有一个applicationUsername属性,可以在付款时设置.并且,SKPaymentQueue具有restoreCompletedTransactionsWithApplicationUsername:方法
(link).
Apple的指导是散列您的服务器端用户ID,并在购买和恢复时将其传递出去.因此,在您的情况下,如果iTunes用户A购买该产品,它将被绑定到该购买者的服务器端用户ID.然后,如果iTunes用户B尝试还原,则还原将失败,因为它们仍将传递相同的服务器端用户ID.
您还必须(在服务器上)跟踪您的服务器端用户ID已购买产品.否则,如果iTunes用户B尝试恢复,则需要知道他们使用其他iTunes帐户登录设备之间的区别,并且他们从未购买过.当然,您还希望阻止同一服务器端用户在不同的iTunes帐户下购买产品两次.
注意事项:
>如果您已经在生产中进行了购买,这很可能无法使用.> iOS 7>我上面提到的“已购买”场景.