- Documentação para a utilização do event-manager
- Orquestrador de eventos dentro do aplicativo da meutudo, ou seja, ele vai ter as responsabilidade para enviar os eventos para cada plataforma e a plataforma que é responsável por tratar os dados e disparar corretamente.
- É preciso cadastrar um novo evento genérico para ele ser disparado corretamente.
- No arquivo
~/core/eventsexiste um type chamadoGenericEventsnele é onde vai ser cadastrado um evento novo.
Exemplo:
type GenericEvents = Partial<{
register_event_example: string | null
}>;- Atualmente existem 3 plataformas no App:
Firebase,InsidereAdjustentão precisamos cadastrar em todas as plataformas para o evento ser disparado - No arquivo
~/core/[firebase | adjust | insider]é onde vai estar o objeto dos eventos - Como foi cadastrado o evento genérico, a própria IDE identifica os eventos cadastrados:
- O valor da chave cadastrada deve ser o nome do evento que o time de
Analyticspassa em sua documentação; - Se a plataforma não deve disparar algum evento específico é só não cadastra-lo ou cadastrar ele como :
""ounull
Exemplo:
// Firebase
const firebaseEvents: GenericEvents = {
register_event_example: 'firebase_event',
};
// Insider
const insiderEvents: GenericEvents = {
register_event_example: 'funil_insider_event',
};
// Adjust
const adjustEvents: GenericEvents = {
register_event_example: null, // não deve ser disparado
};- Apenas importar a função
dispatchAnalyticsEvente disparar o evento, conforme o exemplo abaixo:
import { View, Text, TouchableOpacity } from 'react-native';
import { useDispatch } from 'react-redux';
import { dispatchAnalyticsEvent } from '~/store/analyticsEvent';
const screenId = config.events?.screen_name ?? '';
function Component() {
const dispatch = useDispatch();
function handleOnPress() {
dispatch(
dispatchAnalyticsEvent('register_event_example', {
screenId: 'ScreenExample',
}),
);
}
return (
<View>
<TouchableOpacity onPress={handleOnPress}>
<Text>Dispatch event here</Text>
</TouchableOpacity>
</View>
);
}| Parâmetro | Type | Description | Required |
|---|---|---|---|
event |
string |
Evento para ser disparado, nome do evento cadastrado no Generic |
true |
params |
EventManagerParams |
Parâmetros para o evento | true |
platforms |
EventManagerPlatform[] |
Plataformas para o disparo | false |
| Parâmetro | Type | Description | Required |
|---|---|---|---|
screenId |
string |
Tela onde está sendo disparado o evento | true |
isInteraction |
boolean |
Utilizar true quando o evento do firebase for interaction |
false |
params |
EventParams |
Parâmetros dos eventos | false |
Firebase: O evento passa a serinteractione é adicionado um parâmetro novo chamado:event_namecom o valor do evento cadastradoOutras: Sem alteração de comportamento
import { EventManagerPlatform } from '~/app/factories';
dispatch(
dispatchAnalyticsEvent(
'register_event_example',
{
screenId: 'Example',
isInteraction: true,
}
),
);- São os parâmetros padrões para serem disparados, então por exemplo:
convenio,produto,valor_recebere etc; - É possível adicionar outros parâmetros;
- Os parâmetros
convenioeprodutosão enum's, verificar o arquivo:~/core/events
import { EventManagerPlatform } from '~/app/factories';
import { Insurance, Product } from '~/core/events';
dispatch(
dispatchAnalyticsEvent(
'register_event_example',
{
screenId: 'Example',
params: {
convenio: Insurance.INSS,
produto: Product.NEW
}
}
),
);- Caso o disparo deve ser apenas em 1 plataforma, deve passar o terceiro parâmetro informando qual, conforme o exemplo abaixo:
import { EventManagerPlatform } from '~/app/factories';
dispatch(
dispatchAnalyticsEvent(
'register_event_example',
{
screenId: 'Example',
},
[EventManagerPlatform.firebase],
),
);- Passo 1: Dentro da pasta:
~/corecriar uma pasta para a plataforma; - Passo 2: Criar um arquivo:
eventManager.ts
import {
EventManagerParams,
EventManagerPlatform,
EventParams,
} from '~/core/eventManager';
import { GenericEvents } from '~/core/events';
export class PlatformEventManager<
Events extends GenericEvents = GenericEvents,
Params extends EventParams = EventParams,
> extends EventManagerPlatform<Events, Params> {
platform = 'PlatformName';
sendEvent = (params: EventManagerParams<Params, Events>) => {};
}- Passo 3: Criar um arquivo
events.ts:
import { GenericEvents } from '~/core/events';
export const platformEvents: GenericEvents = {
register_event_example: 'firebase_event',
};- Passo 4: adcionar plataforma dentro de factories no arquivo:
~/app/factories/eventManagers.ts
import { PlatformEventManager } from '~/core/example/eventManager';
import { platformEvents } from '~/core/example/events';
// adicionar ao enum
enum EventManagerPlatform {
example = 'examplePlatform',
}
export const makeEventManagers = () => {
const baseOptions: Options = {
debug: Boolean(__DEV__),
refusedEventParams: [],
};
return {
// adicionar plataforma
[EventManagerPlatform.example]: new PlatformEventManager(
platformEvents,
baseOptions,
),
};
};- Alterar os arquivos do passo 1 e 2 do tópico anterior;
- Arquivo eventManager:
import {
EventManagerParams,
EventManagerPlatform,
EventParams,
} from '~/core/eventManager';
import { GenericEvents } from '~/core/events';
export type NewPlatformEvents = GenericEvents & {
example: string | null;
};
type NewPlataformCustomParams = EventParams & {
custom_param?: string;
};
export class PlatformEventManager<
Events extends NewPlatformEvents = NewPlatformEvents,
Params extends NewPlataformCustomParams = NewPlataformCustomParams,
> extends EventManagerPlatform<Events, Params> {
platform = 'PlatformName';
sendEvent = (params: EventManagerParams<Params, Events>) => {
const { params: eventParams } = params;
console.log('custom param =>>', eventParams?.custom_param);
};
}- Arquivo events:
import { NewPlatformEvents } from './eventManager';
export const platformEvents: NewPlatformEvents = {
example: '',
register_event_example: '',
};- Como todas as plataformas recebem os mesmos parâmetros, podemos passar por configuração parâmetros para serem "ignorados";
- Caminho:
~/app/factories/eventManagers;
Exemplo:
[EventManagerPlatform.adjust]: new AdjustEventManager(adjustEvents, {
...baseOptions,
refusedEventParams: ['convenio'],
}),