Così ho impostato un abbonamento auto-rinnovabile per la mia app con un periodo di 1 mese, che equivale a circa 5 minuti nella sandbox. Nell'app client mi iscrivo, invio la ricevuta al mio server, viene verificata e inserisco un record nel mio database che questo utente ha un abbonamento.Come rilevare e verificare un rinnovo per un abbonamento auto-rinnovabile?
La mia domanda è: come posso verificare se questo abbonamento è stato rinnovato? Ho letto i documenti e non riesco a capire cosa dovrei fare.
Ecco dove sono finora:
- Il ricevimento iniziale che viene inviato al mio server è verificata con uno stato
0
, grande. Ricevo anchelatest_receipt
, che sostituisco nel mio database con la ricevuta più vecchia. - Dopo 6 minuti, quando provo a verificare il
latest_receipt
, ottengo lo stato21006
(ricezione scaduto) e questo:
{ receipt:
{ original_purchase_date_pst: '2013-08-06 11:58:04 America/Los_Angeles',
unique_identifier: '------------',
original_transaction_id: '----------',
expires_date: '1376129825000',
transaction_id: '------------',
quantity: '1',
product_id: 'subscription',
item_id: '--------',
bid: 'com.--------',
unique_vendor_identifier: '---------',
web_order_line_item_id: '---------',
bvrs: '2.0',
expires_date_formatted: '2013-08-10 10:17:05 Etc/GMT',
purchase_date: '2013-08-10 10:12:05 Etc/GMT',
purchase_date_ms: '1376129525000',
expires_date_formatted_pst: '2013-08-10 03:17:05 America/Los_Angeles',
purchase_date_pst: '2013-08-10 03:12:05 America/Los_Angeles',
original_purchase_date: '2013-08-06 18:58:04 Etc/GMT',
original_purchase_date_ms: '1375815484000' },
latest_expired_receipt_info:
{ original_purchase_date_pst: '2013-08-06 11:58:04 America/Los_Angeles',
unique_identifier: '-------',
original_transaction_id: '-',
expires_date: '1376129825000',
transaction_id: '-',
quantity: '1',
product_id: 'subscription',
item_id: '-',
bid: 'com.-',
unique_vendor_identifier: '--',
web_order_line_item_id: '-',
bvrs: '2.0',
expires_date_formatted: '2013-08-10 10:17:05 Etc/GMT',
purchase_date: '2013-08-10 10:12:05 Etc/GMT',
purchase_date_ms: '1376129525000',
expires_date_formatted_pst: '2013-08-10 03:17:05 America/Los_Angeles',
purchase_date_pst: '2013-08-10 03:12:05 America/Los_Angeles',
original_purchase_date: '2013-08-06 18:58:04 Etc/GMT',
original_purchase_date_ms: '1375815484000' },
status: 21006 }
Il secondo elemento della matrice usato per essere latest_receipt_info
, ma ora è latest_EXPIRED_receipt_info
. Ecco cosa dicono i documenti:
Oltre al campo receipt_data, la risposta può anche includere due nuovi campi. Se abbonamento dell'utente è attivo ed è stato rinnovato da una transazione che ha avuto luogo dopo il ricevimento del server inviato ad App Store, il campo
latest_receipt
comprende una base-64 il ricevimento codificato per l'ultimo rinnovo per questa sottoscrizione . I dati decodificati per questa nuova ricevuta vengono anche forniti nel campolatest_expired_receipt_info
. Il tuo server può utilizzare questa nuova ricevuta per mantenere un record del rinnovo più recente.
Quindi, se il sub è stato rinnovato dal mio server dell'ultimo controllo, la ricevuta decodificato per il rinnovo deve essere in latest_expired_receipt_info
. In questo oggetto lo expires_date
è uguale a quello della ricevuta originale expires_date
.
Che diavolo? Voglio solo verificare se il sub è attivo. Qualcuno può spiegare in parole semplici come faccio?
Grazie!
E la domanda immediata: perché la sandbox non rinnova automaticamente l'abbonamento? O come lo rinnovo da solo? In questo momento la ricevuta scade dopo 5 minuti e questo è tutto. Ho bisogno di testare il mio codice in qualche modo. –
In sandbox, si sta lavorando con gli account di prova. Non è possibile utilizzare l'account di prova per accedere a iTunes e disabilitare il rinnovo automatico dell'abbonamento. Per testare la situazione, quando l'abbonamento auto-rinnovabile diventa scaduto e inattivo, Apple esegue solo 5 rinnovi in sandbox (ovvero hai una transazione iniziale e 5 si rinnova dopo di essa -> la coda delle sottoscrizioni totali 'è 6 volte l'abbonamento lunghezza). Questo si aggiornerà dopo 8 ore. Oppure puoi usare un altro account di prova. –
Ok, l'ho capito. Ecco una spiegazione più semplice: http://stackoverflow.com/questions/8033673/ios-sboxbox-environment-auto-renewal-subscription –