2015-04-20 3 views
2

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

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

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

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

ответ

3

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

Если вы хотите, идентификатор исходной транзакции IAP, есть идентификатор транзакции Оригинал

Для операции, которая восстанавливает предыдущую операцию, идентификатор транзакции исходной транзакции. Иначе, идентичный идентификатору транзакции.

Более подробная информация о поступлении полей здесь: https://developer.apple.com/library/prerelease/ios/releasenotes/General/ValidateAppStoreReceipt/Chapters/ReceiptFields.html

Во всяком случае, это действительно важно, является ли это первоначальная покупка или выкуп? Мои проверки этого обычно одинаковы.

2

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

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

+0

это хорошая информация. вы делаете вывод, что есть квитанция для транзакции, но как я могу ее получить? transactionReceipt в SKPaymentTransaction устарел. – tenpn

+0

В локальной квитанции типа iOS 7+ есть как квитанции приложения _and_ IAP, объединенные внутри. Информация для проверки на местную квитанцию ​​- https://developer.apple.com/library/prerelease/ios/releasenotes/General/ValidateAppStoreReceipt/Chapters/ValidateLocally.html - (и различные сторонние реализации) содержит сведения для повторяя покупки. –

0

Вы можете использовать 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) { 

    }];