2015-10-22 9 views
5

Sto tentando di implementare gli abbonamenti di upgrade/downgrade nella mia app per Android. Credo di aver correttamente implementato tutto, ma non sembra funzionare correttamente durante i miei test.Android IAP getBuyIntentToReplaceSkus non annulla l'abbonamento precedente

La mia app ha tre opzioni: opzioni di abbonamento mensile, 3 mesi e 6 mesi. Quando mi iscrivo a qualsiasi opzione chiamo la seguente funzione dove 'sku' è lo sku per l'oggetto che si sta acquistando e 'oldSkus' è lo skus per gli altri elementi.

buyIntentBundle = mService.getBuyIntentToReplaceSkus(5, 
      mContext.getPackageName(), oldSkus, sku, itemType, extraData); 

quando mi iscrivo a l'opzione 3-Month funziona benissimo e l'applicazione riceve correttamente un abbonamento di acquisto di 3 mesi dal Play Store. Se tento di effettuare l'aggiornamento alla abbonamento di 6 mesi il seguente flusso si verifica:

  1. dialogo 'Cambio Abbonamento' viene richiesto fornendo il mio 'piano attuale' e il 'Nuovo Piano' -> Fare clic su 'Continua'
  2. I dettagli del piano sono delineati. Fare clic su -> "Iscriviti" -> "Conferma"
  3. La transazione ha esito positivo e i dati di acquisto vengono restituiti all'app.
  4. ricevere e-mail di sottoscrizione affermando è stato aggiornato con i dettagli:
    • piano precedente: 3 - Mesi: Annullato
    • Nuovo piano: 6 - Mesi: Attivo immediatamente
  5. andare a giocare conto deposito e vista abbonamenti
    • 3 Month Plan - sottoscritto con pulsante Annulla
    • 6 mesi Plan - sottoscritto con Cance l tasto
  6. lancio app e osservatore getInventory risultati del piano
    • 3 Month - utente è abbonato
    • 6 mesi piano - l'utente è sottoscritto

Per quanto posso dire che il vecchio abbonamento non è stato correttamente cancellato dal Play Store. La mia speranza è che ciò avvenga solo perché sto utilizzando un account tester e il $/giorno che si verifica quando si verificano le sottoscrizioni sta causando alcuni problemi con il pro-rating.

AGGIORNAMENTO: Google ha risposto al mio biglietto e mi ha informato che hanno intensificato il problema. Aggiornerò di nuovo quando avrò un'altra risposta.

+0

Lo sto testando anche ora. Sto vivendo un comportamento simile. – gswierczynski

+0

Chiama allo sviluppatore di Google Play Api restituisce l'abbonamento che deve essere annullato restituisce ancora autoRenewing = true. Nota che: https://developer.android.com/google/play/billing/billing_subscriptions.html dichiara che l'abbonamento è stato annullato (e in base a https://developers.google.com/android-publisher/api-ref/acquisti/abbonamenti/annulla le iscrizioni cancellate (non revocate) sono valide fino alla fine della sottoscrizione, sebbene non abbia molto senso nello scenario di aggiornamento). Mi piacerebbe qualche input di Google su questo. – gswierczynski

+0

Hai provato in produzione forse? – gswierczynski

risposta

0

L'ho provato con soldi veri. Il vecchio abbonamento è stato annullato (penso che sia stato revocato nel modo in cui Google Play lo comprende). Dopo aver aggiornato l'abbonamento precedente non è più visibile nei dettagli dell'app nell'app Google Play, solo il nuovo è.

Anche se non sono sicuro di come riconoscerlo con la chiamata all'API dello sviluppatore di Google Play: come riconoscere che questo vecchio abbonamento non è più valido. Il metodo get su Acquisti.la risorsa abbonamenti restituisce autoRenew come falso (che è buono), ma non è sufficiente riconoscere che le funzionalità per quella sottoscrizione non dovrebbero essere più disponibili all'utente poiché lo stesso accade quando l'utente annulla le iscrizioni e quando l'utente annulla le iscrizioni le caratteristiche dovrebbero essere ancora disponibile fino al periodo di scadenza.

Sfortunatamente la scadenza restituita dalla chiamata get ha ancora lo stesso valore, quindi non posso usarla.

UPDATE: il metodo getPurchases sul client Android non restituisce la vecchia sottoscrizione dopo l'aggiornamento. Mi chiedo se esiste un modo per riconoscerlo tramite la chiamata all'API per sviluppatori Google Play.