Referenzleitfaden für Entwicklerbenachrichtigungen in Echtzeit

In diesem Dokument werden die Arten von Entwicklerbenachrichtigungen in Echtzeit aufgeführt und beschrieben, die Sie von Google Play erhalten können.

Codierung

Jede Veröffentlichung in einem Cloud Pub/Sub-Thema enthält ein einzelnes base64-codiertes Datenfeld.

{
  "message": {
    "attributes": {
      "key": "value"
    },
    "data": "eyAidmVyc2lvbiI6IHN0cmluZywgInBhY2thZ2VOYW1lIjogc3RyaW5nLCAiZXZlbnRUaW1lTWlsbGlzIjogbG9uZywgIm9uZVRpbWVQcm9kdWN0Tm90aWZpY2F0aW9uIjogT25lVGltZVByb2R1Y3ROb3RpZmljYXRpb24sICJzdWJzY3JpcHRpb25Ob3RpZmljYXRpb24iOiBTdWJzY3JpcHRpb25Ob3RpZmljYXRpb24sICJ0ZXN0Tm90aWZpY2F0aW9uIjogVGVzdE5vdGlmaWNhdGlvbiB9",
    "messageId": "136969346945"
  },
  "subscription": "projects/myproject/subscriptions/mysubscription"
}

Nachdem Sie das base64-codierte Datenfeld decodiert haben, enthält die DeveloperNotification die folgenden Felder:

{
  "version": string,
  "packageName": string,
  "eventTimeMillis": long,
  "oneTimeProductNotification": OneTimeProductNotification,
  "subscriptionNotification": SubscriptionNotification,
  "voidedPurchaseNotification": VoidedPurchaseNotification,
  "pendingRefundReviewNotification": PendingRefundReviewNotification,
  "testNotification": TestNotification
}

Diese Felder werden in der folgenden Tabelle beschrieben.

Attributname Wert Beschreibung
Version String Die Version dieser Benachrichtigung. Anfangs ist das „1.0“. Diese Version unterscheidet sich von anderen Versionsfeldern.
packageName String Der Paketname der Anwendung, auf die sich diese Benachrichtigung bezieht zu (z. B. `com.some.thing`).
eventTimeMillis long Der Zeitstempel des Ereignisses in Millisekunden seit der Epoche.
subscriptionNotification SubscriptionNotification

Wenn dieses Feld vorhanden ist, bezieht sich diese Benachrichtigung auf ein Abo und enthält zusätzliche Informationen dazu.

Dieses Feld schließt sich gegenseitig mit pendingRefundReviewNotification, oneTimeProductNotification, voidedPurchaseNotification und testNotification aus.

oneTimeProductNotification OneTimeProductNotification

Wenn dieses Feld vorhanden ist, bezieht sich diese Benachrichtigung auf einen Einmalkauf und enthält zusätzliche Informationen dazu.

Dieses Feld schließt sich gegenseitig mit pendingRefundReviewNotification, subscriptionNotification, voidedPurchaseNotification und testNotification aus.

voidedPurchaseNotification VoidedPurchaseNotification

Wenn dieses Feld vorhanden ist, bezieht sich diese Benachrichtigung auf einen stornierten Kauf und enthält zusätzliche Informationen dazu.

Dieses Feld schließt sich gegenseitig mit pendingRefundReviewNotification, oneTimeProductNotification, subscriptionNotification und testNotification aus.

pendingRefundReviewNotification PendingRefundReviewNotification

Wenn dieses Feld vorhanden ist, bezieht sich diese Benachrichtigung auf einen Antrag auf Rückbuchung, für den Sie eine Lösung vorschlagen können. Antworten Sie auf diese Benachrichtigung, indem Sie die `ReviewRefund` API aufrufen.

Dieses Feld schließt sich gegenseitig mit subscriptionNotification, oneTimeProductNotification, voidedPurchaseNotification, und testNotification aus.

testNotification TestNotification

