Flutter SDK

📘

A versão mais recente da SDK Flutter é a v3.1.0, que está disponível atualmente.

Passos da integração

1. Configuração do projeto no Firebase
2. Configuração no painel Inngage
3. Configuração nativa iOS
4. Configuração nativa Android

Instalação

Ambiente de desenvolvimento

Antes de começar a utilizar nossos SDKs, verifique se o seu ambiente de desenvolvimento possui o SDK do Dart e do Flutter instalados.

Importando o FCM Token (API Key)

Para aproveitar nossos SDKs, será necessário importar o FCM Token (API Key) do seu projeto Firebase em nossa plataforma. Siga o passo a passo neste link para executar essa ação.

Instalando o package utilizando o CLI do Flutter

Para adicionar o SDK Flutter da Inngage ao seu projeto, execute o seguinte comando utilizando o CLI do Flutter:

$ flutter pub add inngage_plugin

Este comando adiciona a seguinte linha no arquivo pubspec.yaml de seu pacote:

dependencies:
 inngage_plugin: ^3.1.0

Caso o pacote não tenha sido instalado corretamente, certifique-se que o inngage_plugin está em seu arquivo pubspec.yaml e rode o flutter pub get manualmente.

Inclusão da dependência

Após configurar o SDK Flutter da Inngage, é simples importá-lo em seu projeto. Para isso, basta adicionar o pacote ao seu código Dart:

import 'package:inngage_plugin/inngage_sdk.dart';

🚧

Recomendamos que você utilize a versão estável mais recente do Flutter, definida no arquivo pubspec.yaml. A Inngage SDK foi verificada pela última vez na versão Flutter 3.0.0 • canal estável.

Versões suportadas:

  • SDK: >=2.18.0 <4.0.0
  • Flutter: >=2.5.0"

Implementando a SDK

Notificações push

As notificações serão enviadas do servidor da Inngage para um ou mais dispositivos móveis, mesmo quando o aplicativo estiver em primeiro plano, segundo plano ou até mesmo fechado. Essas mensagens têm o objetivo de alertar o usuário sobre informações importantes, atualizações ou qualquer outro dado relevante relacionado ao seu aplicativo.

As notificações push aparecem na tela de bloqueio ou na barra de notificações do dispositivo. Quando o usuário toca na notificação, o aplicativo é aberto e pode direcioná-lo para uma página específica ou exibir mais detalhes sobre o conteúdo da notificação.

InngageSDK.subscribe()

Esse método deve ser chamado para informar o usuário sobre a chegada das notificações e inicializar o Inngage dentro do seu aplicativo. Geralmente, é chamado no arquivo main.dart, mas, dependendo da arquitetura do seu aplicativo, pode ser chamado dentro do MyApp(). Essa função é responsável por autorizar o acesso à API da Inngage e ao Firebase Cloud Messaging, além de ativar os listeners de notificações.

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await InngageSDK.subscribe(
    appToken: 'Trocar pelo App Token do aplicativo',
    friendlyIdentifier: 'Trocar pelo objeto Identificador do usuário',
    navigatorKey: navigatorKey,
    requestAdvertiserId: true,
    requestGeoLocator: true,
    blockDeepLink: true,
    firebaseListenCallback:(data) => print(data['additional_data']),
  );
  runApp(MyApp());
}

