Dis*_*dev 5 validation macos in-app-purchase
对于iOS的应用内购买,我们可以使用在线API进行验证 - http://developer.apple.com/library/ios/#documentation/NetworkingInternet/Conceptual/StoreKitGuide/VerifyingStoreReceipts/VerifyingStoreReceipts.html 这意味着,我们可以验证在自己的服务器上购买.
是否有任何方法(API)用于OSX的应用内购买验证?
我发现只有关于Mac的应用内验证的这个片段 - http://developer.apple.com/library/mac/releasenotes/General/ValidateAppStoreReceipt/_index.html#//apple_ref/doc/uid/TP40010573-CH1 -SW23似乎Apple没有为在线验证提供任何API.
或者可能是Apple有一些计划来支持OSX的在线验证......
(2012年9月11日编辑)
我的应用程序提供了用户每年支付的在线组件.将它作为非消耗类型提供是没有意义的,因为它只能作为消耗品使用(但它实际上是iOS中的非重复订阅).我想在应用程序中提供这个,我想我终于有了解决方案......
我使用了一张Apple DTS票证来查询StoreKitGuide文档中的声明.它说 ...
"OS X支持本章描述的服务器验证方法和本地验证方法......"
我得到了Apple的回复说......
"验证Mac应用程序的应用程序内购买产品的步骤与iOS应用程序使用的步骤相同.不同之处在于,您将基本64位编码的应用程序收据(而不是transactionReceipt属性的内容)分配给收据 - 数据字段.检索应用程序的完整Mac App Store收据,然后使用base64编码对其进行编码.使用名为receipt-data的单个密钥创建一个JSON对象,并将编码的收据分配给它.按照验证收据中的说明继续操作.应用程序内购买编程指南的App Store部分.
注意:在应用程序购买中,收据包含在关联的Mac应用程序收据中.您必须检查与您的应用关联的收据,以验证其包含的应用内购买收据的有效性.这样做还允许您在应用中启用适当的功能."
因此,经过一些尝试失败后,我确实设法让这一点得到了警告,Apple的服务器返回的收据数据不包含"GUID的散列",因此不会将收据数据绑定到任何特定硬件.
这可以使用以下步骤在Mac上轻松测试:
找到Mac应用程序收据文件(一旦您运行应用程序并输入您的(测试)Apple ID和密码,它就在您的应用程序包中.
在命令行,base64 -i receiptbase64将对收据进行编码,没有换行符(这很重要)
再次在命令行, curl -d '{ "receipt-data": "<your b64 string here>" }' https://sandbox.itunes.apple.com/verifyReceipt
这将返回格式的JSON数据
{"status":0,
"environment":"Sandbox",
"receipt":{"adam_id":"0",
"bundle_id":"uk.co.geode.easybooks",
"application_version":"2.2.7",
"download_id":"0",
"in_app":[ {"quantity":"1",
"product_id":"uk.co.geode.easybooks.syncing",
"transaction_id":"1000000034508678",
"purchase_date":"2012-09-05 12:00:17 Etc/GMT",
"original_transaction_id":"1000000034508678",
"original_purchase_date":"2012-01-24 10:16:17 Etc/GMT"} ]}}
Run Code Online (Sandbox Code Playgroud)
我还没有确认,但显然(根据Apple工程师的说法)任何消费类型的应用内购买将在首次购买时添加到收据中,但在进一步购买或恢复操作后被删除.我想知道在每次购买之后让应用程序中运行的代码制作收据文件的副本是否是个好主意,以防我们自己的服务器在应用程序尝试验证收据时关闭.用户可能会尝试恢复购买,而不会意识到这将删除任何消耗品收据.
我希望有所帮助.
(原始评论如下)
我有同样的问题.我在商店里有一个iOS应用程序,它包含可以在应用程序内购买的消费品和非消费品.消费品是一项服务,由我的网络服务器完成.在StoreKit委托方法paymentQueue:updatedTransactions:中,我使用transactionReceipt属性,它是一个NSData对象.我将其编码为base64并将其发送到服务器.在服务器上我将收据传递给Apple的服务器进行验证.
但对于Mac OS,SKPaymentTransaction上没有transactionReceipt属性,因此我们无法以相同的方式验证收据.
我们可以做非消耗品,这可能对您有所帮助.在Mac OS上进行应用内购买时,收据会在应用包中更新.然后可以解析收据文件,查找每个应用程序内收据,这些收据都存储在主包中的收据文件中.有关详细信息,请参阅http://developer.apple.com/library/mac/#releasenotes/General/ValidateAppStoreReceipt/_index.html
当我使用非消耗品时,这对我来说很好,但我有一个消耗品,这不会更新到应用程序的收据文件中.如果没有transactionReceipt属性,我认为我的服务器无法验证收据是否为正版.如果其他人有任何其他经验,请告诉我们!
**已添加2011年10月5日**任何拥有Apple开发者帐户的人也可以在Apple开发人员论坛上阅读此内容:https: //devforums.apple.com/message/548411#548411
| 归档时间: |
|
| 查看次数: |
3996 次 |
| 最近记录: |