iOS 7: проверка и проверка квитанции о покупке в приложении

Я новичок в проверке чеков в iOS. Я успешно осуществил покупку в приложении. Теперь я хочу включить часть проверки квитанции в эту покупку в приложении.

Моя покупка в приложении предназначена для 3 продуктов. Я хочу, чтобы перед покупкой каждого продукта в моем приложении выполнялась проверка квитанции.

Для этого я перешел по следующей ссылке: официальное руководство разработчика Apple

Мне удалось получить данные о квитанции, но я не понимаю, что делать после получения данных о квитанции. Как отправить его обратно на сервер Apple для проверки, а затем начать процесс покупки в приложении?

Вот мой код:

-(void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions {

NSLog(@"transactions count : %d",transactions.count);

BOOL flgIsProductRestorable=NO;

for (SKPaymentTransaction *transaction in transactions) {
    switch (transaction.transactionState) {
        case SKPaymentTransactionStatePurchasing:
        {
            // show wait view here
            //statusLabel.text = @"Processing...";

            NSLog(@"Processing...");
        }
            break;

        case SKPaymentTransactionStatePurchased:
        {
            [[SKPaymentQueue defaultQueue] finishTransaction:transaction];
            [SVProgressHUD dismiss];
            // remove wait view and unlock feature 2
            //statusLabel.text = @"Done!";
            NSLog(@"Success : %@ = %@",transaction.payment.productIdentifier,transaction.transactionIdentifier);
            NSURL *receiptURL = [[NSBundle mainBundle] appStoreReceiptURL];
            NSData *receipt = [NSData dataWithContentsOfURL:receiptURL];
            NSLog(@"%@",receipt);

            NSError *error;
            NSDictionary *requestContents = @{
                                              @"receipt-data": [receipt base64EncodedStringWithOptions:0]
                                              };
            NSData *requestData = [NSJSONSerialization dataWithJSONObject:requestContents
                                                                  options:0
                                                                    error:&error];

            if (!requestData) { /* ... Handle error ... */ }

            // Create a POST request with the receipt data.
            NSURL *storeURL = [NSURL URLWithString:@"https://sand.itunes.apple.com/verifyReceipt"];
            NSMutableURLRequest *storeRequest = [NSMutableURLRequest requestWithURL:storeURL];
            [storeRequest setHTTPMethod:@"POST"];
            [storeRequest setHTTPBody:requestData];

            // Make a connection to the iTunes Store on a background queue.
            NSOperationQueue *queue = [[NSOperationQueue alloc] init];
            [NSURLConnection sendAsynchronousRequest:storeRequest queue:queue
                                   completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
                                       if (connectionError) {
                                           /* ... Handle error ... */
                                       } else {
                                           NSError *error;
                                           NSDictionary *jsonResponse = [NSJSONSerialization JSONObjectWithData:data options:0 error:&error];
                                           NSLog(@"response : %@",jsonResponse);
                                           if (!jsonResponse) { /* ... Handle error ...*/ }
                                           /* ... Send a response back to the device ... */
                                       }
                                   }];


            [self WS_EbookDetail:transaction.transactionIdentifier];

        }...

Я только что скопировал вставленный код получения квитанции из ссылки на яблоко, которую я дал в этом вопросе.

Что мне делать дальше?


person z22    schedule 30.05.2014    source источник
comment
используйте быстрый набор для магазина, его простой github.com/bizz84/SwiftyStoreKit   -  person Awais Mobeen    schedule 14.01.2020


Ответы (1)


Помните, что Apple рекомендует безопасно отправлять данные квитанции на свой сервер, а затем звонить на их серверы. Звонки на серверы Apple небезопасны.

Вы также можете выполнить локальную проверку квитанции в своем приложении. Информацию о том, как сделай это.

Также есть отличное видео WWDC от 2014 года «Предотвращение несанкционированных покупок с помощью квитанций», в котором подробно рассказывается о внедрении проверки квитанции на устройстве.

person Shawn    schedule 25.07.2014
comment
может ли Apple отклонить приложение, если мы удаленно проверяем получение с локального размера (без использования собственного сервера)? - person SoftDesigner; 23.06.2015
comment
Я не думаю, что в наши дни нужен собственный сервер, так как iOS9 теперь заставляет ATS - person Ace Green; 17.10.2015