我们最近推出了只有消费类应用内购买的应用。我们注意到很多假冒购买 - 使用无效收据进行购买以及“有效”收据,但来自apple的验证响应中的“in_app”数组是空数组。我需要知道用户如何形成这样一个“有效”的收据?它是应用程序下载的收据而不是应用内购买或什么?我现在正在进行以下检查以进行验证。从Apple的json响应中提取“in_app”字段,如果它非空,则检查product_id匹配与否。我需要知道这个检查是否足够,或者他们是一个更好的万无一失的检查。
答案 0 :(得分:0)
所有应用都有收据。已购买IAP的应用在收据中有一个in_app字段。您的用户正在将一个虚假的呼叫推送到他们更新的事务处理方法,并且您正在抓取他们的收据(没有IAP,因为他们没有购买)并将其发送到您的服务器。其他用户可能会从某个地方交换一些收据(例如,30个小偷中的一个进行购买并提取该有效收据并将其发送给他们的29个盗贼)。如果他们将该收据粘贴到他们的设备中,然后将呼叫推送到updatedTransactions,那么您的服务器将获得他们现在有效但重复的收据。您的服务器需要检查***收据的日期,发现它比最近的旧,或者甚至更好,比您需要共同发送到您的服务器的paymentRequest更旧。 (最好在设备上解码 - 更安全)
***您曾经能够检查transaction_id是否有重复的transaction_id。遗憾的是,由于restoreCompletedTransaction返回与原始购买相同的transaction_id,因此您无法再这样做了。我告诉过苹果公司,他们不理我。
答案 1 :(得分:0)
空的in_app数组表示App Store尚未记录 用户的任何交易。可能是该应用程序 收据尚未更新。发生这种情况时,您的应用程序可以 通知用户收据似乎不是最新的并询问 是否刷新。
有关消费品的信息会在收据时添加到收据中 他们已付款并保留在收据中,直到您完成 交易。完成交易后,此信息是 下次更新收据时将其删除。因此导致 如果您的应用仅销售易耗品,则为in_app数组为空。