检查用户是否具有Parse iOS SDK的有效自动续订订阅

时间:2014-11-20 13:45:55

标签: ios parse-platform in-app-purchase

我正在尝试使用自动续订订阅来实现应用程序。用户应该付费访问我的应用程序的所有功能。我已经将Parse用作我的应用程序的后端。它为inAppPurchases提供了一些API方法,但没有任何关于自动更新类型的说法。我发现的唯一一件事是在博客中有两年的线程,据说收据验证仅针对可下载的购买实施。

我试图在文档“简单购买”中使用它并且它工作正常但我无法弄清楚如何检查我的用户是否已经购买了订阅。

有没有人知道有没有办法通过Parse API来实现,或者这应该以另一种方式实现?

1 个答案:

答案 0 :(得分:4)

如前所述,收据验证仅内置于Parse SDK中以供下载内容,但创建一个将应用收据POST到iTunes Store进行验证的Cloud Code功能非常简单。以下是用于服务器端验证的Apple文档:Validating Receipts with the App Store

这是基本功能的样子:

Parse.Cloud.define('validateReceipt', function (request, response) {
    var receiptAsBase64EncodedString = request.params.receiptData;
    var postData = {
        method: 'POST',
        url: 'http://buy.itunes.apple.com/verifyReceipt',
        body: { 'receipt-data': receiptAsBase64EncodedString,
                'password': SHARED_SECRET }
    }

    Parse.Cloud.httpRequest(postData).then(function (httpResponse) {
        // httpResponse is a Parse.Cloud.HTTPResponse
        var json = httpResponse.data; // Response body as a JavaScript object.
        var validationStatus = json.status; // App Store validation status code
        var receiptJSON = json.receipt; // Receipt data as a JSON object

        // TODO: You'll need to check the IAP receipts to retrieve the
        //       expiration date of the auto-renewing subscription, and
        //       determine if it is expired yet.
        var subscriptionIsActive = true;

       if (subscriptionIsActive) {
           return response.success('Subscription Active');
       }
       else {
           return response.error('Subscription Expired');
       }
    });
});

有关解释收据JSON的详细信息,请参阅Receipt Fields。对于iOS 7+来说,这是相当直接的,但iOS 6及更早版本的自动续订订阅收据很乏味。