Docs Menu
Docs Home
/ /
Recursos para desarrolladores de aplicaciones

Biblioteca de eventos

La Biblioteca de Eventos permite a los desarrolladores rastrear los datos que el usuario ve y edita mientras usa una aplicación móvil con Device Sync habilitado. La Biblioteca de Eventos puede registrar tres tipos de eventos:

  • Leer eventos

  • Escribir eventos

  • Eventos personalizados

Los desarrolladores pueden especificar las transacciones de lectura y escritura que se registrarán. Además, pueden configurar eventos personalizados para registrar información como las pulsaciones de botones o lo que el usuario ve en la aplicación frontend.

Este nivel de detalle permite a los auditores u otras partes interesadas evaluar exactamente qué sucedió y cuándo.

Importante

Se requiere sincronización basada en particiones

La biblioteca de eventos no admite la grabación AuditEvents Usando Sincronización Flexible. Esta función requiere una aplicación de servicios de sincronización basada en particiones para registrar datos AuditEvent.

La biblioteca de eventos proporciona la capacidad de realizar auditorías para cumplir con los requisitos de cumplimiento en industrias fuertemente reguladas, como la atención médica o los servicios financieros.

Ejemplo

Una enfermera en un centro médico usa una aplicación con la librería de eventos activada. La aplicación muestra a la enfermera signos vitales en tiempo real, información transmitida desde el equipo médico e información sobre el historial de tratamientos del paciente. La aplicación aplica el cumplimiento de manera inherente porque su código bloquea acciones que la enfermera no debe realizar según los datos que están siendo visualizados. La librería de eventos captura toda la información que la enfermera ve dentro de la interfaz de la aplicación, así como las acciones que la enfermera realiza después de ver esa información.

En algún momento, esta enfermera atendió a un paciente, lo que posteriormente expuso al centro a una demanda por negligencia médica. El departamento legal debe revisar la información que tuvo a su disposición durante el tratamiento.

La librería de Eventos captura los datos digitales que la enfermera vio durante el tratamiento, así como las acciones que realizó. Al revisar estos datos, el equipo legal puede determinar si el tratamiento fue razonable. Sin esta información, el departamento legal no puede saber ni demostrar si las acciones de la enfermera fueron razonables.

La Biblioteca de Eventos abre un dominio de eventos independiente en el dispositivo del usuario. Este dominio tiene acceso a cualquier dominio de usuario que el desarrollador desee supervisar con la Biblioteca de Eventos.

Cuando los desarrolladores implementan la Biblioteca de Eventos, especifican los tipos de eventos que desean registrar, así como los metadatos personalizados que desean añadir a las grabaciones de eventos. Al ejecutarse la aplicación cliente, registra las interacciones del usuario designadas en el dominio "evento" como eventos de lectura, escritura o personalizados.

Mientras el dispositivo cliente tenga una conexión de red, Atlas Device Sync sincroniza estos datos del ámbito de eventos con una colección AuditEvent en la fuente de datos de Atlas vinculada.

Tip

Para obtener información sobre cómo implementar la biblioteca de eventos en una aplicación cliente, consulte: Biblioteca de eventos - Swift SDK.

La librería de Eventos registra los datos de eventos en una colección llamada AuditEvent en tu base de datos Atlas vinculada. Cuando configures la Biblioteca de Eventos, utiliza el Modo de desarrollo para crear automáticamente esta colección y derivar un esquema a partir de los eventos sincronizados. Recuerda desactivar el Modo de desarrollo antes de llevar tu aplicación a producción.

Su colección AuditEvent debe tener un esquema que contenga los siguientes campos:

Nombre del campo
Tipo
Requerido

_id

ObjectId

Requerido

activity

String

Requerido

_partition

String

Requerido

timestamp

fecha

Requerido

event

String

Opcional

data

String

Opcional

Además, el esquema debe contener un campo de cadena opcional para cada clave de metadatos que utilice. Por ejemplo:

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

Tip

Para obtener información sobre cómo agregar un esquema a su colección, consulte: Definir y aplicar un esquema.

Ejemplo

Si no utiliza ningún metadato personalizado, su esquema podría verse así:

Esquema de recopilación de eventos de auditoría
{
"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"
}
}
}

La biblioteca de eventos registra tres tipos de eventos:

  • Leer eventos

  • Escribir eventos

  • Eventos personalizados

La biblioteca de eventos registra los datos devueltos como resultado de una consulta como eventos de lectura. Los eventos de lectura también registran cualquier momento en que se instancia un objeto Realm, como al seguir un enlace o buscar un objeto por clave principal.

La biblioteca de eventos registra los eventos de lectura como un objeto JSON con dos campos:

  • type: almacena el nombre de la clase

  • value: almacena una matriz de objetos serializados

Los eventos de lectura almacenan valores de la siguiente manera:

  • Eventos de lectura de un solo objeto: el valor es una matriz que tiene un solo elemento

  • Objetos que coinciden con una consulta: el valor es una matriz de todos los objetos que coinciden con una consulta, incluso si los objetos nunca se utilizan

  • Lecturas que ocurren durante una transacción de escritura: el valor son los datos que tenía el objeto antes de que comenzara la transacción de escritura; no refleja ningún cambio que ocurra durante el evento de escritura.

  • Objetos que no existen cuando comienza una transacción de escritura: los objetos que se crean en una transacción de escritura no producen ningún evento de lectura.

Importante

La biblioteca de eventos no puede determinar si solo se muestra un subconjunto de la consulta en la aplicación cliente. Por ejemplo, supongamos que la aplicación cliente tiene una vista de lista. El evento de lectura de la biblioteca de eventos no registra la información de desplazamiento, sino el resultado completo de la consulta. Los desarrolladores deben usar eventos personalizados para registrar cuándo una aplicación cliente muestra solo un subconjunto del resultado de una consulta.

