W tym dokumencie opisujemy, jak używać powiadomień push, które informują aplikację o zmianie zasobu.
Przegląd
Interfejs Admin SDK API zapewnia powiadomienia push, które pozwalają obserwować zmiany w zasobach. Możesz użyć tej funkcji, aby zwiększyć wydajność aplikacji. Pozwala to wyeliminować dodatkowe koszty sieci i mocy obliczeniowej związane z zasobami odpytywania w celu określenia, czy uległy zmianie. Za każdym razem, gdy zmieni się obserwowany zasób, interfejs Admin SDK API powiadomi Twoją aplikację.
Aby używać powiadomień push, musisz wykonać 2 rzeczy:
Skonfiguruj docelowy adres URL lub odbiornik poczty internetowej.
To serwer HTTPS, który obsługuje komunikaty powiadomień interfejsu API wywoływane po zmianie zasobu.
Skonfiguruj kanał powiadomień dla każdego punktu końcowego zasobów, który chcesz obejrzeć.
Kanał określa informacje o routingu wiadomości z powiadomieniami. W ramach konfiguracji kanału określasz adres URL, na który chcesz otrzymywać powiadomienia. Za każdym razem, gdy zasób zasobu się zmieni, interfejs Admin SDK API wyśle powiadomienie w postaci żądania
POST
na ten adres URL.
Obecnie interfejs Admin SDK API obsługuje powiadomienia o zmianach w zasobie Aktywności.
Tworzenie kanałów powiadomień
Aby żądać powiadomień push, musisz skonfigurować kanał powiadomień dla każdego zasobu, który chcesz oglądać. Gdy skonfigurujesz kanały powiadomień, interfejs Admin SDK API poinformuje Twoją aplikację o każdej zmianie zasobu.
Zgłaszanie próśb o obejrzenie
Z każdym dostępnym do oglądania zasobami interfejsu Admin SDK API powiązana jest metoda watch
z identyfikatorem URI takiej formy:
https://www.googleapis.com/apiName/apiVersion/resourcePath/watch
Aby skonfigurować kanał powiadomień dla wiadomości o zmianach w konkretnym zasobie, wyślij żądanie POST
do metody watch
dla tego zasobu.
Każdy kanał powiadomień jest powiązany z konkretnym użytkownikiem i określonym zasobem (lub zbiorem zasobów). Żądanie watch
nie zostanie zrealizowane, jeśli bieżący użytkownik lub konto usługi nie będą właścicielami lub dostępem do tego zasobu.
Przykłady
Wszystkie żądania zegarka dotyczące zasobu aktywności 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. }
Za pomocą parametrów userKey, applicationName, eventName
i filters
możesz otrzymywać powiadomienia tylko o określonych zdarzeniach, użytkownikach lub aplikacjach.
Uwaga: w poniższych przykładach żądanie jest niejasne.
Przeglądanie wszystkich czynności administracyjnych:
POST https://admin.googleapis.com/admin/reports/v1/activity/users/all/applications/admin/watch
Wszystkie działania dotyczące dokumentów:
POST https://admin.googleapis.com/admin/reports/v1/activity/users/all/applications/docs/watch
Aktywność określonego administratora w przypadku określonego użytkownika:
POST https://admin.googleapis.com/admin/reports/v1/activity/users/liz@example.com/applications/admin/watch
Czekaj na określone zdarzenie, na przykład zmianę hasła użytkownika:
POST https://admin.googleapis.com/admin/reports/v1/activity/users/all/applications/admin/watch?eventName=CHANGE_PASSWORD
Sprawdź 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ć:
-
Ciąg właściwości
id
, który jednoznacznie identyfikuje nowy kanał powiadomień w Twoim projekcie. Zalecamy użycie unikalnego identyfikatora uniwersalnego (UUID) lub podobnego unikalnego ciągu. Maksymalna długość: 64 znaki.Ustawiona wartość identyfikatora jest odczytywana w nagłówku
X-Goog-Channel-Id
każdej wiadomości z powiadomieniem dotyczącej tego kanału. -
Ciąg właściwości
type
ustawiony na wartośćweb_hook
. -
Ciąg właściwości
address
ustawiony na adres URL, który nasłuchuje powiadomień z tego kanału powiadomień i odpowiada na nie. To jest adres URL wywołania zwrotnego webhooka i musi używać protokołu HTTPS.Pamiętaj, że interfejs Admin SDK API będzie mógł wysyłać powiadomienia na ten adres HTTPS tylko wtedy, gdy na serwerze WWW jest zainstalowany ważny certyfikat SSL. Nie prawidłowe certyfikaty to między innymi:
- podpisane samodzielnie,
- podpisane przez niezaufane źródło,
- unieważnione.
- Certyfikaty o charakterze zgodnym z nazwą hosta docelowego.
Właściwości opcjonalne
W żądaniu watch
możesz też określić te opcjonalne pola:
-
Właściwość
token
, która określa dowolną wartość ciągu znaków, który ma być używany jako token kanału. Tokenów kanału powiadomień można używać do różnych celów. Na przykład możesz użyć tokena, aby sprawdzić, czy każda wiadomość przychodzących pochodzi z kanału utworzonego przez aplikację, dzięki czemu powiadomienie nie będzie sfałszowane, lub aby kierować wiadomość do odpowiedniego miejsca docelowego 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
każdej wiadomości z powiadomieniem, którą otrzymuje Twój kanał.Jeśli używasz tokenów kanałów powiadomień, zalecamy wykonanie tych czynności:
Użyj elastycznego formatu kodowania, takiego jak parametry zapytania z adresu URL. Przykład:
forwardTo=hr&createdBy=mobile
Nie podawaj danych wrażliwych, takich jak tokeny OAuth.
-
Ciąg właściwości
expiration
ustawiony na sygnatura czasowa Unix (w ms) daty i godziny, kiedy interfejs Admin SDK API ma przestać wysyłać wiadomości dla tego kanału powiadomień.Jeśli czas trwania kanału jest określony, zostanie on uwzględniony jako wartość nagłówka HTTP
X-Goog-Channel-Expiration
(tym razem w postaci zrozumiałej dla człowieka) w każdym powiadomieniu wysyłanym do aplikacji przez ten kanał.
Więcej informacji o żądaniu znajdziesz w metodzie watch
zasobu Aktywności w dokumentacji API.
Obserwuj odpowiedź
Jeśli żądanie watch
utworzy kanał powiadomień, będzie zwracać kod stanu HTTP 200 OK
.
Treść wiadomości z odpowiedzi na zegarek zawiera informacje o stworzeniu właśnie utworzonego kanału powiadomień (przykład 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, zwracane informacje obejmują też resourceId
i resourceUri
, które wskazują zasób wyświetlany w tym kanale powiadomień.
Te informacje możesz przekazywać do innych operacji związanych z kanałami powiadomień, na przykład wtedy, gdy chcesz przestać otrzymywać powiadomienia.
Więcej informacji o odpowiedzi znajdziesz w metodzie watch
dotyczącej zasobu Aktywności w dokumentacji API.
Synchronizuj wiadomość
Gdy utworzysz nowy kanał powiadomień, żeby obejrzeć zasób, interfejs Admin SDK API wyśle komunikat sync
z informacją o rozpoczęciu powiadomień. Wartość nagłówka HTTP X-Goog-Resource-State
tych wiadomości to sync
. Ze względu na problemy z czasem sieciowym może się zdarzyć, że otrzymasz wiadomość sync
, jeszcze zanim otrzymasz odpowiedź metody watch
.
Możesz zignorować powiadomienie sync
, ale możesz z niego skorzystać. Jeśli na przykład postanowisz nie zachowywać kanału, możesz użyć wartości X-Goog-Channel-ID
i X-Goog-Resource-ID
w wywołaniu, aby wyłączyć powiadomienia. Możesz też użyć powiadomienia sync
, aby przeprowadzić inicjację na potrzeby przyszłych zdarzeń.
Format wiadomości sync
wysyłanych przez interfejs Admin SDK API na adres docelowy jest widoczny poniżej.
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 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
równą 1. Każde kolejne powiadomienie z tego kanału będzie mieć numer wiadomości wyższy od poprzedniego, ale numery wiadomości nie będą sekwencyjne.
Odnawianie kanałów powiadomień
Kanał powiadomień może mieć okres ważności, którego wartość jest określana na podstawie żądania albo wewnętrznych limitów lub domyślnych interfejsów Admin SDK API (używana jest bardziej restrykcyjna wartość). Czas wygaśnięcia kanału (jeśli go ma) jest podany jako sygnatura czasowa Unix (w ms) w informacjach zwracanych przez metodę watch
. Dodatkowo data i godzina wygaśnięcia (w formacie czytelnym dla człowieka) jest podana w nagłówku HTTP X-Goog-Channel-Expiration
w powiadomieniach, które aplikacja otrzymuje w związku z danym kanałem.
Obecnie nie ma możliwości automatycznego odnawiania kanału powiadomień. Gdy zbliża się data wygaśnięcia ważności kanału, musisz utworzyć nowy, wywołując metodę watch
. Jak zawsze musisz użyć unikalnej wartości właściwości id
nowego kanału. Pamiętaj, że okres aktywności obu kanałów powiadomień dotyczących tego samego zasobu może być okresu.
Odbieranie powiadomień
Za każdym razem, gdy zmieni się obserwowany zasób, aplikacja otrzyma powiadomienie z opisem zmiany. Interfejs Admin SDK API wysyła te wiadomości jako żądania HTTPS POST
na adres URL podany jako "address" dla tego kanału powiadomień.
Omówienie formatu wiadomości z powiadomieniem
Wszystkie powiadomienia 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 Admin SDK API na adres URL odbiorcy zawierają te nagłówki HTTP:
Nagłówek | Opis |
---|---|
Zawsze dostępne | |
|
Identyfikator UUID lub inny unikalny ciąg znaków podany przez Ciebie do zidentyfikowania tego kanału powiadomień. |
|
Liczba całkowita, która identyfikuje tę wiadomość w przypadku tego kanału powiadomień. Wartość w przypadku sync wiadomości wynosi 1. Liczba wiadomości wzrasta w przypadku każdej kolejnej wiadomości na kanale, ale nie są one sekwencyjne. |
|
Nieprzezroczysta wartość identyfikująca oglądany zasób. Ten identyfikator jest stały w przypadku wersji interfejsu API. |
|
Nowy stan zasobu, który wywołał powiadomienie.
Możliwe wartości: sync lub nazwa zdarzenia.
|
|
Identyfikator specyficzny dla interfejsu API dla obserwowanego zasobu. |
Czasami występuje | |
|
Data i godzina wygaśnięcia kanału powiadomień podana w postaci zrozumiałej dla człowieka. Wartość dostępna tylko wtedy, gdy jest zdefiniowana. |
|
Token kanału powiadomień ustawiony przez Twoją aplikację, którego możesz używać do weryfikowania źródła powiadomień. Jest obecny tylko wtedy, gdy jest zdefiniowany. |
Treść powiadomień dotyczących działań zawiera te informacje w treści żądania:
Właściwość | Opis |
---|---|
kind |
Określa to jako zasób aktywności. Wartość: stały ciąg "admin#reports#activity ". |
id |
Unikalny identyfikator rekordu aktywności. |
id.time |
Czas wystąpienia aktywności. Wartość powinna być w formacie ISO 8601. Godzina jest pełną datą oraz godzinami, minutami i sekundami w formacie RRRR-MM-DDTgg:mm:ssTZD. np. 2010-04-05T17:30:04+01:00. |
id.uniqueQualifier |
Unikalny kwalifikator, jeśli wiele zdarzeń ma ten sam czas. |
id.applicationName |
Nazwa aplikacji, do której należy zdarzenie. Możliwe wartości: |
id.customerId |
Niepowtarzalny identyfikator konta Google Workspace. |
actor |
Użytkownik wykonuje działanie. |
actor.callerType |
Typ autora, który wykonał działanie widoczne w raporcie. W tym interfejsie interfejsu API callerType jest żądaniem USER lub 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 użytkownika Google Workspace. |
ownerDomain |
Domena konsoli administracyjnej lub właściciela dokumentu Dokumentów. Jest to domena, której dotyczy raport. |
ipAddress |
Adres IP użytkownika wykonującego działanie. Jest to adres IP użytkownika podczas logowania się w Google Workspace, który może, ale nie musi, odzwierciedlać jego fizyczną lokalizację. Może to być na przykład adres serwera proxy użytkownika lub wirtualna sieć prywatna (VPN). Interfejs API obsługuje IPv4 i IPv6. |
events[] |
Zdarzenia w raporcie. |
events[].type |
Typ zdarzenia. Usługa lub funkcja Google Workspace, którą administrator zmieni, jest określana we właściwości type , która identyfikuje zdarzenie przy użyciu właściwości eventName . |
events[].name |
Nazwa zdarzenia. To jest nazwa aktywności zgłaszanej przez interfejs API. Każda właściwość eventName jest powiązana z konkretną usługą lub funkcją Google Workspace, którą interfejs API dzieli na typy zdarzeń.
Ogólnie o parametrach żądań eventName :
|
events[].parameters[] |
Pary wartości parametrów na potrzeby różnych aplikacji. |
events[].parameters[].name |
Nazwa parametru. |
events[].parameters[].value |
Wartość ciągu przypisana do parametru. |
events[].parameters[].intValue |
Wartość w formie liczby całkowitej. |
events[].parameters[].boolValue |
Wartość logiczna parametru. |
Przykłady
Komunikaty o zdarzeniach dotyczących zasobu aktywności mają ogólny format:
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 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" } ] } ] }
Odpowiadanie na powiadomienia
Aby wskazać, że projekt zakończył się powodzeniem, możesz użyć dowolnego z tych kodów stanu: 200
, 201
, 202
, 204
lub 102
.
Jeśli Twoja usługa używa biblioteki klienta interfejsu API Google& Każdy inny kod stanu zwrotu jest uznawany za niepowodzenie wiadomości.
Zdarzenia dotyczące powiadomień w interfejsie Admin SDK API
Ta sekcja zawiera szczegółowe informacje na temat wiadomości, które możesz otrzymywać, gdy używasz powiadomień push za pomocą interfejsu Admin SDK API.
Powiadomienia push w interfejsie Reports API zawierają 2 rodzaje wiadomości: synchronizację i powiadomienia o zdarzeniach. 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:
Zatrzymuję powiadomienia
Data ważności wygasa, gdy powiadomienia są zatrzymywane automatycznie. Możesz zrezygnować z otrzymywania powiadomień z danego kanału, zanim straci ważność, wywołując metodę stop
za pomocą tego identyfikatora URI:
https://www.googleapis.com/admin/reports_v1/channels/stop
Ta metoda wymaga podania właściwości co najmniej id
i właściwości resourceId
, jak pokazano w poniższym przykładzie. Pamiętaj, że nawet jeśli interfejs Admin SDK API zawiera kilka typów zasobów z metodami watch
, występuje tylko jedna metoda stop
.
Tylko użytkownicy z odpowiednimi uprawnieniami mogą zatrzymać kanał. W szczególności:
- Jeżeli kanał został utworzony przez zwykłego użytkownika, może to powstrzymać tylko ten sam użytkownik (zgodnie z identyfikatorami klienta OAuth 2.0), który utworzył kanał.
- Jeśli kanał został utworzony za pomocą konta usługi, wszyscy użytkownicy tego samego klienta mogą go zatrzymać.
POST https://www.googleapis.com/admin/reports_v1/channels/stop Authorization: Bearer {auth_token_for_current_user} Content-Type: application/json { "id": "4ba78bf0-6a47-11e2-bcfd-0800200c9a66", "resourceId": "ret08u3rv24htgh289g" }