Wenn dieses Feld vorhanden ist, bezieht sich diese Benachrichtigung auf eine Testveröffentlichung. Diese werden nur über die Google Play Developer Console gesendet.

Dieses Feld schließt sich gegenseitig mit pendingRefundReviewNotification, oneTimeProductNotification, subscriptionNotification und voidedPurchaseNotification aus.

SubscriptionNotification

Eine SubscriptionNotification enthält die folgenden Felder:

{
  "version": string,
  "notificationType": int,
  "purchaseToken": string
}
Attributname Wert Beschreibung
Version String Die Version dieser Benachrichtigung. Anfangs ist das „1.0“. Diese Version unterscheidet sich von anderen Versionsfeldern.
notificationType int Der notificationType für ein Abo kann die folgenden Werte haben:
  • (1) SUBSCRIPTION_RECOVERED: Ein Abo wurde aus der Kontosperrung wiederhergestellt oder die Pausierung wurde aufgehoben.
  • (2) SUBSCRIPTION_RENEWED: Ein aktives Abo wurde verlängert.
  • (3) SUBSCRIPTION_CANCELED: Ein Abo wurde entweder freiwillig oder unfreiwillig gekündigt. Bei einer freiwilligen Kündigung wird die Benachrichtigung gesendet, wenn der Nutzer kündigt.
  • (4) SUBSCRIPTION_PURCHASED: Ein neues Abo wurde gekauft.
  • (5) SUBSCRIPTION_ON_HOLD: Ein Abo wurde gesperrt (falls aktiviert).
  • (6) SUBSCRIPTION_IN_GRACE_PERIOD: Ein Abo ist in den Kulanzzeitraum eingetreten (falls aktiviert).
  • (7) SUBSCRIPTION_RESTARTED: Der Nutzer hat sein Abo unter Play > Konto > Abos wiederhergestellt. Das Abo wurde gekündigt, war aber noch nicht abgelaufen, als der Nutzer es wiederhergestellt hat. Weitere Informationen finden Sie unter Abo vor Ablauf wiederherstellen.
  • (8) SUBSCRIPTION_PRICE_CHANGE_CONFIRMED (VERALTET): Eine Preisänderung für ein Abo wurde vom Nutzer bestätigt.
  • (9) SUBSCRIPTION_DEFERRED: Die Wiederholungszeit eines Abos wurde verlängert.
  • (10) SUBSCRIPTION_PAUSED: Ein Abo wurde pausiert.
  • (11) SUBSCRIPTION_PAUSE_SCHEDULE_CHANGED: Der Pausenplan für ein Abo wurde geändert.
  • (12) SUBSCRIPTION_REVOKED: Ein Abo wurde vor Ablauf vom Nutzer widerrufen.
  • (13) SUBSCRIPTION_EXPIRED: Ein Abo ist abgelaufen.
  • (17) SUBSCRIPTION_ITEMS_CHANGED: Ein Artikel in einem Abo-Bundle wurde geändert.
  • (18) SUBSCRIPTION_CANCELLATION_SCHEDULED: Eine Kündigung für ein Abo mit Ratenzahlung wurde so geplant, dass sie am Ende der Mindestlaufzeit in Kraft tritt.
  • (19) SUBSCRIPTION_PRICE_CHANGE_UPDATED: Die Details zur Preisänderung eines Abo-Artikels wurden aktualisiert.
  • (20) SUBSCRIPTION_PENDING_PURCHASE_CANCELED: Eine ausstehende Transaktion für ein Abo wurde storniert.
  • (22) SUBSCRIPTION_PRICE_STEP_UP_CONSENT_UPDATED: Der Zeitraum für die Einwilligung zur Preiserhöhung für ein Abo hat begonnen oder der Nutzer hat der Preiserhöhung zugestimmt. Diese Entwicklerbenachrichtigung in Echtzeit wird nur für Abos in einer Region gesendet, in der eine Preiserhöhung erforderlich ist.
