Квитанция iOS не включает транзакцию выкупа

Если я стираю данные в своем приложении, а затем повторно покупаю какой-либо управляемый IAP, который, как я знаю, уже принадлежит учетной записи, iOS дает мне родной диалог «Вы уверены, что хотите выкупить этот товар, с вас не будет взиматься плата». Это как и ожидалось.

Когда покупка возвращается в мое приложение, я получаю квитанцию ​​с [[NSBundle mainBundle] appStoreReceiptURL]. Затем я пытаюсь проверить идентификатор транзакции SKPaymentTransaction с квитанцией через свой сервер.

Однако идентификатор транзакции квитанции для этого IAP, поскольку я уже купил его давно, не совпадает с SKPaymentTransaction.

Как я должен проверить, что это действительная выкуп? Могу ли я как-то получить подписанную квитанцию ​​об этой выкупе?


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


Ответы (3)


Все покупки будут в одном чеке. Там нужно проверить все iAP и найти нужные.

Если вам нужен идентификатор исходной транзакции 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