草庐IT

ios - 如何防止泄露应用内购买收据?

购买成功后,我将收据+交易ID保存到NSUserDefaults中。相同的信息被发送到服务器以保留记录。稍后(按需)当用户想从我自己的服务器下载内容时,我的应用程序会将收据+交易ID发送到服务器。它将通过从应用程序发送的交易ID找到存储的收据,与Apple验证存储的收据和新收据。如果某些key匹配,则提供可下载的内容。但是,如今获取NSUserDefaults并提取receipt+transactionID并不难。即使我将信息放在钥匙串(keychain)中,也可以通过互联网连接获取收据。现在,如果有人拥有收据+交易ID,就可以向我的服务器发送请求并从任何PC获取内容。如何在不使用密码

ios - 大统一收据长度如何处理?

我有一个包含许多不同的自动续订订阅的应用程序。当用户订阅新订阅时,收据(GrandUnifiedReceipt)从应用程序上传到我的服务器,然后发送到Apple并返回和解释详细信息。我注意到当用户订阅很多订阅时,这个收据会变得很长。此外,收据自然会变长,因为订阅每个月都会自动续订,并且新条目会插入到收据中。因此,收据的大小可能会变成兆字节大,这对用户的移动服务提出了巨大的数据需求,并且需要在我的服务器上花费大量的处理时间(遍历收据中的所有条目以找到一个需要记录)。有没有人对处理这个问题有建议? 最佳答案 是的,这是一个问题,但您只需

iOS收据不包含 repo 交易

如果我删除我的应用程序中的数据,然后重新购买一些我知道该帐户已经拥有的托管IAP,iOS会给我原生的“您确定要重新购买该项目吗?您不会被收取费用”对话框。这符合预期。当购买返回到我的应用程序时,我会收到带有[[NSBundlemainBundle]appStoreReceiptURL]的收据。然后我尝试通过我的服务器使用收据验证SKPaymentTransaction的transactionIdentifier。但是这个IAP的收据交易ID与SKPaymentTransaction不同,因为我早就购买了它。我应该如何验证这是一次有效的repo?我能以某种方式获得这次repo的签名收据吗

php - IOS收据验证错误21002

我正尝试在我的服务器端使用收据验证。一切正常,但有时我会看到奇怪的情况:10次验证正常,但在11次时出现21002错误。我不知道该怎么办。有时我在启动应用程序后第一次验证收据时收到错误21002。应用端:funcvalidateReceipt(productID:String){letreceipt=NSData(contentsOfURL:NSBundle.mainBundle().appStoreReceiptURL!)!letreceiptdata=receipt.base64EncodedStringWithOptions(NSDataBase64EncodingOptions

iphone - Apple 是否解决了应用内购买收据验证的安全问题?

我指的是thisdiscussion中描述的问题.从阅读该讨论来看,当时似乎无法安全地允许用户在多个设备上使用IAP产品。 最佳答案 不,这个漏洞仍然存在(我最近刚刚自己完成了另一个StoreKit实现)。我认为他们在不久的将来修复它是不可行的,尤其是在他们已经与公众一起使用了很长一段时间之后。推出与已经实现的解决方案不立即兼容的新解决方案可能会造成灾难性后果。虽然我认为普通消费者不具备利用您所关心的漏洞的专业知识。困难在于让业务经理相信这一点。 关于iphone-Apple是否解决了应

ios 应用内购买 - 验证收据数据

我正在将应用内购买实现到iOS应用程序中。我正在使用服务器模型(因此所有应用程序内项目都存储在我的服务器上)。购买模型的工作原理如下:用户在应用程序中购买商品应用程序将收据数据发送到我的服务器(收据数据是经过数字签名的数据block)服务器然后向苹果服务器发送验证如果验证成功,服务器返回交易数据我一直在搜索文档,但我无法回答这个问题:我能否验证收据数据是否来自苹果商店(检查签名或我是否必须为此想出一个机制)?如果用户购买的商品已从商店中移除(由于旧缓存),我可以拒绝购买吗?如果有人对此有任何经验,我将不胜感激。 最佳答案 您可以按照

iOS8 In App Purchase收据验证

我目前正在应用内购买消耗品。我已启动并运行代码,在本地执行购买和验证收据。这是我目前正在做的伪代码:MakepurchaserequestRespondtopaymentQueueupdatedTransactionscallbackIfTransactionSuccessValidateappreceiptfieldslocally(hash,bundleid,version)Validateinapppurchasefields(product,qty,transactionid)ChecktransactionhasnotbeenseenbeforeIfValidationpas

iOS 收据验证 - 自动续订订阅

我在验证自动续订IAP的收据时遇到问题。以下是我验证订阅的代码摘要。我正在使用Parse作为后端,并且还包含一些代码。在开发模式下,一切正常,没有任何问题。它在AppStore中上线,我所有的TestFlight测试人员和一些真实用户在应用程序尝试验证后立即遇到崩溃。当我尝试将数据保存回Parse时,我看到崩溃来自函数的最后,它告诉我我保存的键是空的。(base64,info,expirationDate)在我的设备上,我有一张沙盒购买收据,并且我收到了来自Apple的21007响应,试图根据实时URL进行验证。当我切换到沙箱url时,它每次都会验证并正常工作。另外,我知道以这种方式验

ios - 对于订阅系列中具有不同持续时间的自动续订订阅,Apple IAP 收据看起来如何?

我正在开发一款提供自动续订订阅的应用。如果用户购买了subscription.A(7天后续订),然后转到他的iTunes,我不知道在验证收据哈希时来自Apple的JSON响应会是什么样子设置并将其更改为从同一订阅系列续订到subscription.B。对于subscription.A,在续订几次后会是这样的:...{"quantity":"1","product_id":"subscription.A","transaction_id":"100000015494389","original_transaction_id":"100000015494368","purchase_dat

ios - 如何在验证 iOS 收据时处理状态 21100-21199 返回

Apple最近更新了他们的iOS收据验证服务(https://developer.apple.com/news/?id=07182017a),其中添加了21100-21199内部数据访问错误。但是没有关于如何处理这个错误的更多细节。有谁知道当客户端遇到这个错误时如何处理? 最佳答案 这些错误似乎与Apple响应中的is-retryable标志字段一起出现,因此合理的解决方案是稍等片刻并重试调用。查看返回的字段here 关于ios-如何在验证iOS收据时处理状态21100-21199返回,