Разписката за iOS не включва обратно закупена транзакция

Ако изтрия данните в приложението си, след което купя отново някои управлявани IAP, които знам, че акаунтът вече притежава, iOS ми дава естествения диалогов прозорец „сигурни ли сте, че искате да закупите отново този артикул, няма да бъдете таксувани“. Това е очакваното.

Когато покупката се върне в приложението ми, получавам разписката с [[NSBundle mainBundle] appStoreReceiptURL]. След това се опитвам да проверя транзакционния идентификатор на SKPaymentTransaction с разписката чрез моя сървър.

Идентификационният номер на транзакцията на разписката за този IAP обаче, тъй като вече съм го купил отдавна, не е същият като SKPaymentTransaction.

Как трябва да проверя дали това е валидно обратно изкупуване? Мога ли по някакъв начин да получа подписана разписка за това обратно изкупуване?


person tenpn    schedule 20.04.2015    source източник


Отговори (3)


Всички покупки ще бъдат в една касова бележка. Трябва да проверите всички iAPs там и да потърсите необходимите.

Ако искате идентификатора на оригиналната iAP транзакция, има оригинален идентификатор на транзакция

За транзакция, която възстановява предишна транзакция, идентификаторът на транзакция на оригиналната транзакция. В противен случай идентичен с идентификатора на транзакцията.

Повече информация относно полетата за разписка е тук: https://developer.apple.com/library/prerelease/ios/releasenotes/General/ValidateAppStoreReceipt/Chapters/ReceiptFields.html

Както и да е, наистина ли има значение дали това е оригинална покупка или повторна покупка? Моите проверки за това обикновено са еднакви.

person bealex    schedule 24.04.2015

Доколкото разбирам, трябва да проверите originalTransaction, за да проверите дали това е валидно за транзакции, които са SKPaymentTransactionStateRestored.

[[NSBundle mainBundle] appStoreReceiptURL] е за получаване на основното приложение, а не IAP.

person hypercrypt    schedule 24.04.2015
comment
това е добра информация. заключавате, че има разписка за транзакцията, но как мога да я получа? transactionReceipt на SKPaymentTransaction е отхвърлен. - person tenpn; 24.04.2015
comment
Местната разписка в стил iOS 7+ има обединени разписки за приложения и IAP. Информацията за локално валидиране на разписка -- разработчик. apple.com/library/prerelease/ios/releasenotes/General/ -- (и различните внедрявания на трети страни) има подробностите за повторение на покупките. - person Brad Brighton; 24.04.2015

Можете да използвате библиотеката RMStore и да проверите всички покупки:

RMStoreAppReceiptVerificator *verificator = [[RMStoreAppReceiptVerificator alloc] init];

if ([verificator verifyAppReceipt])
{
    NSArray *inAppPurchases = [RMAppReceipt bundleReceipt].inAppPurchases;

    for (RMAppReceiptIAP *inAppPurchase in inAppPurchases)
    {
        NSLog(@"productIdentifier %@ originalPurchaseDate %@", inAppPurchase.productIdentifier, inAppPurchase.originalPurchaseDate);
    }
}

Ако разписката ви е нула, можете да опресните разписката:

 [[RMStore defaultStore] refreshReceiptOnSuccess:^{
        //get purchases
    } failure:^(NSError *error) {

    }];
person ChikabuZ    schedule 24.04.2015