从 SKPaymentTransaction 获取订阅价格

Posted

技术标签:

【中文标题】从 SKPaymentTransaction 获取订阅价格【英文标题】:Get subscription price from a SKPaymentTransaction 【发布时间】:2019-08-02 22:25:06 【问题描述】:

我的应用提供应用内订阅。购买或续订订阅时,应用会收到 SKPaymentTransaction 通知,其中包含应用内产品标识符。我可以查询该应用内 ID 以检索购买的 SKProduct。该产品可能包含常规价格、介绍价格(或试用)以及一个或多个折扣价格(自 ios 12.2 起)。如果续订,当前的正常价格可能与用户过去订阅的价格不同。

我的问题是如何判断用户支付的价格:

当前正常价格; 介绍价格/试用版; 折扣价; 该用户过去可以使用的其他东西。

【问题讨论】:

【参考方案1】:

您无法直接获得交易的实际价格,但您可以查看产品价格和其他一些收据字段来大致了解用户支付的价格。

您需要保存 SKProduct 中的 priceintroductoryPrice,然后您可以查看 SKPaymentTransaction 上的 is_in_intro_offer_period 标志以确定用户将使用 price 字段还是 introductoryPrice收费。

请注意,SKProduct 价格将以用户的货币为单位,因此如果您想将所有内容转换为相同的货币,您也应该保存区域设置。

收据上没有价格的事实仍然让我大吃一惊:)

【讨论】:

is_in_intro_offer_period 是 receipt field,虽然它可用于确定用户是否有资格获得介绍性优惠,但它并未提供回答问题所需的信息。 @sethdeckard 我做了一些编辑来澄清。这有帮助吗?实际成交价格是不可能得到的,但是你可以根据产品的价格和用户是否处于入门期来推断。 这似乎是一种合理的介绍性优惠方法,类似的方法应该适用于促销定价(discountsSDKProduct)。访问收据字段需要在您的后端验证收据,但如果您正在使用订阅,除了保留所有这些状态之外,您应该已经这样做了。 :)

以上是关于从 SKPaymentTransaction 获取订阅价格的主要内容,如果未能解决你的问题,请参考以下文章

SKPaymentTransaction(Swift 3)中的交易错误转换问题

是否有快速替代已弃用的“SKPaymentTransaction.transactionReceipt”?

我是不是必须验证每个 SKPaymentTransaction 订阅的收据?

iOS由开发者验证应用商店购买ID

应用内购买验证收据错误

应用购买iphone中的自动续订验证