2017-01-27 1 views
0

Ich habe eine kostenlose App (bereits im App Store erhältlich), die eine nicht-konsumierbare IAP-Option hat. Sie ist nur eine Premium-Version mit mehr Funktionen ... Mindesteinsatzziel ist 8.0Bestätigung der iOS-Bestätigung funktioniert nicht richtig

Ich benutze die RMStore-Bibliothek (https://github.com/robotmedia/RMStore) für die Bestätigung der Annahme ... Ich erkannte, dass die Validierung nicht korrekt ist, wenn auf einem Gerät, das bereits eine andere App gekauft hat. ich meine, wenn jemand in seinem Gerät (mit seiner entsprechenden Apple ID) bereits einen Kauf einer anderen App in der Vergangenheit getätigt hat, beim Betreten meiner App die Kassenbon-Bestätigung OK zurückkommt (so wie die Person auch schon meine Premium Version gekauft hat) es ist nicht :-(

Hiermit unten ist mein Code für die Validierung Eingang RMStore mit (im 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; 
} 

Was falsch ist

By the way, in anderen Beiträgen von RMStore Bibliotheks- und Belegvalidierung hier bei StackOverFlow, die "RMStoreAppReceiptVerifikator" -Bibliothek wird erwähnt, aber ich habe sie gelesen Ich habe es nicht ... brauche ich es als obligatorisch? (Ich verwende stattdessen die Bibliotheken "RMAppReceipt" und "RMStoreAppReceiptVerifier").

+0

Der Anruf, den Sie gerade ausführen, zeigt an, ob der App-Empfang gültig ist. Es wird nicht überprüft, ob ein In-App-Kauf stattgefunden hat. Sie müssen 'verifyTransaction' aufrufen und eine entsprechende Produktidentifikation angeben, um den Kauf eines Produkts zu validieren. – Paulw11

+0

ok danke für die Informationen, ich werde es überprüfen! – jankoesp

Antwort

0

änderte ich den Code wie folgt ...

- (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 in application didFinishLaunchingWithOptions von AppDelegate genannt wird, und jetzt scheint es funktioniert OK.

Aber meiner Meinung nach PremiumVerification sollte auch in applicationDidBecomeActive aufgerufen werden, nur um den Empfang erneut zu überprüfen, wenn aus dem Hintergrund oder inaktiven Zustand kommt, ist das richtig?