Notificações push

Este documento descreve como usar notificações push que informam seu quando um recurso é alterado.

Visão geral

A API Admin SDK fornece notificações push que permitem monitorar mudanças nos recursos. Use esse recurso para melhorar o desempenho do seu aplicativo. Assim, você não precisa de recursos de rede e computação extras custos envolvidos com os recursos de pesquisa para determinar se eles mudaram. Sempre que um recurso monitorado é alterado, a API SDK Admin notifica seu para o aplicativo.

Para usar notificações push, você precisa fazer duas coisas:

  • Configurar o URL de recebimento ou "webhook" receptor de callback.

    Isso é um servidor HTTPS que lida com as mensagens de notificação da API que são acionada quando um recurso é alterado.

  • Configure um (canal de notificação) para cada endpoint de recurso que você quiser assistir.

    Um canal especifica informações de roteamento para notificação e envio de mensagens. Como parte da configuração do canal, você deve identificar o URL específico em que você quer receber notificações. Sempre que o recurso de um canal muda, a API Admin SDK envia uma mensagem de notificação como um POST. para esse URL.

Atualmente, a API SDK Admin é compatível com notificações de alterações em o recurso Activities.

Criar canais de notificação

Para solicitar notificações push, configure um canal de notificação para cada recurso que você quer monitorar. Depois que os canais de notificação forem definidos a API SDK Admin informa ao aplicativo quando um recurso monitorado mudanças.

Fazer solicitações de monitoramento

Cada recurso monitorável da API Admin SDK tem um watch em um URI com o seguinte formato:

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

Para configurar um canal de notificação para mensagens sobre mudanças em um recurso específico, envie uma solicitação POST ao watch para o recurso.

Cada canal de notificação é associado a um usuário específico um recurso ou conjunto de recursos específico. Uma solicitação watch só terá êxito se o usuário atual ou conta de serviço é proprietário ou tem permissão para acessar esse recurso.

Exemplos

Todas as solicitações de observação para o recurso Atividades têm o formato geral:

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.
}

Use os parâmetros userKey, applicationName, eventName e filters para receber notificações somente de eventos, usuários ou aplicativos específicos.

Observação: para maior clareza, os exemplos a seguir omitem o corpo da solicitação.

Fique atento a todas as atividades administrativas:

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

Confira todas as atividades relacionadas aos documentos:

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

Monitorar a atividade de administrador de um usuário específico:

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

Fique atento a um evento específico, como a alteração da senha de um usuário:

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

Monitorar as alterações em um documento específico:

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

Propriedades obrigatórias

Para cada solicitação watch, você precisa fornecer estes campos:

  • Uma string da propriedade id que identifica esse item de forma exclusiva. novo canal de notificação no projeto. Recomendamos usar um identificador universalmente exclusivo (UUID) ou qualquer outro similar string exclusiva. Tamanho máximo: 64 caracteres.

    O valor do ID definido é retornado na Cabeçalho HTTP X-Goog-Channel-Id de cada notificação mensagem que você recebe para este canal.

  • Uma string da propriedade type definida como o valor web_hook.

  • Uma string de propriedade address definida como o URL que detecta e responde às notificações desse canal. Isso é seu URL de callback do webhook e precisa usar HTTPS.

    Observe que a API Admin SDK pode enviar notificações para este endereço HTTPS somente se houver um certificado SSL válido instalado no seu servidor da Web. Certificados inválidos incluem:

    • Certificados autoassinados.
    • Certificados assinados por uma fonte não confiável.
    • Certificados que foram revogados
    • Certificados com um assunto que não corresponde ao destino nome do host.

Propriedades opcionais

Você também pode especificar esses campos opcionais com sua Solicitação watch:

  • Uma propriedade token que especifica uma string arbitrária a ser usado como token de canal. Você pode usar o canal de notificação tokens para vários propósitos. Por exemplo, é possível usar para verificar se cada mensagem recebida é de um canal em que seu aplicativo criado, para garantir que a notificação não seja ou encaminhar a mensagem para o destino correto seu aplicativo com base na finalidade deste canal. Tamanho máximo: 256 caracteres.

    O token está incluído no Cabeçalho HTTP X-Goog-Channel-Token em todas as notificações que seu aplicativo recebe para este canal.

    Se você usar tokens de canal de notificação, recomendamos o seguinte:

    • Use um formato de codificação extensível, como uma consulta de URL parâmetros. Exemplo: forwardTo=hr&createdBy=mobile

    • Não inclua dados sensíveis, como tokens OAuth.

    .
  • Uma string de propriedade expiration definida como Carimbo de data/hora Unix (em milissegundos) da data e hora em que você quer que a API Admin SDK parar de enviar mensagens para este canal de notificação.

    Se um canal tiver um prazo de validade, ele será incluído como o valor do cabeçalho HTTP X-Goog-Channel-Expiration (em um formato legível por humanos) em todas as mensagens de notificação enviadas o app recebe para este canal.

