Powiadomienia push

Z tego dokumentu dowiesz się, jak używać powiadomień push, które informują aplikację o zmianach zasobu.

Omówienie

Interfejs API pakietu Admin SDK umożliwia wysyłanie powiadomień push, które pozwalają monitorować zmiany w zasobach. Możesz użyć tej funkcji, aby zwiększyć wydajność swojej aplikacji. Dzięki temu możesz wyeliminować dodatkowe koszty sieci i przetwarzania związane z zasobami ankietowania, aby określić, czy uległy zmianie. Za każdym razem, gdy obserwowany zasób się zmieni, interfejs Admin SDK API powiadomi Twoją aplikację.

Aby korzystać z powiadomień push, musisz wykonać 2 czynności:

  • Skonfiguruj adres URL odbierania lub odbiornik wywołań zwrotnych „webhooka”.

    To serwer HTTPS, który obsługuje wiadomości z powiadomieniami interfejsu API, które są wywoływane po zmianie zasobu.

  • Skonfiguruj (kanał powiadomień) dla każdego punktu końcowego zasobu, który chcesz obserwować.

    Kanał określa informacje o przekierowywaniu wiadomości z powiadomieniami. W ramach konfiguracji kanału musisz podać konkretny adres URL, pod którym chcesz otrzymywać powiadomienia. Gdy nastąpi zmiana zasobu kanału, interfejs Admin SDK wysyła wiadomość z powiadomieniem w postaci żądania POST do tego adresu URL.

Obecnie interfejs Admin SDK obsługuje powiadomienia o zmianach zasobów Activities.

Utwórz kanały powiadomień

Aby żądać powiadomień push, musisz skonfigurować kanał powiadomień dla każdego zasobu, który chcesz monitorować. Po skonfigurowaniu kanałów powiadomień interfejs API pakietu Admin SDK informuje aplikację o zmianach w obserwowanych zasobach.

Przesyłanie żądań dotyczących oglądania

Każdy zasób interfejsu API pakietu Admin SDK, który można oglądać, ma powiązaną metodę watch o tym adresie URI:

https://www.googleapis.com/API_NAME/API_VERSION/RESOURCE_PATH/watch

Aby skonfigurować kanał powiadomień dla wiadomości o zmianach w konkretnym zasobie, wyślij żądanie POST do metody watch tego zasobu.

Każdy kanał powiadomień jest powiązany z konkretnym użytkownikiem i konkretnym zasobem (lub zestawem zasobów). Żądanie watch nie zostanie zrealizowane, chyba że bieżący użytkownik lub konto usługi jest właścicielem tego zasobu lub ma do niego uprawnienia.

Przykłady

Wszystkie żądania oglądania zasobu Activities mają ogólny format:

POST https://admin.googleapis.com/admin/reports/v1/activity/users/userKey or all/applications/applicationName/watch
Authorization: Bearer auth_token_for_current_user
Content-Type: application/json

{
  "id": "01234567-89ab-cdef-0123456789ab", // Your channel ID.
  "type": "web_hook",
  "address": "https://mydomain.com/notifications", // Your receiving URL.
  ...
  "token": "target=myApp-myFilesChannelDest", // (Optional) Your channel token.
  "payload": true, // (Optional) Whether to include the payload (message body) in notifications.
  "expiration": 3600 // (Optional) Your requested channel expiration time.
}

Parametry userKey, applicationName, eventNamefilters umożliwiają otrzymywanie powiadomień tylko o określonych zdarzeniach, użytkownikach lub aplikacjach.

Uwaga: w przykładach poniżej pominięto treść żądania w celu ułatwienia ich zrozumienia.

Sprawdzanie wszystkich działań administratora:

POST https://admin.googleapis.com/admin/reports/v1/activity/users/all/applications/admin/watch

Sprawdzanie wszystkich działań związanych z dokumentami:

POST https://admin.googleapis.com/admin/reports/v1/activity/users/all/applications/docs/watch

Obserwuj aktywność administracyjną konkretnego użytkownika:

POST https://admin.googleapis.com/admin/reports/v1/activity/users/liz@example.com/applications/admin/watch

Obserwowanie konkretnego zdarzenia, np. zmiany hasła użytkownika:

POST https://admin.googleapis.com/admin/reports/v1/activity/users/all/applications/admin/watch?eventName=CHANGE_PASSWORD

Śledź zmiany w konkretnym dokumencie:

POST https://admin.googleapis.com/admin/reports/v1/activity/users/all/applications/docs/watch?eventName=EDIT&filters==doc_id=123456abcdef

