2015-08-22 6 views
5

Ich benutze die Bibliothek RMStore - hier ist, was ich zur Zeit habe.Auto erneuerbare IAP-Abonnement-Benutzerfluss und erfrischende Zugänge

1) Erwerben Sie automatisch verlängerbares Abonnement & überprüfen Sie den zurückgegebenen Beleg.

[[RMStore defaultStore]addPayment:[Environment environment].premiumProductIAPId success:^(SKPaymentTransaction *transaction) { 
    [[RMStore defaultStore].receiptVerificator verifyTransaction:transaction success:^{ 

    //enable premium service 

    } failure:^(NSError *error) { 

    }]; 
} failure:^(SKPaymentTransaction *transaction, NSError *error) { 

}]; 

2) Auf jeder App-Start des Abonnements überprüfen ist für das Datum aktiv und die Premium-Service aktivieren, wenn es

RMAppReceipt *appReceipt = [RMAppReceipt bundleReceipt]; 
if (appReceipt){ 
    NSInteger isActive = [appReceipt containsActiveAutoRenewableSubscriptionOfProductIdentifier:[Environment environment].premiumProductIAPId forDate:[NSDate date]]; 
    //enable premium service if active 
} 

3) ist, wenn Benutzer App auf einem anderen Gerät startet damit sie Einkäufe wiederherstellen indem Sie die Quittung aktualisieren, wenn sie vorhanden ist, und prüfen, ob in den Käufen ein aktives Abonnement vorhanden ist.

"In most cases, all your app needs to do is refresh its receipt and deliver the products in its receipt." 

- Das ist von der Anleitung. Hier ist der Code:

[[RMStore defaultStore]refreshReceiptOnSuccess:^{ 

    if ([receipt containsActiveAutoRenewableSubscriptionOfProductIdentifier:[Environment environment].premiumProductIAPId forDate:[NSDate date]]){ 
    //enable 
    }else{ 
    //no longer active 
    } 
} failure:^(NSError *error) { 

}]; 

Meine Fragen:

  • Wenn RMStore prüft, ob das Abonnement aktiv ist es nicht zurückgeben kann, die ich in den Eingang schauen und es ist richtig, und ich gehe davon aus es hat nicht wurde automatisch erneuert. Wenn ich ein anderes Abonnement kaufe, bekomme ich eine Nachricht von itunes, dass ich bereits abonniert habe. Beim nächsten Start sehe ich den neuen Beleg. Dies zeigt an, dass der Beleg beim Start aktualisiert werden muss, aber ich möchte ihn nicht aktualisieren, da er den Benutzernamen & enthält, der nicht benötigt wird. Was ist die beste Vorgehensweise hier?
  • Repariere ich die Abonnements für ein anderes Gerät auf die richtige Weise? Es scheint manchmal mehr als einen Versuch zu unternehmen, die Subskriptionen wiederherzustellen.
  • Gibt es außer der Aufbewahrung von Aufzeichnungen eine Notwendigkeit, die Abonnements auf meinem Server zu speichern?

Antwort

3

Ich werde versuchen, meine Frage zu beantworten.

Es kann eine Verlängerung geben, die beim Start nicht erkannt wird, daher erscheint das Abonnement inaktiv.

Ich habe einen Beobachter hinzugefügt, der auf fertige Transaktionen wartet (RMStore erweitert diese StoreKit-Funktionalität).

Jedes Mal, wenn ich diese Benachrichtigung erhalte, überprüfe ich den (jetzt aktualisierten) Beleg für ein aktives Abonnement und aktiviere den Premium-Dienst, falls es einen gibt.

- (void)storePaymentTransactionFinished:(NSNotification*)notification 
{ 
    BOOL isActive = [[RMAppReceipt bundleReceipt] containsActiveAutoRenewableSubscriptionOfProductIdentifier:[Environment environment].premiumProductIAPId forDate:[NSDate date]]; 
    if (isActive){ 
    //enable premium 
    } 
} 

Dies scheint zu funktionieren. Wenn jemand andere Vorschläge hat, lass es mich wissen.

+0

Ich habe eine Abfrage, was mit der Hauptquittung passieren wird, wenn er das Abonnement storniert und wieder aktiviert? Ob ein neuer Beleg generiert wird oder was passiert? – Yohan

+0

@Yohan Ich glaube, du wirst beim nächsten Start der App eine Benachrichtigung erhalten, die die obige Methode auslöst. – jeh