Przewodnik po powiadomieniach w czasie rzeczywistym dla deweloperów

Ten dokument zawiera listę i opis typów powiadomień dewelopera w czasie rzeczywistym, które możesz otrzymywać z Google Play.

Kodowanie

Każda publikacja w temacie Cloud Pub/Sub zawiera jedno pole danych zakodowane w formacie base64.

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

Po zdekodowaniu pola danych zakodowanego w formacie base64 element DeveloperNotification zawiera te pola:

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

Te pola są opisane w tabeli poniżej.

Nazwa właściwości Wartość Opis
wersja tekst Wersja tego powiadomienia. Początkowo jest to „1.0”. Ta wersja różni się od innych pól wersji.
packageName tekst Nazwa pakietu aplikacji, której dotyczy to powiadomienie (np. `com.some.thing`).
eventTimeMillis długi Sygnatura czasowa wystąpienia zdarzenia w milisekundach od początku epoki.
subscriptionNotification SubscriptionNotification

Jeśli to pole jest obecne, powiadomienie dotyczy subskrypcji, a to pole zawiera dodatkowe informacje o subskrypcji.

Pamiętaj, że to pole wyklucza się wzajemnie z polami pendingRefundReviewNotification, oneTimeProductNotification, voidedPurchaseNotification i testNotification.

oneTimeProductNotification OneTimeProductNotification

Jeśli to pole jest obecne, powiadomienie dotyczy zakupu jednorazowego, a to pole zawiera dodatkowe informacje o zakupie.

Pamiętaj, że to pole wyklucza się wzajemnie z polami pendingRefundReviewNotification, subscriptionNotification, voidedPurchaseNotification i testNotification.

voidedPurchaseNotification VoidedPurchaseNotification

Jeśli to pole jest obecne, powiadomienie dotyczy anulowanego zakupu, a to pole zawiera dodatkowe informacje o anulowanym zakupie.

Pamiętaj, że to pole wyklucza się wzajemnie z polami pendingRefundReviewNotification, oneTimeProductNotification, subscriptionNotification i testNotification.

pendingRefundReviewNotification PendingRefundReviewNotification

Jeśli to pole jest obecne, powiadomienie dotyczy a żądania obciążenia zwrotnego, w przypadku którego możesz zaproponować rozwiązanie. Odpowiedz na to powiadomienie, wywołując interfejs API `ReviewRefund`.

Pamiętaj, że to pole wyklucza się wzajemnie z polami subscriptionNotification, oneTimeProductNotification, voidedPurchaseNotification, and testNotification.

testNotification TestNotification

Jeśli to pole jest obecne, powiadomienie dotyczy a testowej publikacji. Są one wysyłane tylko przez Konsolę Google Play.

Pamiętaj, że to pole wyklucza się wzajemnie z pendingRefundReviewNotification, oneTimeProductNotification, subscriptionNotification i voidedPurchaseNotification.

SubscriptionNotification

Element SubscriptionNotification zawiera te pola:

{
  "version": string,
  "notificationType": int,
  "purchaseToken": string
}
Nazwa właściwości Wartość Opis
wersja tekst Wersja tego powiadomienia. Początkowo jest to „1.0”. Ta wersja różni się od innych pól wersji.
notificationType int Wartość notificationType w przypadku subskrypcji może przyjmować te wartości:
  • (1) SUBSCRIPTION_RECOVERED – subskrypcja została wznowiona po zawieszeniu konta lub wznowiona po wstrzymaniu.
  • (2) SUBSCRIPTION_RENEWED – aktywna subskrypcja została odnowiona.
  • (3) SUBSCRIPTION_CANCELED – subskrypcja została anulowana dobrowolnie lub niedobrowolnie. W przypadku dobrowolnego anulowania powiadomienie jest wysyłane, gdy użytkownik anuluje subskrypcję.
  • (4) SUBSCRIPTION_PURCHASED – kupiono nową subskrypcję.
  • (5) SUBSCRIPTION_ON_HOLD – subskrypcja została zawieszona (jeśli ta opcja jest włączona).
  • (6) SUBSCRIPTION_IN_GRACE_PERIOD – subskrypcja jest w okresie prolongaty (jeśli ta opcja jest włączona).
  • (7) SUBSCRIPTION_RESTARTED – użytkownik przywrócił swoją subskrypcję w sekcji Play > Konto > Subskrypcje. Subskrypcja została anulowana, ale nie wygasła, gdy użytkownik ją przywrócił. Więcej informacji znajdziesz w sekcji Przywracanie.
  • (8) SUBSCRIPTION_PRICE_CHANGE_CONFIRMED (WYCOFANE) – użytkownik potwierdził zmianę ceny subskrypcji.
  • (9) SUBSCRIPTION_DEFERRED – czas odnowienia subskrypcji został wydłużony.
  • (10) SUBSCRIPTION_PAUSED – subskrypcja została wstrzymana.
  • (11) SUBSCRIPTION_PAUSE_SCHEDULE_CHANGED – zmieniono harmonogram wstrzymania subskrypcji.
  • (12) SUBSCRIPTION_REVOKED – subskrypcja została cofnięta użytkownikowi przed upływem terminu ważności.
  • (13) SUBSCRIPTION_EXPIRED – subskrypcja wygasła.
  • (17) SUBSCRIPTION_ITEMS_CHANGED – zmieniono element w pakiecie subskrypcji.
  • (18) SUBSCRIPTION_CANCELLATION_SCHEDULED – anulowanie subskrypcji ratalnej zostało zaplanowane na koniec okresu zobowiązania.
  • (19) SUBSCRIPTION_PRICE_CHANGE_UPDATED – zaktualizowano szczegóły zmiany ceny elementu subskrypcji.
  • (20) SUBSCRIPTION_PENDING_PURCHASE_CANCELED – oczekująca transakcja subskrypcji została anulowana.
  • (22) SUBSCRIPTION_PRICE_STEP_UP_CONSENT_UPDATED – rozpoczął się okres zgody na podwyżkę ceny subskrypcji lub użytkownik wyraził zgodę na podwyżkę ceny. To powiadomienie dewelopera w czasie rzeczywistym jest wysyłane tylko w przypadku subskrypcji w regionie, w którym wymagana jest podwyżka ceny.
purchaseToken tekst Token przekazany na urządzenie użytkownika podczas zakupu subskrypcji.

Przykład

Oto przykład powiadomienia o nowym zakupie subskrypcji:

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

OneTimeProductNotification

Element OneTimeProductNotification zawiera te pola:

{
  "version": string,
  "notificationType": int,
  "purchaseToken": string,
  "sku": string
}
Nazwa właściwości Wartość Opis
wersja tekst Wersja tego powiadomienia. Początkowo będzie to „1.0”. Ta wersja różni się od innych pól wersji.
notificationType int Typ powiadomienia. Może przyjmować te wartości:
  • (1) ONE_TIME_PRODUCT_PURCHASED – użytkownik nabył produkt kupowany raz.
  • (2) ONE_TIME_PRODUCT_CANCELED – użytkownik anulował oczekujący zakup produktu kupowanego raz.
purchaseToken tekst Token przekazany na urządzenie użytkownika podczas zakupu.
sku tekst Identyfikator kupionego produktu kupowanego raz (np. „sword_001”).

Przykład

Oto przykład powiadomienia o nowym zakupie jednorazowym:

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

VoidedPurchaseNotification

Element VoidedPurchaseNotification zawiera te pola:

Nazwa właściwości Wartość Opis

purchaseToken

string

Token powiązany z anulowanym zakupem. Te informacje są przekazywane deweloperowi, gdy nastąpi nowy zakup

orderId

string

Unikalny identyfikator zamówienia powiązany z anulowaną transakcją. W przypadku zakupów jednorazowych jest to jedyny identyfikator zamówienia wygenerowany na potrzeby zakupu. W przypadku subskrypcji z automatycznym odnawianiem dla każdej transakcji odnowienia generowany jest nowy identyfikator zamówienia.