.

Para mais detalhes sobre a solicitação, consulte o método watch para o recurso Activities na referência da API.

Resposta do relógio

Se a solicitação watch criar uma notificação ele retornará um código de status HTTP 200 OK.

O corpo da mensagem da resposta do relógio fornece informações sobre a canal de notificação que você acabou de criar, conforme mostrado no exemplo abaixo.

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

Além das propriedades enviadas como parte da solicitação, o informações retornadas também incluem os valores resourceId e resourceUri para identificar o recurso que está sendo monitorado canal de notificação.

Você pode transmitir as informações retornadas a outro canal de notificação operações, como quando você quer parar de receber notificações.

Para mais detalhes sobre a resposta, consulte o watch para o recurso Activities na referência da API.

Sincronizar mensagem

Após criar um canal de notificação para observar um recurso, o A API Admin SDK envia uma mensagem sync para indicar que as notificações estão sendo iniciadas. O HTTP X-Goog-Resource-State o valor do cabeçalho dessas mensagens é sync. Devido à rede problemas de sincronização, é possível receber a mensagem sync antes mesmo de receber a resposta do método watch.

É seguro ignorar a notificação sync, mas você pode usá-lo. Por exemplo, se você decidir que não deseja manter o canal, é possível usar X-Goog-Channel-ID e X-Goog-Resource-ID valores em uma chamada para parar de receber notificações. Você também pode usar o Notificação sync para fazer a inicialização e se preparar para eventos posteriores.

O formato das mensagens sync que a API SDK Admin envia seu URL de recebimento é mostrado abaixo.

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

As mensagens de sincronização sempre têm um HTTP X-Goog-Message-Number. Valor do cabeçalho de 1. Cada notificação subsequente para este canal tem um número de mensagem maior do que o anterior, embora a mensagem números não serão sequenciais.

Renovar canais de notificação

Um canal de notificação pode ter um prazo de validade, com um valor determinado pela sua solicitação ou por limites internos da API SDK Admin ou padrões (o mais restritivo será usado). A validade do canal hora, se houver, é incluída como um carimbo de data/hora Unix (em milissegundos) nas informações retornadas pelo método watch. Além disso, a data e a hora de validade estão incluídas (em formato legível) em cada mensagem de notificação que seu aplicativo recebe para este canal no Cabeçalho HTTP X-Goog-Channel-Expiration.

No momento, não há como renovar automaticamente um canal de notificação. Quando um canal estiver próximo da expiração, será necessário substituí-lo por um novo chamando o método watch. Como sempre, você deve usar um valor exclusivo para a propriedade id do novo canal. Observe que há seja uma "sobreposição" período em que os dois canais de notificação do mesmo recurso estão ativos.

Receber notificações

Sempre que um recurso monitorado muda, seu aplicativo recebe uma com a descrição da alteração. A API Admin SDK envia mensagens como solicitações POST HTTPS para o URL especificado como Propriedade address para esta notificação canal.

Interpretar o formato das mensagens de notificação

Todas as mensagens de notificação incluem um conjunto de cabeçalhos HTTP Prefixos X-Goog-. Alguns tipos de notificação também podem incluir corpo da mensagem.

Cabeçalhos

Mensagens de notificação postadas pela API SDK Admin para seu destinatário incluem os seguintes cabeçalhos HTTP:

Cabeçalho Descrição
Sempre presente
X-Goog-Channel-ID UUID ou outra string exclusiva que você forneceu para identificar isso canal de notificação.
X-Goog-Message-Number Número inteiro que identifica essa mensagem para esta notificação canal. O valor sempre é 1 para mensagens sync. Enviar mensagem os números aumentam a cada mensagem subsequente no canal, mas estão e não sequencial.
X-Goog-Resource-ID Um valor opaco que identifica o recurso monitorado. Este ID é entre as versões da API.
X-Goog-Resource-State O novo estado do recurso que acionou a notificação. Valores possíveis: sync ou um nome de evento.
X-Goog-Resource-URI Um identificador específico da versão da API para o recurso monitorado.
Às vezes presente
X-Goog-Channel-Expiration Data e hora da expiração do canal de notificação, expressas em legível por humanos. Presente apenas se definido.
X-Goog-Channel-Token O token do canal de notificação que foi definido pelo aplicativo. que você pode usar para verificar a fonte de notificação. Presente apenas se definido.

As mensagens de notificação para Atividades contêm as seguintes informações no corpo da solicitação:

