Introdução
Bem vindo ao manual de integração do Device Scan Android da Zaig! Você deve utilizar o nosso SDK para coletar informações do celular e do comportamento do usuário em seu aplicativo e assim melhorar a assertividade das decisões.
Ao lado, você pode observar uma implementação de SDK utilizando Java. Com isso você possui exemplos para poder adequar ao caso de uso da sua aplicação.
Problemas?
Nós não somos uma companhia que se esconde atrás de uma API! Entre em contato com o nosso suporte e nós responderemos o mais rápido possível. Fique à vontade para nos ligar caso deseje uma resposta rápida!
Adoramos Feedback
Mesmo que você já tenha resolvido o seu problema ou que ele seja muito simples (Até mesmo um typo ou uma organização inadequada que você já entendeu), envie-nos um e-mail, assim nós tornamos a documentação cada vez mais prática e a próxima pessoa não vai precisar sofrer as dores que você sofreu!
Ambientes
Possuímos dois ambientes para os nossos clientes. A seleção é realizada por meio de enumerador repassado no construtor da SDK, no momento, os seguintes ambientes estão disponíveis:
- Produção -
production
- Sandbox -
sandbox
Soluções híbridas
Além da integração nativa em Java, nossos SDKs são compatíveis com: Flutter, Ionic Cordova, Capacitor, React Native entre outras. Atualmente nossos SDKs híbridos estão documentados em um repositório privado. Caso tenha interesse nestas integrações, entre em contato com nosso suporte para liberarmos acesso.
Integração nativa
Para importar nossas SDKs, é necessário realizar alteração no build.gradle de Projeto e de Aplicativo.
Adicionando ao Projeto
Adicione o endereço de nosso repositório maven no build.gradle do projeto (no Android Studio este arquivo aparece como: "Project: {nome_do_projeto}"), conforme exemplo abaixo.
buildscript {
...
}
allprojects {
repositories {
...
maven { url 'https://sdks.zaig.com.br/' }
}
}
Adicionando ao Aplicativo
Após isso, adicione a biblioteca que você pretende importar em seu build.gradle do app (no Android Studio este arquivo aparece como: "Module: {nome_do_projeto}.app"), incluindo a dependência apresentada abaixo.
dependencies {
...
implementation 'com.zaig.android:devicescan:1.2.9'
}
Arquivo Manifest
Para utilizar a SDK você deve adicionar a seguinte configuração ao AndroidManifest da sua aplicação:
<meta-data
android:name="com.google.android.gms.ads.AD_MANAGER_APP"
android:value="true"/>
Você deve adicionar também, ao menos a permissão de internet, que é utilizada para enviar os dados coletados para os servidores da Zaig.
<uses-permission android:name="android.permission.INTERNET"/>
A permissão deverá ser alterada de acordo com a necessidade.
Implementação
package com.example.zaig_device_scan_sdk_test_app;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import com.zaig.android.devicescan.DeviceScan;
import com.zaig.android.devicescan.DeviceScanNotifier;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {
private DeviceScan deviceScan;
private DeviceScanNotifier deviceScanNotifier;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
deviceScanNotifier = new DeviceScanNotifier(this);
}
public void sendDeviceScan(View view) {
try{
deviceScan = new Scan.Builder(this.getApplicationContext())
.setMobileToken(this.mobileToken)
.setSessionId(this.sessionId)
.setNotifier(this.deviceScanNotifier)
.setSandboxEnvironment()
.build();
}catch (Exception ex) {
Log.e("DeviceScan Error", "There was an error collecting DeviceScan data: " + ex.toString());
}
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults){
try{
deviceScan.collectData(this.documentNumber,
this.eventId,
this.eventType);
}catch (Exception ex) {
Log.e("DeviceScan Error", "There was an error collecting DeviceScan data: " + ex.toString());
}
}
private class ScanNotifier implements DeviceScanNotifier {
AppCompatActivity activity;
public ScanNotifier (AppCompatActivity myActivity){
// Este método é customizável e pode ser utilizado para se armazenar a Activity, utilizada para operar a UI
this.activity = myActivity;
}
public void onSuccess(){
Log.i("DeviceScan", "DeviceScan successfully submitted");
runOnUiThread(new Runnable() {
@Override
public void run() {
// Adicionar aqui quaisquer mudanças de UI que sejam necessárias após o envio com sucesso do device scan
}
});
}
public void onError(){
Log.i("DeviceScan", "DeviceScan submission failed");
runOnUiThread(new Runnable() {
@Override
public void run() {
// Adicionar aqui quaisquer mudanças de UI que sejam necessárias após o envio com sucesso do device scan
}
});
}
}
}
Para utilizar a SDK do device scan android, os seguintes passos são necessários:
- Inserir as autorizações ao manifest da aplicação;
- Importar a biblioteca ao projeto da aplicação;
- Ao iniciar a aplicação, instanciar a biblioteca, passando os parâmetros adequados em seu construtor, incluindo o Notifier, responsável por dar o CallBack da operação com o resultado;
- Utilizar a função
onRequestPermissionsResult
da Activity para ser notificado do resultado da aprovação ou não das permissões requeridas; - Requisitar as permissões ao usuário. É obrigatória a permissão de acesso a internet para o funcionamento da biblioteca;
- Ao ser notificado do resultado da aprovação ou não das permissões, colete e envie os dados por meio do método
collectData
.
O objeto DeviceScan
Para utilizar a DeviceScanSDK, é necessário instanciar a classe DeviceScan que possui os seguintes parâmetros no construtor:
Parâmetro | Função | Obrigatório |
---|---|---|
currentContext | O contexto da aplicação, utilizado no acesso a diversos dados necessários obrigatório | Sim. |
.setMobileToken(this.mobileToken) | Chave do cliente que identifica que os dados coletados são provenientes do seu aplicativo. Caso ainda não tenha recebido o seu mobile-token, entre em contato com o suporte. | Sim. |
.setSessionId(this.sessionId) | Chave que identifica a sessão da qual os dados coletados são provenientes. | Sim. |
.setNotifier(this.deviceScanNotifier) | Instância da classe DeviceScanNotifier. Funciona como um callback retornando a situação do envio dos dados para nossos servidores como sucesso ou falha. | Não. |
.setSandboxEnvironment() | Caso este parâmetro seja utilizado no construtor, a biblioteca será configurada para enviar os dados ao ambiente de sandbox . Caso ausente, as requisições são enviadas para o ambiente production . |
Não. |
Permissões
A SDK coleta dados do dispositivo do usuário conforme as permissões que estão disponíveis no momento da coleta: conforme mais permissões seu aplicativo requerir e o usuário disponibilizar, mais informações são coletadas do dispositivo do usuário.
Permissões utilizadas pela SDK
Na versão atual da SDK, as seguintes permissões são utilizadas caso estejam disponíveis:
Permissão | Função | Obrigatória |
---|---|---|
INTERNET | Obrigatória, para envio das informações aos servidores da Zaig. | Sim. |
BLUETOOTH | Captura de informações do hardware de Bluetooth. | Não. |
READ_CONTACTS | Leitura da agenda de contatos. | Não. |
ACCESS_COARSE_LOCATION | Acesso a informações de rede (Antena, operadora...) e à localização por este meio (Menos preciso). | Não. |
ACCESS_FINE_LOCATION | Acesso à localização por meio de GPS (Mais preciso). | Não. |
READ_PHONE_STATE | Informações de Rede, SIM, Imei e outros aspectos de telefonia. | Não. |
QUERY_ALL_PACKAGES | Informações de aplicativos instalados no dispositivo. Necessária para devices Android 11 em diante. | Não. |
Coleta de informações
Para disparar a coleta e o envio de informações, é necessário (após coletar as permissões do usuário) chamar o método collectData
. O método, além de capturar as informações do dispositivo, tem como objetivo mapear a jornada do cliente dentro da aplicação. É por esta razão que o método também aceita os campos eventId
e eventType
. O método possui os seguintes parâmetros:
nome | tipo | descrição |
---|---|---|
documentNumber | String | O número do documento do usuário, caso disponível. (CPF/ CNPJ sem pontos, traços e barra) |
eventId | String | Um identificador do evento sendo reportado |
eventType | String | Um enumerador que define o tipo de evento sendo reportado - É pedido cuidado para que eventos muito similares seja reportados com o mesmo enumerador, a fim de que inteligência possa ser construída sobre esses dados. |
Após a chamada para coleta dos dados, um dos dois métodos da instância de DeviceScanNotifier
passada no construtor da classe DeviceScan
será chamado: onSuccess
caso tudo corra conforme o esperado ou onError
em caso de erro.