purchaseToken String Das Token, das dem Gerät des Nutzers beim Kauf des Abos zur Verfügung gestellt wurde.

Beispiel

Hier ist ein Beispiel für eine Benachrichtigung über einen neuen Abo-Kauf:

{
  "version":"1.0",
  "packageName":"com.some.thing",
  "eventTimeMillis":"1503349566168",
  "subscriptionNotification":
  {
    "version":"1.0",
    "notificationType":4,
    "purchaseToken":"PURCHASE_TOKEN"
  }
}

OneTimeProductNotification

Eine OneTimeProductNotification enthält die folgenden Felder:

{
  "version": string,
  "notificationType": int,
  "purchaseToken": string,
  "sku": string
}
Attributname Wert Beschreibung
Version String Die Version dieser Benachrichtigung. Anfangs ist das „1.0“. Diese Version unterscheidet sich von anderen Versionsfeldern.
notificationType int Die Art der Benachrichtigung. Kann die folgenden Werte haben:
  • (1) ONE_TIME_PRODUCT_PURCHASED: Ein Einmalkaufprodukt wurde von einem Nutzer gekauft.
  • (2) ONE_TIME_PRODUCT_CANCELED: Ein Einmalkaufprodukt wurde storniert oder widerrufen.
purchaseToken String Das Token, das dem Gerät des Nutzers beim Kauf zur Verfügung gestellt wurde.
SKU String Die Produkt-ID des gekauften Einmalkaufprodukts (z. B. „sword_001“)

Beispiel

Hier ist ein Beispiel für eine Benachrichtigung über einen neuen einmaligen Kauf:

{
  "version":"1.0",
  "packageName":"com.some.thing",
  "eventTimeMillis":"1503349566168",
  "oneTimeProductNotification":
  {
    "version":"1.0",
    "notificationType":1,
    "purchaseToken":"PURCHASE_TOKEN",
    "sku":"my.sku"
  }
}

VoidedPurchaseNotification

Eine VoidedPurchaseNotification enthält die folgenden Felder:

Attributname Wert Beschreibung

purchaseToken

string

Das Token, das mit dem stornierten Kauf verknüpft ist. Diese Informationen werden dem Entwickler bei einem neuen Kauf zur Verfügung gestellt.

orderId

string

Die eindeutige Bestell-ID, die mit der stornierten Transaktion verknüpft ist. Bei Einmalkäufen ist dies die einzige Bestell-ID die für den Kauf generiert wird. Bei Abos mit automatischer Verlängerung wird für jede Verlängerungstransaktion eine neue Bestell-ID generiert.

productType

int

Der productType für einen stornierten Kauf kann die folgenden Werte haben:

  • (1) PRODUCT_TYPE_SUBSCRIPTION - Ein Abo-Kauf wurde storniert.
  • (2) PRODUCT_TYPE_ONE_TIME: Ein einmaliger Kauf wurde storniert.

refundType

int

Der refundType für einen stornierten Kauf kann die folgenden Werte haben:

  • (1) REFUND_TYPE_FULL_REFUND: Der Kauf wurde vollständig storniert.
  • (2) REFUND_TYPE_QUANTITY_BASED_PARTIAL_REFUND – Der Kauf wurde durch eine mengenbasierte teilweise Erstattung, die nur für Käufe mit mehreren Mengen gilt, teilweise storniert. Ein Kauf kann teilweise storniert werden.

Wenn die verbleibende Gesamtmenge eines Kaufs mit mehreren Artikeln erstattet wird, ist refundType gleich REFUND_TYPE_FULL_REFUND.

Beispiel

Hier ist ein Beispiel für eine Benachrichtigung über einen neuen stornierten Kauf:

{
  "version":"1.0",
  "packageName":"com.some.app",
  "eventTimeMillis":"1503349566168",
  "voidedPurchaseNotification":
  {
    "purchaseToken":"PURCHASE_TOKEN",
    "orderId":"GS.0000-0000-0000",
    "productType":1
    "refundType":1
  }
}

