Menu Docs

Página inicial do DocsServiços Atlas App

Biblioteca de eventos

Nesta página

  • Visão geral
  • Caso de uso
  • Como Funciona
  • Acessar dados da biblioteca de eventos
  • Esquema da Biblioteca de Eventos
  • Tipos de evento
  • Ler eventos
  • Eventos de gravação
  • Eventos personalizados

A Biblioteca de eventos permite que os desenvolvedores acompanhem quais dados o usuário vê e edita ao usar um aplicativo móvel habilitado para Device Sync. A Biblioteca de eventos pode registrar três tipos de eventos:

  • Ler eventos

  • Gravar eventos

  • Eventos personalizados

Os desenvolvedores podem especificar as transações de leitura e gravação a serem registradas. Além disso, você pode configurar eventos personalizados para registrar coisas como pressionamentos de botão ou o que o usuário está vendo no aplicativo frontend.

Esse nível de detalhamento permite que os auditores ou outras partes envolvidas avaliem exatamente o que aconteceu e quando.

Importante

Sincronização baseada em partição necessária

A Biblioteca de eventos não suporta a gravação AuditEvents usando o Flexible Sync. Essa funcionalidade requer um App Services App de sincronização baseada em partição para registrar dados AuditEvent .

A Biblioteca de eventos oferece a capacidade de realizar auditorias para atender aos requisitos de conformidade em setores fortemente regulamentados, como saúde ou serviços financeiros.

Exemplo

Uma auxiliar de saúde usa um aplicativo com a Biblioteca de eventos habilitada. O aplicativo apresenta à auxiliar de saúde sinais fatais em tempo real, informações transmitidas do sistema de saúde e o histórico de tratamento do pai. O aplicativo força inerentemente a conformidade, porque seu código bloqueia ações que a ama não deve realizar com base nos dados visualizados. A Biblioteca de eventos captura todas as informações que a enfermeira vê dentro da interface do aplicativo, bem como as ações que a enfermeira executa depois de visualizar essas informações.

Em algum momento, essa auxiliar oferece tratamento a uma cliente que mais tarde expõe a instalação a um processo por malversação. O departamento legal deve revisar as informações que estavam disponíveis para a ama durante o tratamento.

A Biblioteca de eventos captura os dados digitalizados que o(a) enfeiro(a) visualizou durante o tratamento, bem como as ações que ele realizou. Ao analisar esses dados, a equipe legal pode avaliar se o tratamento foi razoável. Sem essas informações, o departamento legal não pode saber e provar se as ações da auxiliares de saúde foram razoáveis.

A Biblioteca de Eventos abre um domínio de "evento" separado no dispositivo do usuário. Esse domínio tem acesso a qualquer domínio do usuário que o desenvolvedor escolha monitorar com a Biblioteca de eventos.

Quando os desenvolvedores implementam a Biblioteca de eventos, eles designam os tipos de eventos que desejam gravar, bem como quaisquer metadados personalizados que desejam anexar às gravações dos eventos. Quando o aplicativo cliente é executado, ele registra as interações do usuário designado no domínio "vento" como eventos de leitura, eventos de gravação ou eventos personalizados.

Enquanto o dispositivo cliente tiver uma conexão de rede, o Atlas Device Sync sincroniza os dados do realm do evento com uma collection AuditEvent na fonte de dados do Atlas vinculada.

Dica

Veja também:

Para obter informações sobre como implementar a Biblioteca de eventos em um aplicativo cliente, consulte: Biblioteca de eventos - Swift SDK.

A Biblioteca de Eventos registra dados de eventos em uma coleção chamada AuditEvent no seu banco de dados Atlas vinculado. Ao configurar a Biblioteca de eventos, use o Modo de desenvolvimento para criar automaticamente essa coleção e derivar um esquema a partir de eventos sincronizados. Lembre-se de desativar o modo de desenvolvimento antes de levar seu aplicativo para produção.

Sua collection AuditEvent deve ter um esquema contendo os seguintes campos:

Nome do campo
Tipo
Obrigatório
_id
ObjectId
Obrigatório
activity
String
Obrigatório
_partition
String
Obrigatório
timestamp
Data
Obrigatório
event
String
Opcional
data
String
Opcional

Além disso, o esquema deve conter um campo de string opcional para cada chave de metadados que você usa. Por exemplo:

{
"<Metadata Key>": {
"bsonType": "string"
}
}

Dica

Veja também:

