2015-08-22 7 views
5

Sto utilizzando la libreria RMStore - ecco cosa ho attualmente.Recapito utente con abbonamento IAP rinnovabile automatico e ricevute di aggiornamento

1) acquistare abbonamento auto rinnovabile & verificare la ricevuta di ritorno.

[[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) Su ogni lancio app controllare l'abbonamento è attivo per la data e abilitare il servizio premium se è

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

3) Se l'utente lancia un'applicazione su un altro dispositivo permetterà loro di ripristinare gli acquisti aggiornando la ricevuta se esiste e controllando se è presente una sottoscrizione attiva negli acquisti.

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

- Questo è dalla guida. Ecco il codice:

[[RMStore defaultStore]refreshReceiptOnSuccess:^{ 

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

}]; 

Le mie domande:

  • Quando RMStore controlla se l'abbonamento è attivo può restituire no, mi guardo la ricevuta ed è corretto e io parto dal presupposto che non ha stato rinnovato automaticamente. Quando vado a comprare un altro abbonamento ricevo un messaggio da iTunes che dice che sono già iscritto. Al successivo avvio vedo la nuova ricevuta. Questo indica che la ricevuta deve essere aggiornata al momento del lancio, ma non voglio aggiornarla perché richiama il nome utente & pop-up della password che non è necessario. Qual è la migliore pratica qui?
  • Sto ripristinando gli abbonamenti per un altro dispositivo nel modo giusto? A volte sembra che ci voglia più volte un tentativo di ripristinare gli abbonamenti.
  • Esiste qualche necessità oltre alla conservazione delle registrazioni per archiviare gli abbonamenti sul mio server?

risposta

3

Ho intenzione di provare a rispondere alla mia domanda.

Potrebbe esserci un rinnovo che non viene rilevato per primo, quindi l'abbonamento appare inattivo.

Ho aggiunto un osservatore per ascoltare le transazioni completate (RMStore estende questa funzionalità StoreKit).

Ogni volta che ricevo questa notifica, controllo la ricevuta (ora aggiornata) per un abbonamento attivo e abilito il servizio premium se ce n'è uno.

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

Questo sembra funzionare. Se qualcuno ha altri suggerimenti fammelo sapere.

+0

Ho una domanda su cosa accadrà alla ricevuta principale quando annulla e attiva di nuovo l'abbonamento? Se verrà generata una nuova ricevuta o cosa succederà? – Yohan

+0

@Yohan Penso che riceverai una notifica la prossima volta che la persona avvia l'app che attiverà il metodo sopra. – jeh

Problemi correlati