Un flujo de cada evento de lectura podría producir muchos eventos "duplicados" sobre los mismos objetos que no añaden información. Para reducir estos eventos 'duplicados', la Evento Librería descarta y fusiona algunos eventos.

La biblioteca de eventos descarta:

  • Consultas que no coinciden con ningún objeto

  • Consultas que coinciden únicamente con objetos recién creados

  • El objeto lee dónde el objeto coincide con una consulta anterior

La biblioteca de eventos fusiona:

  • Varias consultas en la misma tabla en una única consulta fusionada.

Un objeto de evento de lectura tiene 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
}

La biblioteca de eventos representa objetos incrustados creando un enlace en el objeto principal a la clave principal del objeto incrustado. Cuando el usuario no sigue el enlace, la clave principal es la única representación del objeto incrustado. Cuando el usuario sigue el enlace, el objeto incrustado se resuelve dentro del objeto principal.

Esto también produce una lectura de objeto de nivel superior para el objeto incrustado.

Ejemplo

Un objeto Person tiene un objeto incrustado Office que contiene detalles sobre la ubicación donde trabaja la persona. Si no se sigue el enlace para ver ninguno de los detalles office, el objeto principal Person solo muestra el ID del objeto incrustado.

Carga útil de datos del objeto principal con un enlace no seguido para la oficina
{
"type": "Person",
"value": [{
"_id": "62b47624265ff7b58e9b204e",
"_partition": "",
"employeeId": 1,
"name": "Michael Scott",
"office": "62b47624265ff7b58e9b204f"
}]
}

Al seguir el enlace para ver los detalles del Office objeto incrustado, este se resuelve dentro del objeto principal.Además, se produce una segunda lectura de nivel superior solo del objeto secundario; en este caso, nuestro Office objeto.

Cargas útiles de datos de ambos objetos con un enlace seguido para la oficina
{
"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"
}]
}

Nota

Leer combinación de eventos

La combinación de eventos de lectura puede afectar los objetos que ve cuando consulta un objeto y luego sigue un vínculo de objeto incrustado.

En el ejemplo anterior,Person si previamente se consultó, se generaría un evento de lectura donde el objeto "oficina"no se resuelve dentro del objeto "persona"; solo se vería el ObjectID en el evento de lectura inicial. Si posteriormente se sigue un enlace que resuelve el objeto incrustado, se vería la lectura de nivel superior independiente para el objeto incrustado, pero no se obtendría la lectura del objeto principal que muestra el objeto incrustado resuelto dentro del objeto principal.

La biblioteca de eventos registra eventos de escritura cuando:

  • Se crean nuevos objetos

  • Los objetos existentes se modifican

  • Los objetos se eliminan

El evento de escritura registra el estado anterior y posterior del objeto. Para los objetos nuevos creados, el estado anterior es null. Para las eliminaciones, el estado posterior es null.

Por cada transacción de escritura que el cliente realiza durante un registro de eventos, la Biblioteca de Eventos registra un único evento de escritura. Este evento registra todos los cambios realizados durante la transacción.

La carga útil es un objeto codificado por nombres de clase. Cada tipo de objeto que tuvo objetos creados, modificados o eliminados tiene una entrada.

La biblioteca de eventos registra los cambios en un tipo de objeto como un objeto con tres matrices:

  • inserciones: contienen los objetos serializados que se insertaron, utilizando el mismo esquema de serialización que las lecturas

  • Modificaciones: informar tanto los valores antiguos como los nuevos de cada propiedad

  • eliminaciones: contienen los objetos serializados que se borraron, utilizando el mismo esquema de serialización que la lectura

En una modificación, el objeto newValue solo incluye propiedades diferentes a las del objeto oldValue. Si una transacción de escritura asigna valores a un objeto, pero no modifica el valor de ninguna propiedad,

Un objeto de evento de escritura tiene este formato:

Carga útil de datos del objeto insertado
{
"Person": {
"insertions": [{
"_id": "62b47ead6a178a314ae0eb52",
"_partition": "",
"employeeId": 1,
"name": "Anthony"
}]
}
}
Carga útil de los datos del objeto modificado
{
"Person":{
"modifications": [{
"newValue": {
"name": "Tony"
},
"oldValue": {
"_id": "62b47d83cdac49f904c5737b",
"_partition": "",
"employeeId": 1,
"name": "Anthony"
}
}]
}
}
Carga útil de datos de un objeto borrado
{
"Person":{
"deletions":[{
"_id":"62b47ead6a178a314ae0eb52",
"_partition":"",
"employeeId":1,
"name":"Tony",
"userId":"tony.stark@starkindustries.com"
}]
}
}

Los eventos personalizados pueden registrar tipos de eventos que no leen ni escriben en la base de datos, como:

  • Cuando se muestra una pantalla específica

  • Cuando el usuario hace clic en un botón

Puedes usar eventos personalizados para contextualizar eventos de lectura y escritura, como registrar un evento personalizado cuando la aplicación cliente muestra una pantalla determinada. De esta forma, puedes inferir que los eventos de lectura y escritura posteriores al evento personalizado que registra la carga de la pantalla de la aplicación ocurrieron en esa pantalla.

Los eventos personalizados pueden almacenar cualquier dato que desee un desarrollador o ningún dato en absoluto.

Ejemplo de un evento personalizado
{
"_id": "62b4804c15659310991e5e0a",
"_partition": "events-62b4804b15659310991e5e09",
"activity": "login",
"event": "custom event",
"timestamp": 2022-06-23T15:01:31.941+00:00
}

Volver

Transmitir datos desde el cliente a Atlas

En esta página