Verificación de recibo fuera de línea de RMStore

Una pregunta sobre la verificación de recibos fuera de línea usando RMStore ( https://github.com/robotmedia/RMStore )

En el inicio de la aplicación, verifico si la aplicación tiene una aplicación válida para la compra (versión PRO) (mi aplicación es solo iOS7)

Hago eso así:

 RMStoreAppReceiptVerificator *verificator = [[RMStoreAppReceiptVerificator alloc] init]; BOOL isValidReceipt = [verificator verifyAppReceipt]; if (isValidReceipt) { BOOL isProVersion = [[RMAppReceipt bundleReceipt] containsInAppPurchaseOfProductIdentifier:xxx]; ... } 

Todavía tengo la versión 1.0 en la App Store … Pero ahora me gustaría hacer una actualización pronto … Esto seguirá funcionando después de la actualización de una tienda de aplicaciones, ¿verdad? La aplicación todavía tendrá el recibo allí y la verificación aún debe pasar, ¿verdad?

Pregunto porque probar las compras en la aplicación no es realmente fácil (especialmente la actualización y cosas por el estilo) y si algo falla, los usuarios estarían molestos …

El código debería funcionar como antes. Sin embargo, no está verificando el recibo correctamente. Cita de la Guía de progtwigción de validation de recibos :

Si la validation falla en iOS, use la class SKReceiptRefreshRequest para actualizar el recibo.

Usando RMStore, eso se vería así:

 const BOOL verified = [self verifyReceiptWithCustomLogic]; if (verified) { // Verification succeeded } else { // Apple recommends to refresh the receipt if validation fails on iOS [[RMStore defaultStore] refreshReceiptOnSuccess:^{ const BOOL verified = [self verifyReceiptWithCustomLogic]; if (verified) { // Verification succeeded } else { // Verification failed } } failure:^(NSError *error) { // Verification failed }]; } 

Donde parece que su lógica de verificación es:

 - (BOOL)verifyReceiptWithCustomLogic { RMStoreAppReceiptVerificator *verificator = [RMStoreAppReceiptVerificator new]; if ([verificator verifyAppReceipt]) { return [[RMAppReceipt bundleReceipt] containsInAppPurchaseOfProductIdentifier:xxx]; } return NO; } 

Tenga en count que al actualizar el recibo, la verificación del recibo es un process asíncrono.