Właściwości wymagane

W przypadku każdego żądania watch musisz podać te pola:

  • Unikalny ciąg znaków właściwości id, który jednoznacznie identyfikuje ten nowy kanał powiadomień w Twoim projekcie. Zalecamy użycie uniwersalnego identyfikatora (UUID) lub podobnego unikalnego ciągu znaków. Maksymalna długość: 64 znaki.

    Ustawiona przez Ciebie wartość identyfikatora jest odzwierciedlana w nagłówku HTTP X-Goog-Channel-Id każdego powiadomienia, które otrzymujesz z tego kanału.

  • Ciąg znaków właściwości type ustawiony na wartość web_hook.

  • ciąg znaków właściwości address ustawiony na adres URL, który nasłuchuje i odpowiada na powiadomienia dla tego kanału powiadomień. To jest adres URL wywołania zwrotnego webhooka, który musi używać protokołu HTTPS.

    Pamiętaj, że interfejs Admin SDK może wysyłać powiadomienia na ten adres HTTPS tylko wtedy, gdy na serwerze WWW jest zainstalowany prawidłowy certyfikat SSL. Nie prawidłowe certyfikaty to między innymi:

    • podpisane samodzielnie,
    • podpisane przez niezaufane źródło,
    • unieważnione.
    • Certyfikaty, których podmiot nie pasuje do docelowej nazwy hosta.

Właściwości opcjonalne

W prośbie watch możesz też podać te pola opcjonalne:

  • Właściwość token, która określa dowolną wartość ciągu znaków do użycia jako token kanału. Tokenów kanału powiadomień można używać do różnych celów. Możesz na przykład użyć tokena, aby sprawdzić, czy każda przychodząca wiadomość jest przeznaczona do kanału utworzonego przez Twoją aplikację (aby mieć pewność, że powiadomienie nie jest sfałszowane) lub przekierować wiadomość do odpowiedniego miejsca w aplikacji na podstawie celu tego kanału. Maksymalna długość: 256 znaków.

    Token znajduje się w nagłówku HTTP X-Goog-Channel-Token w każdym powiadomieniu, które aplikacja otrzymuje dla tego kanału.

    Jeśli używasz tokenów kanału powiadomień, zalecamy:

    • Użyj formatu kodowania umożliwiającego rozszerzanie, np. parametrów zapytania w adresie URL. Przykład: forwardTo=hr&createdBy=mobile

    • Nie podawaj danych wrażliwych, takich jak tokeny OAuth.

  • Ciąg właściwości expiration z sygnaturą czasową uniksową (w milisekundach) określającą datę i godzinę, kiedy interfejs API Admin SDK ma przestać wysyłać wiadomości do tego kanału powiadomień.

    Jeśli kanał ma czas ważności, jest on uwzględniany jako wartość nagłówka HTTP X-Goog-Channel-Expiration (w czytelnym dla człowieka formacie) w każdej wiadomości z powiadomieniem, którą aplikacja otrzymuje z tego kanału.

Więcej informacji o żądaniu znajdziesz w opisie metody watch dla zasobu Activities (Działania) w dokumentacji interfejsu API.

Odpowiedź

Jeśli żądanie watch tworzy kanał powiadomień, zwraca kod stanu HTTP 200 OK.

Treść odpowiedzi na obejrzenie filmu zawiera informacje o korzystaniu z konkretnego kanału powiadomień, jak pokazano w przykładzie poniżej.

{
  "kind": "api#channel",
  "id": "reportsApiId", // ID you specified for this channel.
  "resourceId": "o3hgv1538sdjfh", // ID of the watched resource.
  "resourceUri": "https://admin.googleapis.com/admin/reports/v1/activity/userKey/applications/applicationName", // Version-specific ID of the watched resource.
  "token": "target=myApp-myFilesChannelDest", // Present only if one was provided.
  "expiration": 3600, // Actual expiration time as Unix timestamp (in ms), if applicable.
}

Oprócz właściwości wysłanych w ramach żądania zwrócone informacje zawierają również atrybuty resourceId i resourceUri identyfikujące zasób obserwowany w tym kanale powiadomień.

Możesz przekazać zwrócone informacje do innych operacji na kanale powiadomień, na przykład gdy chcesz zatrzymać otrzymywanie powiadomień.

Więcej informacji o odpowiedzi znajdziesz w metodie watch dla zasobu Activities w przewodniku po interfejsie API.

Synchronizuj wiadomość

