2017-01-27 6 views
0

У меня есть бесплатное приложение (уже доступно в App Store), у которого есть опция IAP, не требующая затрат, что это просто версия Premium с более функциональными возможностями ... минимальная цель развертывания - 8,0Проверка подлинности квитанции iOS работает неправильно

Я использую библиотеку RMStore (https://github.com/robotmedia/RMStore) для подтверждения получения ... Я понял, что проверка правильности при выполнении на устройстве, которое уже совершило покупку любого другого приложения. Я имею в виду, что если кто-то на своем устройстве (с его соответствующим идентификатором Apple) уже совершил покупку какого-либо другого приложения в прошлом, при входе в мое приложение подтверждение валидации возвращается OK (как этот человек уже приобрел мою премиальную версию), но это не :-(

при этом ниже мой код для подтверждения получения с использованием RMStore (в AppDelegate):

RMStoreAppReceiptVerifier *_receiptVerifier = [[RMStoreAppReceiptVerifier alloc] init]; 
[RMStore defaultStore].receiptVerifier = _receiptVerifier; 
if (_receiptVerifier.verifyAppReceipt) { 
    NSLog(@"PREMIUM VERSION"); 
    PremiumRM = YES; 
} else { 
    NSLog(@"NOT PREMIUM VERSION"); 
    PremiumRM = NO; 
} 

Что плохого

Кстати, в других постах RMStore библиотеку и подтверждение валидации здесь, в StackOverFlow, упоминается библиотека RMStoreAppReceiptVerificator, но я o не иметь его ... мне нужно это как обязательное? (Вместо этого я использую библиотеки RMAppReceipt и RMStoreAppReceiptVerifier).

+0

Вызывающий вызов просто указывает, действительна ли квитанция приложения. Он не проверяет, что какая-либо покупка в приложении была сделана. Вам нужно вызвать 'verifyTransaction', указав соответствующий идентификатор продукта, чтобы проверить покупку продукта. – Paulw11

+0

ОК спасибо за информацию, я проверю! – jankoesp

ответ

0

Я изменил код следующим образом ...

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

-(void)PremiumVerification 
{ 
    const BOOL verified = [self verifyReceiptWithCustomLogic]; 
    if (verified) 
    { 
     // Verification succeeded 
     NSLog(@"PREMIUM VERSION"); 
     _Premium = YES; 
    } 
    else 
    { // Apple recommends to refresh the receipt if validation fails on iOS 
     [[RMStore defaultStore] refreshReceiptOnSuccess:^{ 
      const BOOL verifiedagain = [self verifyReceiptWithCustomLogic]; 
      if (verifiedagain) 
      { 
       // Verification succeeded 
       NSLog(@"PREMIUM VERSION"); 
       _Premium = YES; 
      } 
      else 
      { 
       // Verification failed 
       NSLog(@"RECEIPT NOT VALID"); 
       _Premium = NO; 
      } 
     } failure:^(NSError *error) { 
      // Verification failed 
      NSLog(@"RECEIPT NOT VALID"); 
      _Premium = NO; 
     }]; 
    } 
} 

PremiumVerification называется в application didFinishLaunchingWithOptions из AppDelegate, и теперь, кажется, работает нормально.

Но с другой стороны, на мой взгляд, PremiumVerification следует называть также в applicationDidBecomeActive, чтобы снова подтвердить квитанцию, когда она поступает из фона или в неактивное состояние, верно?

Смежные вопросы