productType

int

Wartość productType w przypadku anulowanego zakupu może przyjmować te wartości:

  • (1) PRODUCT_TYPE_SUBSCRIPTION – anulowano zakup subskrypcji.
  • (2) PRODUCT_TYPE_ONE_TIME – anulowano zakup jednorazowy.

refundType

int

Wartość refundType w przypadku anulowanego zakupu może przyjmować te wartości:

  • (1) REFUND_TYPE_FULL_REFUND – zakup został w całości anulowany.
  • (2) REFUND_TYPE_QUANTITY_BASED_PARTIAL_REFUND – zakup został częściowo anulowany przez częściowy zwrot środków na podstawie ilości. Dotyczy to tylko zakupów z większą liczbą produktów. Zakup można częściowo anulować kilka razy.

Gdy zwracana jest pozostała łączna liczba produktów w zakupie z większą liczbą produktów, wartość refundType to REFUND_TYPE_FULL_REFUND.

Przykład

Oto przykład powiadomienia o nowym anulowanym zakupie:

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

Odbieranie powiadomienia VoidedPurchaseNotification

Gdy klient powiadomień dewelopera w czasie rzeczywistym otrzyma powiadomienie VoidedPurchaseNotification, zwróć uwagę na te informacje:

  • packageName: identyfikuje aplikację.
  • eventTimeMillis: informuje o czasie, w którym nastąpiła zmiana stanu.
  • purchaseToken: token przekazany na urządzenie użytkownika podczas zakupu produktu.
  • orderId: identyfikuje zamówienie powiązane z anulowaną transakcją.
  • productType: wskazuje, czy anulowany zakup był zakupem w aplikacji czy subskrypcją.
  • refundType: określa typ zwrotu środków, który spowodował anulowanie zakupu.

PendingRefundReviewNotification

Powiadomienie PendingRefundReviewNotification jest wysyłane, gdy użytkownik poprosi o obciążenie zwrotne za zakup, a żądanie wymaga sprawdzenia przez dewelopera. Gdy otrzymasz to powiadomienie, musisz ocenić żądanie i zaproponować zwrot środków oraz przedstawić dowód użycia zakupu w ciągu 24 godzin, wywołując interfejs API ReviewRefund.

Element PendingRefundReviewNotification zawiera te pola:

{
  "version": string,
  "pendingRefundToken": string,
  "orderId": string,
  "refundReason": int,
  "obfuscatedAccountId": string,
  "obfuscatedProfileId": string
}
Nazwa właściwości Wartość Opis
wersja tekst Wersja tego powiadomienia. Początkowo jest to „1.0”. Ta wersja różni się od innych pól wersji.
pendingRefundToken tekst Unikalny token, który identyfikuje oczekujące żądanie zwrotu środków. Przekaż ten token podczas wywoływania interfejsu API ReviewRefund.
orderId tekst Identyfikator zamówienia zakupu, którego dotyczy oczekująca opinia o zwrocie środków.
refundReason int Powód żądania zwrotu środków. W przypadku oczekujących opinii jako powód zwrotu środków obsługiwane jest tylko obciążenie zwrotne (CHARGEBACK) (7). Twój kod powinien obsługiwać nowe powody, gdy staną się dostępne.
obfuscatedAccountId tekst (Jeśli dotyczy) Zaszyfrowany identyfikator konta użytkownika określony przez dewelopera, który został podany podczas zakupu.
obfuscatedProfileId tekst (Jeśli dotyczy) Zaszyfrowany identyfikator profilu określony przez dewelopera, który został podany podczas zakupu.

Przykład

Oto przykład powiadomienia o oczekującej opinii o zwrocie środków:

{
  "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

Element TestNotification zawiera te pola:

{
  "version": string
}
Nazwa właściwości Wartość Opis
wersja tekst Wersja tego powiadomienia. Początkowo jest to „1.0”. Ta wersja różni się od innych pól wersji.

Przykład

Oto przykład powiadomienia testowego:

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