Po utworzeniu kanału powiadomień umożliwiającego oglądanie zasobu interfejs API Admin SDK wysyła komunikat sync, aby wskazać, że powiadomienia się uruchamiają. Wartość nagłówka HTTP X-Goog-Resource-State tych wiadomości to sync. Ze względu na problemy z czasem w sieci możliwe jest, że wiadomość sync zostanie wysłana, zanim otrzymasz odpowiedź metody watch.

Możesz bezpiecznie zignorować powiadomienie sync, ale możesz też z niego skorzystać. Jeśli na przykład zdecydujesz się nie zachować kanału, możesz użyć wartości X-Goog-Channel-ID i X-Goog-Resource-ID w wywołaniu, aby zatrzymać otrzymywanie powiadomień. Możesz też użyć powiadomienia sync do przeprowadzenia inicjowania, aby przygotować się na późniejsze zdarzenia.

Poniżej przedstawiamy format wiadomości sync wysyłanych przez interfejs Admin SDK do adresu URL odbierającego.

POST https://mydomain.com/notifications // Your receiving URL.
X-Goog-Channel-ID: channel-ID-value
X-Goog-Channel-Token: channel-token-value
X-Goog-Channel-Expiration: expiration-date-and-time // In human-readable format. Present only if the channel expires.
X-Goog-Resource-ID: identifier-for-the-watched-resource
X-Goog-Resource-URI: version-specific-URI-of-the-watched-resource
X-Goog-Resource-State: sync
X-Goog-Message-Number: 1

Wiadomości synchronizacji mają zawsze wartość nagłówka HTTP X-Goog-Message-Number 1. Każde kolejne powiadomienie na tym kanale ma numer większy od poprzedniego, ale numery wiadomości nie będą uporządkowane.

Odnawianie kanałów powiadomień

Kanał powiadomień może mieć czas wygaśnięcia, którego wartość jest określona na podstawie Twojego żądania lub dowolnych wewnętrznych limitów bądź wartości domyślnych interfejsu Admin SDK API (stosowana jest bardziej restrykcyjna wartość). Czas wygaśnięcia kanału, jeśli jest podany, jest podawany jako sygnatura czasowa uniksowa (w milisekundach) w informacjach zwracanych przez metodę watch. Dodatkowo data i godzina wygaśnięcia (w czytelnym dla człowieka formacie) są zawarte w każdej wiadomości z powiadomieniem, którą aplikacja otrzymuje dla tego kanału w nagłówku HTTP X-Goog-Channel-Expiration.

Obecnie nie ma automatycznego sposobu odnawiania kanału powiadomień. Gdy kanał zbliża się do daty wygaśnięcia, musisz go zastąpić nowym, wywołując metodę watch. Jak zawsze, w przypadku właściwości id nowego kanału musisz użyć unikalnej wartości. Pamiętaj, że prawdopodobnie będzie okres „nakładania się”, gdy 2 kanały powiadomień dla tego samego zasobu będą aktywne.

Otrzymywanie powiadomień

Po każdej zmianie obserwowanego zasobu aplikacja otrzyma powiadomienie z opisem zmiany. Interfejs API pakietu Admin SDK wysyła te wiadomości jako żądania HTTPS POST do adresu URL podanego jako address właściwość dla tego kanału powiadomień.

Interpretowanie formatu powiadomienia

Wszystkie wiadomości z powiadomieniami zawierają zestaw nagłówków HTTP z prefiksami X-Goog-. Niektóre typy powiadomień mogą też zawierać treść wiadomości.

Nagłówki

Wiadomości z powiadomieniami publikowane przez interfejs API Admin SDK pod adresem URL odbiorcy zawierają te nagłówki HTTP:

Nagłówek Opis
Zawsze widoczne
X-Goog-Channel-ID UUID lub inny unikalny ciąg znaków podany przez Ciebie do identyfikacji tego kanału powiadomień.
X-Goog-Message-Number Wartość całkowita identyfikująca to powiadomienie dla tego kanału powiadomień. W przypadku komunikatów sync wartość zawsze wynosi 1. Numery wiadomości zwiększają się w przypadku każdej kolejnej wiadomości na kanale, ale nie są sekwencyjne.
X-Goog-Resource-ID Nieczytelna wartość identyfikująca obserwowany zasób. Ten identyfikator jest stabilny we wszystkich wersjach interfejsu API.
X-Goog-Resource-State Nowy stan zasobu, który wywołał powiadomienie. Możliwe wartości: sync lub nazwa zdarzenia.
X-Goog-Resource-URI Identyfikator zasobu monitorowanego, który jest specyficzny dla wersji interfejsu API.
Czasami występuje
X-Goog-Channel-Expiration Data i godzina wygaśnięcia kanału powiadomień w formacie zrozumiałym dla człowieka. Występuje tylko wtedy, gdy został określony.
X-Goog-Channel-Token Token kanału powiadomień ustawiony przez Twoją aplikację, którego możesz używać do weryfikowania źródła powiadomień. Występuje tylko wtedy, gdy jest zdefiniowany.

