RMStore подтверждение офлайн-квитанции

Один вопрос об автономной проверке квитанции RMStore ( https://github.com/robotmedia/RMStore)

При запуске приложения я проверяю, есть ли у приложения действительная покупка приложения (версия PRO) (мое приложение только для iOS7)

Я делаю это так:

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

У меня все еще есть версия 1.0 в App Store... Но теперь я хотел бы сделать обновление в ближайшее время... Это все еще будет работать после обновления магазина приложений, верно? В приложении все еще будет квитанция, и проверка должна пройти, верно?

Я спрашиваю, потому что тестирование внутриигровых покупок не очень легко (особенно обновление и прочее), и если что-то не получится, пользователи будут взбешены....

1 ответ

Решение

Код должен работать как прежде. Однако вы не проверяете квитанцию ​​правильно. Цитирование руководства по программированию проверки квитанции:

Если проверка в iOS не удалась, используйте SKReceiptRefreshRequest класс для обновления квитанции.

Используя RMStore, это будет выглядеть так:

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
    }];
}

Где ваша логика проверки выглядит так:

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

Обратите внимание, что обновление квитанции делает проверку квитанции асинхронным процессом.

Другие вопросы по тегам