应用程序购买验证中的耗材

时间:2016-05-04 06:21:19

标签: ios8 in-app-purchase receipt-validation skproduct

我们最近推出了只有消费类应用内购买的应用。我们注意到很多假冒购买 - 使用无效收据进行购买以及“有效”收据,但来自apple的验证响应中的“in_app”数组是空数组。我需要知道用户如何形成这样一个“有效”的收据?它是应用程序下载的收据而不是应用内购买或什么?我现在正在进行以下检查以进行验证。从Apple的json响应中提取“in_app”字段,如果它非空,则检查product_id匹配与否。我需要知道这个检查是否足够,或者他们是一个更好的万无一失的检查。

2 个答案:

答案 0 :(得分:0)

所有应用都有收据。已购买IAP的应用在收据中有一个in_app字段。您的用户正在将一个虚假的呼叫推送到他们更新的事务处理方法,并且您正在抓取他们的收据(没有IAP,因为他们没有购买)并将其发送到您的服务器。其他用户可能会从某个地方交换一些收据(例如,30个小偷中的一个进行购买并提取该有效收据并将其发送给他们的29个盗贼)。如果他们将该收据粘贴到他们的设备中,然后将呼叫推送到updatedTransactions,那么您的服务器将获得他们现在有效但重复的收据。您的服务器需要检查***收据的日期,发现它比最近的旧,或者甚至更好,比您需要共同发送到您的服务器的paymentRequest更旧。 (最好在设备上解码 - 更安全)

***您曾经能够检查transaction_id是否有重复的transaction_id。遗憾的是,由于restoreCompletedTransaction返回与原始购买相同的transaction_id,因此您无法再这样做了。我告诉过苹果公司,他们不理我。

答案 1 :(得分:0)

请参阅此应用内购买常见问题解答My app validates its receipt with the App Store via paymentQueue:updatedTransactions: after a successful purchase. However, the returned receipt contains an empty in_app array rather than the expected products.

  

空的in_app数组表示App Store尚未记录   用户的任何交易。可能是该应用程序   收据尚未更新。发生这种情况时,您的应用程序可以   通知用户收据似乎不是最新的并询问   是否刷新。

     

有关消费品的信息会在收据时添加到收据中   他们已付款并保留在收据中,直到您完成   交易。完成交易后,此信息是   下次更新收据时将其删除。因此导致   如果您的应用仅销售易耗品,则为in_app数组为空。