Komunikaty z powiadomieniami o aktywności zawierają w treści żądania te informacje:

Właściwość Opis
kind wskazuje, że jest to zasób aktywności; Wartość: ustalony ciąg znaków „admin#reports#activity”.
id Unikalny identyfikator rekordu aktywności.
id.time Czas wystąpienia działania. Wartość jest podana w formacie daty i godziny ISO 8601. Czas to pełna data z godziną, minutami i sekundami w formacie RRRR-MM-DDThh:mm:ssTZD. Na przykład 2010-04-05T17:30:04+01:00.
id.uniqueQualifier Unikalny kwalifikator, jeśli wiele wydarzeń dotyczy tego samego czasu.
id.applicationName Nazwa aplikacji, do której należy zdarzenie. Możliwe wartości:
id.customerId Unikalny identyfikator konta Google Workspace.
actor Użytkownik wykonujący działanie.
actor.callerType Typ autora, który wykonał działanie wymienione w raporcie. W tej wersji interfejsu API callerType to USER lub żądanie dotyczące podmiotu w ramach OAuth 2LO, które wykonało działanie wymienione w raporcie .
actor.email Podstawowy adres e-mail użytkownika, którego działania są zgłaszane.
actor.profileId Unikalny identyfikator profilu Google Workspace użytkownika.
ownerDomain Domena konsoli administracyjnej lub właściciel dokumentów w aplikacji Dokumenty. Jest to domena, której dotyczy zdarzenie z raportu.
ipAddress Adres IP użytkownika wykonującego działanie. Jest to adres IP użytkownika logującego się w Google Workspace, który może, ale nie musi, odzwierciedlać jego fizyczną lokalizację. Przykładowo adres IP może być adresem serwera proxy użytkownika lub wirtualnej sieci prywatnej (VPN). Interfejs API obsługuje IPv4 i IPv6.
events[] Zdarzenia aktywności uwzględnione w raporcie.
events[].type Typ zdarzenia. Usługa lub funkcja Google Workspace zmieniona przez administratora jest określana we właściwości type, która identyfikuje zdarzenie za pomocą właściwości eventName.
events[].name Nazwa zdarzenia. Jest to konkretna nazwa aktywności zgłaszanej przez interfejs API. Każdy z nich eventName jest powiązany z konkretną usługą lub funkcją Google Workspace, którą interfejs API porządkuje według typów zdarzeń.
Ogólnie o parametrach żądania eventName:
  • Jeśli nie podasz argumentu eventName, raport zwróci wszystkie możliwe wystąpienia argumentu eventName.
  • Gdy wysyłasz żądanie eventName, odpowiedź interfejsu API zwraca wszystkie aktywności, które zawierają ten element eventName. Możliwe, że zwrócone działania będą miały inne właściwości eventName oprócz tej żądanej.
events[].parameters[] Pary wartości parametrów w różnych zastosowaniach.
events[].parameters[].name Nazwa parametru.
events[].parameters[].value Wartość parametru w postaci ciągu znaków.
events[].parameters[].intValue Wartość parametru (liczba całkowita).
events[].parameters[].boolValue Wartość logiczna parametru.

Przykłady

Wiadomości z powiadomieniami o zdarzeniach dotyczących zasobu aktywności mają ogólną postać:

POST https://mydomain.com/notifications // Your receiving URL.
Content-Type: application/json; utf-8
Content-Length: 0
X-Goog-Channel-ID: reportsApiId
X-Goog-Channel-Token: 398348u3tu83ut8uu38
X-Goog-Channel-Expiration: Tue, 29 Oct 2013 20:32:02 GMT
X-Goog-Resource-ID:  ret08u3rv24htgh289g
X-Goog-Resource-URI: https://admin.googleapis.com/admin/reports/v1/activity/userKey/applications/applicationName
X-Goog-Resource-State:  eventName
X-Goog-Message-Number: 10