Propriedade Descrição
kind Identifica isso como um recurso de atividade. Valor: a string fixa "admin#reports#activity".
id Identificador exclusivo do registro de atividade.
id.time Hora de ocorrência da atividade. O valor está em Formato de data e hora ISO 8601. O horário é a data completa mais horas, minutos e segundos no formato AAAA-MM-DDThh:mm:ssTZD. Por exemplo, 2010-04-05T17:30:04+01:00.
id.uniqueQualifier Qualificador exclusivo se vários eventos tiverem o mesmo tempo.
id.applicationName Nome do aplicativo a que o evento pertence. Os valores possíveis incluem:
id.customerId O identificador exclusivo de uma conta do Google Workspace.
actor Usuário que realiza a ação.
actor.callerType O tipo de autor que realizou a atividade listada no relatório. Nesta versão da API, callerType é a solicitação de entidade USER ou OAuth 2LO que executou a ação listada no relatório .
actor.email O endereço de e-mail principal do usuário cujas atividades estão sendo denunciadas.
actor.profileId O ID exclusivo do perfil do Google Workspace do usuário.
ownerDomain Domínio do Admin Console ou do proprietário do documento do aplicativo Documentos. Este é o domínio afetado pelo evento do relatório.
ipAddress Endereço IP do usuário que está realizando a ação. Este é o endereço IP do usuário ao fazer login no Google Workspace, que pode ou não refletir a localização física dele. Por exemplo, o endereço IP pode ser o endereço do servidor proxy do usuário ou um endereço da rede privada virtual (VPN). A API oferece suporte a IPv4 e IPv6.
events[] Eventos de atividade no relatório.
events[].type Tipo de evento. O serviço ou recurso do Google Workspace alterado por um administrador é identificado na propriedade type, que identifica um evento usando a propriedade eventName.
events[].name Nome do evento. Esse é o nome específico da atividade informada pela API. Cada eventName está relacionada a um serviço ou recurso específico do Google Workspace que a API organiza em tipos de eventos.
Para parâmetros de solicitação de eventName em geral:
  • Se nenhum eventName for fornecido, o relatório retornará todas as instâncias possíveis de um eventName.
  • Quando você solicita um eventName, a resposta da API retorna todas as atividades que contêm esse eventName. É possível que as atividades retornadas tenham outras propriedades eventName além da solicitada.
events[].parameters[] Pares de valores de parâmetros para diversos aplicativos.
events[].parameters[].name O nome do parâmetro.
events[].parameters[].value Valor de string do parâmetro.
events[].parameters[].intValue Valor inteiro do parâmetro.
events[].parameters[].boolValue Valor booleano do parâmetro.

Exemplos

As mensagens de notificação para eventos do recurso Atividade têm o formato geral:

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
        }
      ]
    }
  ]
}

Exemplo de um evento de atividade do administrador:

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"
        }
      ]
    }
  ]
}

Responder a notificações

Para indicar sucesso, é possível retornar qualquer um dos seguintes códigos de status: 200, 201, 202, 204 ou 102.

Se o serviço usa a biblioteca de cliente das APIs do Google e retorna 500,502, 503 ou 504, a API SDK Admin novas tentativas com espera exponencial. Todos os outros códigos de status de retorno são considerados como uma falha de mensagem.

Entender os eventos de notificação da API Admin SDK

Esta seção fornece detalhes sobre as mensagens de notificação que você pode receber ao usar notificações push com a API SDK Admin.

As notificações push da API Reports têm dois tipos de mensagens: mensagens de sincronização e notificações de eventos. O tipo de mensagem é indicado no cabeçalho HTTP X-Goog-Resource-State. Os valores possíveis para notificações de eventos são os mesmos do método activities.list. Cada aplicativo tem eventos exclusivos:

Parar notificações

A propriedade expiration controla quando as notificações param automaticamente. Você pode optar por parar de receber notificações de um canal específico antes expira chamando o método stop URI a seguir:

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

Este método exige que você forneça pelo menos o nome id e as propriedades resourceId, conforme mostrado nas exemplo abaixo. Se a API Admin SDK tiver vários tipos de recursos com métodos watch, haverá apenas um stop.

Somente usuários com a permissão correta podem interromper um canal. Especificamente, faça o seguinte:

  • Se o canal tiver sido criado por uma conta de usuário normal, somente o mesmo usuário do mesmo cliente (conforme identificado pelos IDs de cliente OAuth 2.0 da tokens de autorização) que criaram o canal podem interrompê-lo.
  • Se o canal foi criado por uma conta de serviço, qualquer usuário do mesmo pode interromper o canal.

O exemplo de código a seguir mostra como parar de receber notificações:

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