Vra*_*das 3 php iphone objective-c ios ios7
我想验证iOS 6和iOS 7的iap收据(非消费和自动续订).
由于我使用服务器来遵循iOS 6的最佳实践,我也想将它用于iOS 7(主要用于订阅).这是一个报刊杂志的应用程序,所以我在我的服务器上保留收据,我想检查哪些收据包含有效订阅,以便我可以向这些用户发送推送通知,以便后续下载下一期.对于iOS 6,一切正常,但在iOS 7中存在很多混乱.
在收据验证文档中,它表示要验证可自动更新的订阅收据,我们会发送带有共享密钥的JSON对象,并获得具有特定状态的响应.
这适用于iOS 7吗?这对我来说不是很清楚.
iOS 7收据的状态是指应用程序收据本身(而非应用程序购买中的特定应用程序).那么如果我必须检查应用收据中的每个iap条目(例如,将iap到期日期与当前日期进行比较),我是否必须在我的服务器上实现应用收据解析?
还有办法通知我要检查哪个特定的购买?我猜不是.
我是否必须使用我的服务器进行iOS 6和iOS 7的设备验证?如果是,怎么样?:S
Jos*_*hen 13
对于iOS7,而不是发送SKPaymentTransaction的transactionReceipt到你的服务器,你需要发送应用程序收到的(Base64之后,就像您的编码它transactionReceipt).
您可以尝试在此答案中运行实现,以了解如何发送它以及查看从App Store返回的JSON响应的结构.
JSON响应有一个latest_receipt_info字段,其中包含用户已进行的应用内购买列表以及有关其过期的信息,例如:
"latest_receipt_info":( {
"quantity":"1",
"product_id":"com.example.subscription_30",
"transaction_id":"1000000097606958",
"original_transaction_id":"1000000097606821",
"purchase_date":"2014-01 -01 13:22:25 Etc/GMT",
"purchase_date_ms":"1388582545000",
"purchase_date_pst":"2014-01-01 05:22:25 America/Los_Angeles",
"original_purchase_date":"2014-01-01 11:10:40 Etc/GMT",
"original_purchase_date_ms":"1388574640000",
"original_purchase_date_pst":"2014-01-01 03:10:40 America/Los_Angeles",
"expires_date":"2014-01-01 11: 14:35 Etc/GMT",
"expires_date_ms":"1388574875000",
"expires_date_pst":"2014-01-01 03:14:35 America/Los_Angeles",
"web_order_line_item_id":"1000000027707568"},
...)
JSON响应还包括一个latest_receipt字段,其中包含您可以存储在服务器上的收据(base64编码)并发送到Apple的验证服务器,就像您存储的iOS6收据一样.
看起来你需要手动计算是否有任何有效订阅.也许是这样的(未经测试):
$desired_product_identifier = <identifier of your in-app purchase>;
$response = <JSON response you get from Apple verification server>;
$receipt = json_decode($response);
$latest_expiration_interval_since_1970 = 0;
for ($receipt_info in $receipt['latest_receipt_info']) {
if ($receipt_info['product_id'] != $desired_product_identifier)
continue;
$expiration_interval_since_1970 = intval(doubleval($receipt_info['expires_date_ms']) / 1000.0);
if ($expiration_interval_since_1970 > $latest_expiration_interval_since_1970) {
$latest_expiration_interval_since_1970 = $expiration_interval_since_1970;
}
}
$is_subscription_active = ($latest_expiration_interval_since_1970 > time());
Run Code Online (Sandbox Code Playgroud)
如果这不起作用并且您需要为iOS7执行本地应用程序收据验证,您可以查看我的github库以获取autorenewable订阅或RMStore.希望这可以帮助!
| 归档时间: |
|
| 查看次数: |
5135 次 |
| 最近记录: |