Para obter informações sobre como adicionar um esquema à sua coleção, consulte: Impor um esquema.

Exemplo

Se você não estiver usando nenhum metadado personalizado, seu esquema poderá ser assim:

Esquema de collection do AuditEvent
{
"title": "AuditEvent",
"bsonType": "object",
"required": [
"_id",
"_partition",
"timestamp",
"activity"
],
"properties": {
"_id": {
"bsonType": "objectId"
},
"_partition": {
"bsonType": "string"
},
"timestamp": {
"bsonType": "date"
},
"activity": {
"bsonType": "string"
},
"event": {
"bsonType": "string"
},
"data": {
"bsonType": "string"
}
}
}

A Biblioteca de eventos registra três tipos de eventos:

  • Ler eventos

  • Gravar eventos

  • Eventos personalizados

A Biblioteca de eventos registra os dados retornados como resultado de uma query como eventos de leitura. Os eventos de leitura também registram qualquer momento em que um objeto do Realm é instanciado, como ao seguir um link ou procurar um objeto por chave primária.

A Biblioteca de eventos registra eventos de leitura como um objeto JSON com dois campos:

  • type: armazena o nome da classe

  • value: armazena uma array de objetos serializados

Leia os valores do armazenamento de eventos da seguinte forma:

  • Eventos de leitura de objeto único: o valor é uma array que tem um único elemento

  • Objetos que correspondem a uma query: o valor é uma array de todos os objetos que correspondem a uma query, mesmo que os objetos nunca sejam usados

  • Leituras que ocorrem durante uma transação de escrita: o valor são os dados que o objeto tem antes do início da transação de escrita; ele não reflete nenhuma alteração que ocorra durante o evento de gravação.

  • Objetos que não existem quando uma transação de escrita começa: objetos criados em uma transação de escrita não produzem nenhum evento de leitura.

Importante

A Biblioteca de eventos não consegue saber se apenas um subconjunto da query é exibido no aplicativo cliente. Por exemplo, digamos que o aplicativo cliente tenha uma visualização de lista. O evento de leitura da Biblioteca de eventos não registra informações de rolagem; ele registra o evento de leitura como o resultado completo da query. Os desenvolvedores devem usar eventos personalizados para registrar quando um aplicativo cliente exibe apenas um subconjunto de um resultado de query.

Um fluxo de cada evento de leitura pode produzir muitos eventos "duplicados" nos mesmos objetos que não adicionam informações. Para reduzir esses eventos "duplicados", a Biblioteca de Eventos descarta e mescla alguns eventos.

A Biblioteca de eventos descarta:

  • Queries que não correspondem a nenhum objeto

  • Queries que correspondem apenas a objetos recém-criados

  • O objeto lê onde o objeto é correspondido por uma query anterior

A Biblioteca de eventos mescla:

  • Várias queries na mesma tabela em uma única query mesclada.

Um objeto de evento de leitura tem este formato:

{
"_id": "62b396f4ebe94d2b871889bb",
"_partition":"events-62b396f4ebe94d2b871889ba",
"activity":"read object",
"data": "{
"type":"Person",
"value": [{
"_id": "62b396f4ebe94d2b871889b9",
"_partition":"",
"employeeId":1,
"name":"Anthony"
}]
}",
"event":"read",
"timestamp": 2022-06-23T14:54:37.756+00:00
}

A Biblioteca de eventos representa objetos embarcados criando um link no objeto principal para a chave primária do objeto embarcado. Quando o usuário não segue o link, a chave primária é a única representação do objeto incorporado. Quando o usuário segue o link, o objeto embarcado é resolvido dentro do objeto pai.

Isso também produz uma leitura de objeto de nível superior para o objeto incorporado.

Exemplo

Um objeto Person tem um objeto embarcado Office que contém detalhes sobre o local onde a pessoa trabalha. Quando não seguem o link para visualizar nenhum dos detalhes office , o objeto Person pai mostra apenas o ID do objeto incorporado.

Carga útil de dados do objeto principal com um link não seguido para o escritório
{
"type": "Person",
"value": [{
"_id": "62b47624265ff7b58e9b204e",
"_partition": "",
"employeeId": 1,
"name": "Michael Scott",
"office": "62b47624265ff7b58e9b204f"
}]
}

Quando seguimos o link para visualizar detalhes do objeto Office incorporado, isso resolve o objeto incorporado dentro do objeto pai. Ele também produz uma segunda leitura de nível superior apenas do objeto filho - neste caso, nosso objeto Office .