{
  "kind": "admin#reports#activity",
  "id": {
    "time": datetime,
    "uniqueQualifier": long,
    "applicationName": string,
    "customerId": string
  },
  "actor": {
    "callerType": string,
    "email": string,
    "profileId": long
  },
  "ownerDomain": string,
  "ipAddress": string,
  "events": [
    {
      "type": string,
      "name": string,
      "parameters": [
        {
          "name": string,
          "value": string,
          "intValue": long,
          "boolValue": boolean
        }
      ]
    }
  ]
}

Przykład zdarzenia dotyczącego aktywności administratora:

POST https://mydomain.com/notifications // Your receiving URL.
Content-Type: application/json; utf-8
Content-Length: 596
X-Goog-Channel-ID: reportsApiId
X-Goog-Channel-Token: 245t1234tt83trrt333
X-Goog-Channel-Expiration: Tue, 29 Oct 2013 20:32:02 GMT
X-Goog-Resource-ID:  ret987df98743md8g
X-Goog-Resource-URI: https://admin.googleapis.com/admin/reports/v1/activity/users/all/applications/admin?alt=json
X-Goog-Resource-State:  CREATE_USER
X-Goog-Message-Number: 23

{
  "kind": "admin#reports#activity",
  "id": {
    "time": "2013-09-10T18:23:35.808Z",
    "uniqueQualifier": "-0987654321",
    "applicationName": "admin",
    "customerId": "ABCD012345"
  },
  "actor": {
    "callerType": "USER",
    "email": "admin@example.com",
    "profileId": "0123456789987654321"
  },
  "ownerDomain": "apps-reporting.example.com",
  "ipAddress": "192.0.2.0",
  "events": [
    {
      "type": "USER_SETTINGS",
      "name": "CREATE_USER",
      "parameters": [
        {
          "name": "USER_EMAIL",
          "value": "liz@example.com"
        }
      ]
    }
  ]
}

Odpowiedz na powiadomienia

Aby wskazać powodzenie, możesz zwrócić dowolny z tych kodów stanu: 200, 201, 202, 204 lub 102.

Jeśli Twoja usługa korzysta z biblioteki klienta interfejsu API Google i zwraca wartości 500,502, 503 lub 504, interfejs API Admin SDK próbuje ponownie, stosując eksponencjalne wycofanie. Każdy inny kod stanu zwrotu jest uważany za niepowodzenie dostarczenia wiadomości.

Informacje o zdarzeniach powiadomień interfejsu Admin SDK API

Ta sekcja zawiera szczegółowe informacje na temat powiadomień, które możesz otrzymywać, gdy używasz powiadomień push za pomocą interfejsu API Admin SDK.

Powiadomienia push interfejsu Reports API zawierają 2 typy wiadomości: wiadomości o synchronizacji i powiadomienia o wydarzeniach. Typ wiadomości jest podany w nagłówku HTTP X-Goog-Resource-State. Możliwe wartości powiadomień o zdarzeniach są takie same jak w przypadku metody activities.list. Każda aplikacja ma unikalne zdarzenia:

Zatrzymaj powiadomienia

Właściwość expiration określa, kiedy powiadomienia przestaną być wysyłane automatycznie. Możesz przestać otrzymywać powiadomienia z określonego kanału przed jego wygaśnięciem, wywołując metodę stop pod tym adresem URI:

https://www.googleapis.com/admin/reports_v1/channels/stop

Ta metoda wymaga podania co najmniej właściwości id i resourceId kanału, jak pokazano w przykładzie poniżej. Pamiętaj, że jeśli interfejs API pakietu Admin SDK zawiera kilka typów zasobów, które mają metody watch, to istnieje tylko jedna metoda stop.

Tylko użytkownicy z odpowiednimi uprawnieniami mogą zatrzymać kanał. W szczególności:

  • Jeśli kanał został utworzony przez zwykłe konto użytkownika, tylko ta sama osoba korzystająca z tego samego klienta (identyfikowana przez identyfikatory klienta OAuth 2.0 z tokenów uwierzytelniających) może zatrzymać kanał.
  • Jeśli kanał został utworzony przez konto usługi, każdy użytkownik z tego samego klienta może go zatrzymać.

Poniższy przykładowy kod pokazuje, jak przestać otrzymywać powiadomienia:

POST https://www.googleapis.com/admin/reports_v1/channels/stop
  
Authorization: Bearer CURRENT_USER_AUTH_TOKEN
Content-Type: application/json

{
  "id": "4ba78bf0-6a47-11e2-bcfd-0800200c9a66",
  "resourceId": "ret08u3rv24htgh289g"
}