O trecho de código menciona alguns parâmetros e funcionalidades do Inngage SDK no contexto do Flutter. Aqui está uma explicação das principais informações:

  • appToken: É o token do aplicativo na plataforma Inngage, essencial para a comunicação com os serviços da Inngage.
  • friendlyIdentifier: É usado para identificar o usuário dentro do sistema. Esse parâmetro deve ser preenchido para que o usuário possa ser corretamente associado e receber as notificações push de forma personalizada.
  • navigatorKey: Uma Global Key no Flutter que pode ser usada para acessar o estado de um StatefulWidget. No caso do Inngage SDK, essa chave é usada para identificar a instância do Navigator dentro do aplicativo e é passada para o MaterialApp.
  • requestAdvertiserId: Um valor booleano que, quando definido como true, solicita o Advertising Id do Android e o IDFA (Identifier for Advertisers) no iOS. O valor padrão é false.
  • requestGeoLocator: Um valor booleano que, quando definido como true, solicita a permissão para acessar a localização do usuário antes de registrá-lo. O valor padrão é false.
  • blockDeepLink: É um valor booleano que permite bloquear a ação do deep link de abrir um navegador. Ao definir como true, esse bloqueio é efetivado. O valor padrão é false.
  • firebaseListenCallback: Permite que uma função seja passada para ser chamada no final do onBackgroundMessage do Firebase. Essa função será chamada quando o aplicativo estiver em segundo plano e receber uma notificação push. O parâmetro 'data' é um Map<String, dynamic> contendo informações da notificação push recebida do RemoteMessage message.data.

🚧

Os parâmetros "appToken", "friendlyIdentifier" e "navigatorKey" são requeridos ou obrigatórios.

No main.dart, a GlobalKey é passada como navigatorKey para o MaterialApp, que é a mesma navigatorKey usada no método InngageSDK.subscribe(). Essa associação é feita para permitir a correta integração entre o Inngage SDK e a navegação do aplicativo no Flutter.

@override
Widget build(BuildContext context) {
  return MaterialApp(
    navigatorKey: navigatorKey,
    home: HomePage(),
  );
}

InngageNotificationMessage.subscribe()

Esse método deve ser chamado para realizar as configurações de push no aplicativo e, principalmente, solicitar o acesso às notificações do usuário. Ao executar esse método, o aplicativo informa ao sistema operacional que deseja receber notificações push e é autorizado a fazê-lo, desde que o usuário conceda permissão para receber tais notificações.

void main() async {
  // Chamada do método "await InngageSDK.subscribe();"
  InngageNotificationMessage.subscribe(); // Configurações de push e solicitação de acesso às notificações

  runApp(MyApp());
}

Essa solicitação de acesso é fundamental para garantir que o aplicativo possa receber e exibir notificações push enviadas pela plataforma Inngage. É importante garantir que o método InngageNotificationMessage.subscribe() seja chamado corretamente no aplicativo para habilitar as notificações push e configurar adequadamente o sistema de notificação do usuário.

📘

Caso seja necessário registrar um usuário em uma área não logada do aplicativo, o parâmetro friendlyIdentifier deve ser fornecido como null. Nesse caso, o mesmo será atribuído com o valor do Device Token do usuário automaticamente.

Personalização (para sua identidade)

Adicionando Campos Personalizados

A SDK permite que o desenvolvedor que está integrando a SDK adicione campos customizáveis (customFields), como nome, e-mail, gênero, etc. No entanto, esses parâmetros devem ser configurados previamente na plataforma da Inngage.

final json = {
    "nome": "Leonardo",
    "dt_nascimento": "01/09/1970",
    "genero": "M"
  };

await InngageSDK.subscribe(
  // Outros parâmetros do método
  customFields: json,
);

Modificando o Identificador e adicionando novos Campos Personalizados

Ao preencher o parâmetro identifier no método addUserData, a API substitui o identifier fornecido na requisição e adiciona os demais campos personalizados (customFields).

await InngageUtils.addUserData(
   identifier: 'Trocar pelo novo objeto Identificador do usuário',
   customFields: {
    	"nome": "Leonardo",
    	"dt_nascimento": "1970-09-10",
    	"genero": "M"
  	};
 );

O registration é preenchido automaticamente com o token FCM do aplicativo. Caso o campo identifier não for informado, a API realizará o registro dos campos personalizados sem alterar o respectivo valor.

Solicitação de permissão dos dados de localização

Ao integrar a SDK, você pode obter os dados de localização do usuário ao registrá-lo na Inngage.

Para isso, basta inserir como true o parâmetro requestGeoLocator disponível no InngageSDK.subscribe():

await InngageSDK.subscribe(
    requestGeoLocator: true,
  );

Envio de eventos