VoidedPurchaseNotification verwenden

Wenn Ihr Entwicklerbenachrichtigungs-Client in Echtzeit eine VoidedPurchaseNotification erhält, beachten Sie die folgenden Informationen:

  • packageName: Gibt die App an.
  • eventTimeMillis: Informiert Sie über den Zeitpunkt der Statusänderung.
  • purchaseToken: Das Token, das dem Gerät des Nutzers beim Kauf des Produkts zur Verfügung gestellt wurde.
  • orderId: Gibt die Bestellung an, die mit der stornierten Transaktion verknüpft ist.
  • productType: Gibt an, ob es sich bei dem stornierten Kauf um einen In-App-Kauf oder ein Abo handelt.
  • refundType: Gibt die Art der Erstattung an, durch die der Kauf storniert wurde.

PendingRefundReviewNotification

Eine PendingRefundReviewNotification wird gesendet, wenn ein Nutzer eine Rückbuchung für einen Kauf beantragt und der Antrag vom Entwickler überprüft werden muss. Wenn Sie diese Benachrichtigung erhalten, sollten Sie den Antrag prüfen und innerhalb von 24 Stunden einen Erstattungsvorschlag und einen Nachweis zur Nutzung des Kaufs einreichen. Rufen Sie dazu die ReviewRefund API auf.

Eine PendingRefundReviewNotification enthält die folgenden Felder:

{
  "version": string,
  "pendingRefundToken": string,
  "orderId": string,
  "refundReason": int,
  "obfuscatedAccountId": string,
  "obfuscatedProfileId": string
}
Attributname Wert Beschreibung
Version String Die Version dieser Benachrichtigung. Anfangs ist das „1.0“. Diese Version unterscheidet sich von anderen Versionsfeldern.
pendingRefundToken String Ein eindeutiges Token, das den ausstehenden Erstattungsantrag identifiziert, der überprüft wird. Übergeben Sie dieses Token, wenn Sie die ReviewRefund API aufrufen.
orderId String Die Bestell-ID des Kaufs, der der ausstehenden Erstattungsüberprüfung unterliegt.
refundReason int Der Grund für den Erstattungsantrag. Bei ausstehenden Überprüfungen wird nur CHARGEBACK (7) als Grund für die Erstattung unterstützt. Ihr Code sollte neue Gründe verarbeiten, sobald sie verfügbar sind.
obfuscatedAccountId String (Falls zutreffend) Die verschleierte, vom Entwickler angegebene Nutzerkonto-ID, die beim Kauf angegeben wurde.
obfuscatedProfileId String (Falls zutreffend) Die verschleierte, vom Entwickler angegebene Profil-ID, die beim Kauf angegeben wurde.

Beispiel

Hier ist ein Beispiel für eine Benachrichtigung über eine ausstehende Erstattungsüberprüfung:

{
  "version":"1.0",
  "packageName":"com.some.thing",
  "eventTimeMillis":"1503350156918",
  "pendingRefundReviewNotification":
  {
    "version":"1.0",
    "pendingRefundToken":"example-token",
    "orderId":"GPA.1234-5678-9012-34567",
    "refundReason":7,
    "obfuscatedAccountId":"user-account-id",
    "obfuscatedProfileId":"user-profile-id"
  }
}

TestNotification

Eine TestNotification enthält die folgenden Felder:

{
  "version": string
}
Attributname Wert Beschreibung
Version String Die Version dieser Benachrichtigung. Anfangs ist das „1.0“. Diese Version unterscheidet sich von anderen Versionsfeldern.

Beispiel

Hier ist ein Beispiel für eine Testbenachrichtigung:

{
  "version":"1.0",
  "packageName":"com.some.thing",
  "eventTimeMillis":"1503350156918",
  "testNotification":
  {
    "version":"1.0"
  }
}