2013-08-10 3 views
21

Also habe ich ein automatisch verlängerbares Abonnement für meine App mit einem Zeitraum von 1 Monat eingerichtet, was ungefähr 5 Minuten in der Sandbox entspricht. In der Client-App, die ich abonniere, sende ich die Quittung an meinen Server, es wird verifiziert und ich lege einen Datensatz in meine Datenbank, dass dieser Benutzer ein Abonnement hat.Wie kann eine Verlängerung für ein automatisch verlängerbares Abonnement erkannt und überprüft werden?

Meine Frage ist, wie überprüfe ich, ob dieses Abonnement erneuert wurde? Ich habe die Dokumente gelesen und kann nicht herausfinden, was ich tun soll.

Hier ist, wo ich so weit bin:

  1. Der erste Eingang, die zu meinem Server gesendet wird mit einem Status überprüft 0, groß. Ich bekomme auch latest_receipt, die ich in meiner Datenbank durch den ältesten Beleg ersetze.
  2. Nach 6 Minuten, wenn ich versuche, die latest_receipt, um zu überprüfen, ich Status 21006 (abgelaufene Quittung) und diese:
{ 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 } 

Das zweite Element in dem Array verwendet latest_receipt_info sein, aber jetzt ist es latest_EXPIRED_receipt_info. Hier ist, was die Dokumentation sagt:

Zusätzlich zum Feld receipt_data kann die Antwort auch zwei neue Felder enthalten. Wenn das Abonnement des Benutzers aktiv ist und wurde durch eine Transaktion erneuert, die nach dem Empfang, Ihre Server an den App Store gesendet nahm das latest_receipt Feld enthält eine Base64-codierte Quittung für die Verlängerung der Zulassung für dieses Abonnement . Die entschlüsselten Daten für diesen neuen Beleg sind ebenfalls im Feld latest_expired_receipt_info enthalten. Ihr Server kann diesen neuen Beleg verwenden, um eine Aufzeichnung der letzten Erneuerung beizubehalten.

Also, wenn der Unter erneuert wurde seit meinem Server zuletzt geprüft, die decodierte Quittung für die Verlängerung sollte in latest_expired_receipt_info sein. In diesem Objekt ist die expires_date die gleiche wie die ursprüngliche Quittung expires_date.

Was zur Hölle? Ich möchte nur überprüfen, ob das Sub aktiv ist. Kann mir jemand in einfachen Worten erklären, wie ich das mache?

Vielen Dank!

Antwort

25

Meine Erfahrung. Nehmen wir an, wir senden immer den ersten Beleg an Apples Server. In jedem Fall erhalten Sie JSON mit mindestens zwei Feldern: status (keine Kommentare) und receipt (Informationen über den Empfang, den Sie gesendet haben).

Zusätzlich zu, dass:

1) Wird das Abonnement noch aktiv ist, werden Sie zusätzlich latest_receipt (Base64-codierte Zeichenfolge) erhalten und latest_receipt_info (Informationen über diesen Eingang).

2) Wenn das Abonnement bereits abgelaufen ist, erhalten Sie zusätzlich latest_expired_receipt_info (Informationen über die letzte Verlängerung Erhalt). Ja, Sie erhalten nur Informationen darüber, keine Base64-codierte Zeichenfolge.

Und ja, AFAIK, das ist nirgendwo dokumentiert. Ich hoffe, das hilft.

+0

Und die unmittelbare Frage - warum erneuert die Sandbox das Abonnement nicht automatisch? Oder wie erneuere ich es selbst? Momentan läuft die Quittung nach 5 Minuten ab und das ist alles. Ich muss meinen Code irgendwie testen. –

+4

In Sandbox arbeiten Sie mit Testkonten. Sie können das Testkonto nicht verwenden, um sich bei iTunes anzumelden und die automatische Verlängerung Ihres Abonnements zu deaktivieren. Damit Sie die Situation testen können, wenn Ihr automatisch verlängerbares Abonnement abgelaufen und inaktiv ist, führt Apple nur 5 Erneuerungen in der Sandbox durch (dh Sie haben eine erste Transaktion und 5 Verlängerungen danach -> die Länge der gesamten Abonnementwarteschlange beträgt das 6-fache Ihres Abonnements Länge). Dies wird nach 8 Stunden aktualisiert. Oder Sie können ein anderes Testkonto verwenden. –

+0

Ok, ich habe es herausgefunden. Hier ist eine einfachere Erklärung: http://stackoverflow.com/questions/8033673/ios-sandbox-environment-auto-renewal-subscription –

Verwandte Themen