As cargas úteis de dados de ambos os objetos com um link seguido para o escritório
{
"type":"Person",
"value": [{
"_id": "62b47975a33224558bdf8b4d",
"_partition": "",
"employeeId": 1,
"name": "Michael Scott",
"office": {
"_id": "62b47975a33224558bdf8b4e",
"_partition": "",
"city": "Scranton",
"locationNumber": 123,
"name": "Dunder Mifflin"
}
}]
}
{
"type": "Office",
"value": [{
"_id": "62b47975a33224558bdf8b4e",
"_partition": "",
"city": "Scranton",
"locationNumber": 123,
"name": "Dunder Mifflin"
}]
}

Observação

Combinando evento de leitura

A Combinação de Eventos de Leitura pode afetar os objetos que você vê ao fazer query de um objeto e, posteriormente, seguir um link de objeto incorporado.

No exemplo acima, se você tiver consultado anteriormente o Person, isso produziria um evento de leitura em que o objeto de escritório não está resolvido dentro do objeto de pessoa; você veria apenas o ObjectID no evento de leitura inicial. Em seguida, se posteriormente você seguir um link que resolve o objeto incorporado, verá a leitura de nível superior separada para o objeto incorporado, mas não obterá a leitura do objeto pai que mostra o objeto incorporado resolvido dentro do objeto principal.

A Biblioteca de Eventos registra eventos de gravação quando:

  • Novos objetos são criados

  • Objetos existentes são modificados

  • Objetos são excluídos

O evento de gravação registra o estado antes e depois do objeto. Para novos objetos criados, o estado anterior é null. Para exclusões, o estado posterior do objeto é null.

Para cada transação de escrita que o cliente confirma durante um escopo de gravação de eventos, a Biblioteca de Eventos registra um único evento de escrita. Esse evento de gravação registra todas as alterações feitas durante a transação de escrita.

A carga útil é um objeto chaveado nos nomes das classes. Cada tipo de objeto que teve objetos criados, modificados ou excluídos tem uma entrada.

A Biblioteca de eventos registra as alterações em um tipo de objeto como um objeto com três arrays:

  • inserções: contém os objetos serializados que foram inseridos, usando o mesmo esquema de serialização das leituras

  • modificações: relatar os valores antigos e novos de cada propriedade

  • exclusões: contém os objetos serializados que foram excluídos, usando o mesmo esquema de serialização das leituras

Em uma modificação, o objeto newValue inclui somente propriedades que são diferentes do objeto oldValue . Se uma transação de escrita atribuir a um objeto, mas na verdade não alterar o valor de nenhuma propriedade,

Um objeto de evento de gravação tem este formato:

Carga útil de dados do objeto inserido
{
"Person": {
"insertions": [{
"_id": "62b47ead6a178a314ae0eb52",
"_partition": "",
"employeeId": 1,
"name": "Anthony"
}]
}
}
Carga útil de dados do objeto modificado
{
"Person":{
"modifications": [{
"newValue": {
"name": "Tony"
},
"oldValue": {
"_id": "62b47d83cdac49f904c5737b",
"_partition": "",
"employeeId": 1,
"name": "Anthony"
}
}]
}
}
Carga útil de dados do objeto excluído
{
"Person":{
"deletions":[{
"_id":"62b47ead6a178a314ae0eb52",
"_partition":"",
"employeeId":1,
"name":"Tony",
"userId":"tony.stark@starkindustries.com"
}]
}
}

Os eventos personalizados podem registrar tipos de eventos que não leem ou gravam no banco de dados, como:

  • Quando uma tela específica é exibida

  • Quando o usuário clica em um botão

Você pode usar eventos personalizados para dar contexto a eventos de leitura e escrita, como gravar um evento personalizado quando o aplicativo cliente exibe uma determinada tela. Em seguida, é possível inferir que os eventos de leitura e escrita após o evento personalizado de gravação do carregamento da tela do aplicativo ocorreram todos nessa tela de aplicativo.

Os eventos personalizados podem armazenar quaisquer dados que um desenvolvedor deseje ou nenhum dado.

Exemplo de um evento personalizado
{
"_id": "62b4804c15659310991e5e0a",
"_partition": "events-62b4804b15659310991e5e09",
"activity": "login",
"event": "custom event",
"timestamp": 2022-06-23T15:01:31.941+00:00
}
← Transmitir Dados Unidirecionalmente de um Cliente para Atlas