A SDK permite que o desenvolvedor que está integrando a SDK envie eventos customizados. É importante configurá-los na plataforma Inngage para garantir uma boa performance e integração.

await InngageEvent.sendEvent(
  eventName: 'compra',
  appToken: 'MyAppToken',
  identifier: '[email protected]',
  //registration: '', Firebase Token,
  conversion_event: true, //
  conversion_value: 1090.00, //Valor monetário da conversão
  conversion_notid: "2314klbkf41bsgav4hg12ab24v1h41", //ID da mensagem
  eventValues: {
  	'produto': 'Bola de tenis',//Exemplo
    'valor': '40'//Exemplo
  },
);

Existem três valores obrigatórios para garantir o correto funcionamento:

  • eventName: Define o nome do evento, que será usado para identificá-lo rapidamente na plataforma.
  • appToken: É necessário para validar suas credenciais.
  • identifier: É usado para identificar o usuário dentro do sistema.

Você também pode adicionar valores avançados para esse evento usando o parâmetro eventValues, que é um array contendo chaves e valores com dados que serão anexados ao evento.

A API de eventos também pode receber um evento de conversão, para isso, existem os seguintes campos:

  • conversion_event: Defina como True para indicar que é um evento de conversão.
  • conversion_value: Esse campo permite inserir o valor monetário da conversão. O valor padrão é FLOAT 11000.00.
  • conversion_notid: Opção para enviar o ID Único da Notificação da Inngage (NOTID), que foi recebido pelo app no momento do Push. Isso possibilita atribuir uma conversão a um determinado Push."

In App Messages

A SDK Flutter da Inngage possibilita a exibição de Mensagens In App para os usuários. Essas mensagens podem ser enviadas tanto pela plataforma quanto pela API e são automaticamente apresentadas com base nas configurações recebidas pelo payload do Firebase.

Para apresentar a mensagem In App, utilize o widget InngageInAppWidget nas páginas em que deseja habilitar essa funcionalidade:

@override
Widget build(BuildContext context) {
  return MaterialApp(
    navigatorKey: navigatorKey,
    home: InngageInAppWidget(child: HomePage()),
  );
}

É possível bloquear a abertura do deeplink e receber um callback com o link recebido na mensagem In App:

InngageInapp.blockDeepLink = true;
InngageInapp.deepLinkCallback = (link){
  print(link);
};

Essas configurações permitem uma maior personalização e controle sobre as Mensagens In App apresentadas ao usuário em seu aplicativo Flutter.


👍

Você está pronto para começar!

Seguindo os passos acima da documentação você estará pronto para utilizar todas as ferramentas necessárias para as funcionalidades da SDK. :clap:

Possíveis incidentes

❗️

"Estou com problemas para abrir URLs no Android"

Se o seu aplicativo Android estiver enfrentando problemas para abrir URLs a partir da API 31 (Android 12), é necessário listar explicitamente os aplicativos com os quais deseja interagir no AndroidManifest.xml. Isso é necessário devido a mudanças relacionadas à privacidade na API 31.

Para solucionar esse problema, adicione a seguinte configuração em seu AndroidManifest.xml:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.yourapp">

    <!-- ... outras configurações do manifesto ... -->

    <!-- Adicione a configuração para ignorar a listagem de aplicativos -->
    <queries>
        <package android:name="com.example.app1" />
        <package android:name="com.example.app2" />
        <!-- Adicione mais pacotes de aplicativos aqui, se necessário -->
    </queries>

    <!-- ... outras configurações do manifesto ... -->

</manifest>

Essa configuração permite que seu aplicativo liste explicitamente os aplicativos específicos com os quais deseja interagir. Dessa forma, o Android 12 não solicitará que seu aplicativo liste todos os aplicativos com os quais interage, proporcionando uma experiência mais controlada em dispositivos com a API 31 ou superior.

Para mais informações e detalhes sobre as mudanças de visibilidade de pacotes no Android 12, consulte a documentação oficial do Android em: https://developer.android.com/about/versions/11/privacy/package-visibility.