{"metadata":{"image":[],"title":"","description":""},"api":{"url":"","auth":"required","settings":"","results":{"codes":[]},"params":[]},"next":{"description":"","pages":[]},"title":"Integração Android (Java)","type":"basic","slug":"implementação-android","excerpt":"","body":"Após realizar a [configuração do serviço Firebase](https://inngage.readme.io/v3.0/docs/configuração-firebase) podemos começar a implementar a SDK da Inngage em aplicativos Android.\nA nossa SDK Android é responsável por integrar as aplicações mobile ao backend de notificações inteligentes da Inngage, para a gestão do cadastro de dispositivos, configuração de campos customizáveis, geofences, processamento de push notifications e muito mais.\n<br>\n[block:callout]\n{\n  \"type\": \"danger\",\n  \"body\": \"Antes de começar, verifique se você está usando a versão 5.* ou superior do Gradle. Exceções inesperadas ou erros aparecem devido a versões gradle antigas.\\nPara isso, inspecione o arquivo *gradle-wrapper.properties* e garanta que o atributo **distributionUrl** seja, por exemplo, igual a \\\"https://services.gradle.org/distributions/gradle-5.4.1-all.zip\\\" (para versão 5.4.1).\\n\\nEsta versão suporta Android Oreo (8.0, 8.1.0) e Android P (9) .\\n\\n**E Android Q (necessidades  AndroidX) .**\",\n  \"title\": \"Atenção !\"\n}\n[/block]\n<br><br>\n[block:callout]\n{\n  \"type\": \"danger\",\n  \"title\": \"Atenção !\",\n  \"body\": \"Se você estiver disposto a usar o Android Q (versão 10), considere migrar para o AndroidX.\\nPara fazer isso, você pode facilmente usar o IDE como na figura abaixo:\"\n}\n[/block]\n\n[block:image]\n{\n  \"images\": [\n    {\n      \"image\": [\n        \"https://files.readme.io/03519b1-Screenshot_1.png\",\n        \"Screenshot_1.png\",\n        313,\n        389,\n        \"#3c3c44\"\n      ]\n    }\n  ]\n}\n[/block]\n\n[block:api-header]\n{\n  \"title\": \"1 - Google Messaging Services & FIREBASE Services\"\n}\n[/block]\nAntes de implementar a biblioteca, dentro do seu projeto no Android Studio, abra o arquivo **build.gradle (Module: app)** e adicione as seguintes dependências ao seu projeto.\n\n**1.1 -**  Implemente essas dependências no arquivo ** build.gradle (Module: app) ** : \n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"apply plugin: 'com.android.application'\\n// Adicione esta linha\\napply plugin: 'com.google.gms.google-services'\\n\\ndependencies {\\n  // Importe o Firebase BoM\\n  implementation platform('com.google.firebase:firebase-bom:27.1.0')\\n\\n  // Adicione a dependência para o Firebase SDK para Google Analytics\\n  // Ao usar o BoM, não especifique versões nas dependências do Firebase\\n  implementation 'com.google.firebase:firebase-analytics'\\n\\n  // Adicione as dependências para qualquer outro produto Firebase desejado\\n  \\n}\",\n      \"language\": \"java\",\n      \"name\": \"build.gradle (Module: app)\"\n    }\n  ]\n}\n[/block]\n**1.2 -** Ainda no arquivo **build.gradle (Module: app)**, adicione no final do arquivo o seguinte plugin:\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"apply plugin: 'com.google.gms.google-services'\",\n      \"language\": \"java\",\n      \"name\": \"build.gradle (Module: app)\"\n    }\n  ]\n}\n[/block]\n**1.3 -** Em **build.gradle** (Project: AppName)  , Adicione isso :\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"  dependencies {\\n    // Add this line\\n    classpath 'com.google.gms:google-services:4.3.2'\\n  }\\n}\",\n      \"language\": \"java\",\n      \"name\": \"build.gradle (Project:AppName)\"\n    }\n  ]\n}\n[/block]\n<br><br>\n[block:api-header]\n{\n  \"title\": \"2 - Implementação da SDK Inngage (inngage-lib)\"\n}\n[/block]\n **2.1** - Em **build.gradle (Module: app)** implemente nossa dependências \n[block:callout]\n{\n  \"type\": \"info\",\n  \"title\": \"Divulgação !\",\n  \"body\": \"Esta é uma versão beta, está pronta para ser usada, mas pode ser alterada a qualquer momento que você será informado quando ela for alterada.\"\n}\n[/block]\n\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"dependencies {\\t    \\n  \\n\\t\\t   implementation 'com.github.inngage:inngage-lib:3.0.1-stable'\\n\\n}\",\n      \"language\": \"java\",\n      \"name\": \"build.gradle (Module: app)\"\n    }\n  ]\n}\n[/block]\n**2.2 ** - Em **build.gradle (Project: AppName)** adicione o link do repositório  \n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"buildscript{\\n\\trepositories{\\n\\t\\t\\t\\t\\t\\t\\t// adicione somente esta linha dentro de \\\"repositories\\\"\\n  \\t\\t\\t\\t\\t\\tmaven { url 'https://jitpack.io' }\\n        \\n\\t}\\n}\\n\\nallprojects {\\n    \\trepositories {\\n        \\t\\t\\t// adicione somente esta linha dentro deste outro \\\"repositories\\\"\\n        \\t\\t\\tmaven { url 'https://jitpack.io' }\\n    \\t}\\n}\",\n      \"language\": \"java\",\n      \"name\": \"build.gradle (Project: AppName)\"\n    }\n  ]\n}\n[/block]\n\n[block:callout]\n{\n  \"type\": \"warning\",\n  \"body\": \"./gradlew --refresh-dependencies para Mac\\ngradle --refresh-dependencies para Windows<br><br>\",\n  \"title\": \"Em alguns casos, é necessário fazer refresh nas dependências do projeto. Clique em \\\"Sync\\\"/\\\"Sincronizar\\\" na IDE ou execute o comando:\"\n}\n[/block]\n<br><br>\n[block:api-header]\n{\n  \"title\": \"3 - Adicionando InngageConstants Interface\"\n}\n[/block]\nVisando desacoplar as constantes utilizadas em nossa integração, adicione uma nova interface ao seu projeto denominada \"InngageConstants\" <br>\n\n**3.1-** Crie o arquivo como uma interface \"InngageConstants\" e adicione o seguinte código\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"interface InngageConstants {\\n\\n    String inngageAppToken = \\\"APP_TOKEN\\\"; //application token retirado da plataforma Inngage\\n    String inngageEnvironment = \\\"prod\\\";\\n    String googleMessageProvider = \\\"FCM\\\";\\n\\n}\",\n      \"language\": \"java\",\n      \"name\": \"InngageConstants\"\n    }\n  ]\n}\n[/block]\n\n[block:api-header]\n{\n  \"title\": \"4 - Implementando Importações e Métodos na MainActivity\"\n}\n[/block]\nNa MainActivity existem algumas importações e métodos para se implementar para possibilitar o processo de : <br>\n  *  **subscription** - Responsável por fazer a subscrição do usuário na plataforma Inngage; \n  *  **notification handler** - Responsável por fazer a manipulação da notificação quando recebida;\n<br><br>\n\n**4.1 - ** Começaremos importando:\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"\\timport br.com.inngage.sdk.InngageIntentService;\\n\\timport br.com.inngage.sdk.InngageUtils;\",\n      \"language\": \"java\",\n      \"name\": \"MainActivity.java\"\n    }\n  ]\n}\n[/block]\n**4.2 - ** Logo após a abertura da classe que implementará esses métodos, adicione essas duas linhas:\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"private static final String TAG = \\\"INNGAGE\\\";\",\n      \"language\": \"java\",\n      \"name\": \"MainActivity.java\"\n    }\n  ]\n}\n[/block]\n<br><br>**4.3 - Adicione os seguintes métodos nesta mesma classe:**<br><br>\n\n**A - handleSubscription:** Esse método é responsável por fazer a subscrição do usuário na plataforma Inngage. Durante esse processo é possível definir um identificador amigável (identifier) ao usuário (CPF, e-mail, id do banco de dados, etc), e campos personalizados para compor a identidade do usuário de seu app (Nome, E-mail, Data de Nascimento, etc). Aprenda mais sobre campos personalizados [clicando aqui.](https://intercom.help/inngage/setup/campos-personalizados)\n[block:callout]\n{\n  \"type\": \"info\",\n  \"body\": \"*  Faça a parametrização do \\\"identificador\\\" no método startInit a seu critério (email, username, uuid, id do usuário, cpf, ou mascare esse valor como preferir);\\n*  Caso o App não tenha campos personalizados, remova a primeira seção abaixo e o atributo do método startInit.\\n*  Certifique-se de definir os customFields na plataforma antes de usá-los aqui.\"\n}\n[/block]\n\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t private void handleSubscription() {\\n\\t\\t\\t\\t\\n     \\t\\t// caso o app possua campos customizáveis, descomente estas linhas, cheque-os na plataforma, substitua-os abaixo e adicione os valores de acordo com a sua aplicação\\n//        JSONObject jsonCustomField = new JSONObject();\\n//\\n//        try {\\n//\\n//            jsonCustomField.put(\\\"nome\\\", user.name); \\n//            jsonCustomField.put(\\\"email\\\", user.email);\\n//            jsonCustomField.put(\\\"telefone\\\", \\\"\\\");\\n//            jsonCustomField.put(\\\"dataRegistro\\\", \\\"\\\");\\n//            jsonCustomField.put(\\\"dataNascimento\\\", \\\"\\\");\\n//\\n//\\n//      } catch (JSONException e) {\\n//\\n//            e.printStackTrace();\\n//      }\\n//\\t\\t\\t\\t// caso possua campos customizáveis, adicione o \\\"jsonCustomField\\\" como na chamada abaixo \\n//        InngageIntentService.startInit(\\n//                this,\\n//                InngageConstants.inngageAppToken,\\n//                \\\"Identifier\\\", //Seu identificador\\n//                InngageConstants.inngageEnvironment,\\n//                InngageConstants.googleMessageProvider,\\n//\\t\\tjsonCustomField);\\n     \\n     // caso não possua campos customizáveis até então:\\n     InngageIntentService.startInit(\\n                this,\\n                InngageConstants.inngageAppToken,\\n                \\\"Identifier\\\", //Seu identificador\\n                InngageConstants.inngageEnvironment,\\n                InngageConstants.googleMessageProvider);\\n    }\\n\",\n      \"language\": \"java\",\n      \"name\": \"MainActivity.java\"\n    }\n  ]\n}\n[/block]\n**B - handleNotification:**\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"\\n   \\tprivate void handleNotification() {\\n\\n        String notifyID = \\\"\\\", title = \\\"\\\", body = \\\"\\\", url = \\\"\\\";\\n\\n        Bundle bundle = getIntent().getExtras();\\n\\n        if (getIntent().hasExtra(\\\"EXTRA_NOTIFICATION_ID\\\")) {\\n\\n            notifyID = bundle.getString(\\\"EXTRA_NOTIFICATION_ID\\\");\\n        }\\n        if (getIntent().hasExtra(\\\"EXTRA_TITLE\\\")) {\\n\\n            title = bundle.getString(\\\"EXTRA_TITLE\\\");\\n        }\\n        if (getIntent().hasExtra(\\\"EXTRA_BODY\\\")) {\\n\\n            body = bundle.getString(\\\"EXTRA_BODY\\\");\\n        }\\n\\n        if (getIntent().hasExtra(\\\"EXTRA_URL\\\")) {\\n\\n            url = bundle.getString(\\\"EXTRA_URL\\\");\\n        }\\n\\n        if (url.isEmpty()) {\\n            if (!\\\"\\\".equals(notifyID) || !\\\"\\\".equals(title) || !\\\"\\\".equals(body)) {\\n                Log.d(TAG, \\\"no link: \\\" + url);\\n                InngageUtils.showDialog(\\n                        title,\\n                        body,\\n                        notifyID,\\n                        InngageConstants.inngageAppToken,\\n                        InngageConstants.inngageEnvironment,\\n                        this);\\n            }\\n\\n        } else if (!\\\"\\\".equals(notifyID) || !\\\"\\\".equals(title) || !\\\"\\\".equals(body)) {\\n            Log.d(TAG, \\\"Link: \\\" + url);\\n            InngageUtils.showDialogwithLink(\\n                    title,\\n                    body,\\n                    notifyID,\\n                    InngageConstants.inngageAppToken,\\n                    InngageConstants.inngageEnvironment,\\n                    url,\\n                    this);\\n        }\\n\\n    }\",\n      \"language\": \"java\",\n      \"name\": \"MainActivity.java\"\n    }\n  ]\n}\n[/block]\n\n[block:api-header]\n{\n  \"title\": \"5 - Chamando os métodos\"\n}\n[/block]\nDepois de adicionar os trechos de código acima, certifique-se de chamar os 3 métodos em onCreate ou onStart:\n\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"\\t \\tprotected void onCreate(Bundle savedInstanceState) \\n\\t{\\n       \\t\\t\\tsuper.onCreate(savedInstanceState);\\n       \\t \\t\\tsetContentView(R.layout.activity_main);\\n\\t\\t\\t\\t\\n       // adicione essas dois chamadas ao onCreate ou onStart da sua activity\\n        handleSubscription();\\n        handleNotification();\\n      \\n    \\t\\n\\t}\",\n      \"language\": \"java\",\n      \"name\": \"MainActivity.java\"\n    }\n  ]\n}\n[/block]\n<br><br>\n[block:api-header]\n{\n  \"title\": \"6 - Arquivo AndroidManifest.xml\"\n}\n[/block]\nDepois de implementar a biblioteca, o arquivo de manifesto precisa de algumas permissões e serviços a serem adicionados.<br><br>\n\n**6.1 - **Adicionando Permissões (antes da tag '<application' do AndroidManifest.xml) : \n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"\\t\\t\\t\\t\\t<uses-permission android:name=\\\"android.permission.INTERNET\\\" />\\n    \\t\\t\\t<uses-permission android:name=\\\"android.permission.READ_PHONE_STATE\\\" />\",\n      \"language\": \"xml\",\n      \"name\": \"AndroidManifest.xml\"\n    }\n  ]\n}\n[/block]\n\n** 6.2 - ** Antes de fechar a tag </ application>, adicione isto:\n[block:callout]\n{\n  \"type\": \"warning\",\n  \"title\": \"Ícone de notificação !\",\n  \"body\": \"é obrigatório colocar o ícone de notificação no repositório **drawable** sob o nome **ic_notification** como no exemplo abaixo:\\n\\n**android:resource=\\\":::at:::drawable/ic_notification\\\"**\"\n}\n[/block]\n\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"<service android:name=\\\"br.com.inngage.sdk.PushMessagingService\\\">\\n         <intent-filter>\\n         <action android:name=\\\"com.google.firebase.MESSAGING_EVENT\\\"/>\\n         </intent-filter>\\n</service>\\n\\n<meta-data\\n         android:name=\\\"com.google.firebase.messaging.default_notification_icon\\\"\\n         android:resource=\\\"@drawable/ic_notification\\\" />\\n\\n<service android:name=\\\"br.com.inngage.sdk.InngageIntentService\\\"\\n         android:exported=\\\"false\\\">\\n         <intent-filter>\\n         <action android:name=\\\"com.google.firebase.INSTANCE_ID_EVENT\\\"/>\\n         </intent-filter>\\n</service>\\n\",\n      \"language\": \"xml\",\n      \"name\": \"AndroidManifest.xml\"\n    }\n  ]\n}\n[/block]\n<br><br>\n[block:api-header]\n{\n  \"title\": \"7 - Configuração abertura do Dialog\"\n}\n[/block]\nApós finalizar toda implementação da SDK Inngage e demais dependências do Android, finalizaremos configurando na plataforma Inngage os parâmetros do seu aplicativo. Nesta sessão deveremos informar o nome do pacote *(br.com.suaempresa.seuapp)* e a classe que fará o recebimento do Push, no caso dessa implementação **MainActivity**.\n[block:image]\n{\n  \"images\": [\n    {\n      \"image\": [\n        \"https://files.readme.io/b6222bb-Screen_Shot_2018-12-13_at_15.49.05.png\",\n        \"Screen Shot 2018-12-13 at 15.49.05.png\",\n        890,\n        249,\n        \"#f2f7f7\"\n      ]\n    }\n  ]\n}\n[/block]\n<br><br>\n[block:callout]\n{\n  \"type\": \"success\",\n  \"title\": \"Parabéns\",\n  \"body\": \"Terminando este passo você implementou nossa biblioteca com sucesso.\"\n}\n[/block]\n<br><br>\n[block:api-header]\n{\n  \"title\": \"Execute seu projeto e registre seu dispositivo\"\n}\n[/block]\nO registro de um dispositivo de teste permitirá que você teste suas mensagens, alterações de variáveis em um dispositivo real.\n\nPara registrar seu dispositivo, primeiro verifique se você está em ambiente de Desenvolvimento. Acesse o App gerado e abra a aba Todo Público em sua conta da Inngage, o Dispositivo deve estar registrado. Você pode olhar todas suas informações em variáveis clicando no ícone (Usuário) e enviar uma notificação clicando no ícone (Avião).\n[block:callout]\n{\n  \"type\": \"danger\",\n  \"body\": \"O uso de uma chave de desenvolvimento pode não suportar usuários reais (em uma escala de produção). Além disso, todos os dados do usuário serão perdidos, pois não são capturados na análise.\",\n  \"title\": \"Nunca use uma chave de desenvolvimento em um aplicativo em produção\"\n}\n[/block]","updates":[],"order":1,"isReference":false,"hidden":false,"sync_unique":"","link_url":"","link_external":false,"_id":"5f88485348722a0012dd6665","createdAt":"2020-10-15T13:02:11.729Z","user":"5724b9982ad0bc17001227fa","category":{"sync":{"isSync":false,"url":""},"pages":[],"title":"Android","slug":"android","order":3,"from_sync":false,"reference":false,"_id":"57688cc71f818b0e00695efb","project":"57240e292887bb0e00bb9d93","createdAt":"2016-06-21T00:39:35.558Z","version":"57240e292887bb0e00bb9d96","__v":0},"version":{"version":"1.0","version_clean":"1.0.0","codename":"","is_stable":true,"is_beta":false,"is_hidden":false,"is_deprecated":false,"categories":["57240e292887bb0e00bb9d97","57241b7deae5090e00ee6249","57241c06eae5090e00ee624a","57242abb2ad0bc170012279b","5734d18c7b9859320047f4b1","57688cc71f818b0e00695efb","577ead2ca74eb40e00d97bca","57b66af649a12a0e007b461b","597e5f8f13505b0014251a79","59964eb2f824b4000f961fbe","5a15ab12f2643f001ee8737c","5ab1151799750500797334e0","5c597e8b0abe110014bf1a11","5e395a05470bc3002d78d886","5e42a9647515f300509a594d","5f5e716dcc85f9004a4fa193","5f6dd615c624d800180bd237","5f984feb8aed05003a0032dc","60ac0e9c4c04970016613c6c"],"_id":"57240e292887bb0e00bb9d96","createdAt":"2016-04-30T01:45:13.341Z","project":"57240e292887bb0e00bb9d93","releaseDate":"2016-04-30T01:45:13.341Z","__v":19},"project":"57240e292887bb0e00bb9d93","__v":0,"parentDoc":null}

Integração Android (Java)


Após realizar a [configuração do serviço Firebase](https://inngage.readme.io/v3.0/docs/configuração-firebase) podemos começar a implementar a SDK da Inngage em aplicativos Android. A nossa SDK Android é responsável por integrar as aplicações mobile ao backend de notificações inteligentes da Inngage, para a gestão do cadastro de dispositivos, configuração de campos customizáveis, geofences, processamento de push notifications e muito mais. <br> [block:callout] { "type": "danger", "body": "Antes de começar, verifique se você está usando a versão 5.* ou superior do Gradle. Exceções inesperadas ou erros aparecem devido a versões gradle antigas.\nPara isso, inspecione o arquivo *gradle-wrapper.properties* e garanta que o atributo **distributionUrl** seja, por exemplo, igual a \"https://services.gradle.org/distributions/gradle-5.4.1-all.zip\" (para versão 5.4.1).\n\nEsta versão suporta Android Oreo (8.0, 8.1.0) e Android P (9) .\n\n**E Android Q (necessidades AndroidX) .**", "title": "Atenção !" } [/block] <br><br> [block:callout] { "type": "danger", "title": "Atenção !", "body": "Se você estiver disposto a usar o Android Q (versão 10), considere migrar para o AndroidX.\nPara fazer isso, você pode facilmente usar o IDE como na figura abaixo:" } [/block] [block:image] { "images": [ { "image": [ "https://files.readme.io/03519b1-Screenshot_1.png", "Screenshot_1.png", 313, 389, "#3c3c44" ] } ] } [/block] [block:api-header] { "title": "1 - Google Messaging Services & FIREBASE Services" } [/block] Antes de implementar a biblioteca, dentro do seu projeto no Android Studio, abra o arquivo **build.gradle (Module: app)** e adicione as seguintes dependências ao seu projeto. **1.1 -** Implemente essas dependências no arquivo ** build.gradle (Module: app) ** : [block:code] { "codes": [ { "code": "apply plugin: 'com.android.application'\n// Adicione esta linha\napply plugin: 'com.google.gms.google-services'\n\ndependencies {\n // Importe o Firebase BoM\n implementation platform('com.google.firebase:firebase-bom:27.1.0')\n\n // Adicione a dependência para o Firebase SDK para Google Analytics\n // Ao usar o BoM, não especifique versões nas dependências do Firebase\n implementation 'com.google.firebase:firebase-analytics'\n\n // Adicione as dependências para qualquer outro produto Firebase desejado\n \n}", "language": "java", "name": "build.gradle (Module: app)" } ] } [/block] **1.2 -** Ainda no arquivo **build.gradle (Module: app)**, adicione no final do arquivo o seguinte plugin: [block:code] { "codes": [ { "code": "apply plugin: 'com.google.gms.google-services'", "language": "java", "name": "build.gradle (Module: app)" } ] } [/block] **1.3 -** Em **build.gradle** (Project: AppName) , Adicione isso : [block:code] { "codes": [ { "code": " dependencies {\n // Add this line\n classpath 'com.google.gms:google-services:4.3.2'\n }\n}", "language": "java", "name": "build.gradle (Project:AppName)" } ] } [/block] <br><br> [block:api-header] { "title": "2 - Implementação da SDK Inngage (inngage-lib)" } [/block] **2.1** - Em **build.gradle (Module: app)** implemente nossa dependências [block:callout] { "type": "info", "title": "Divulgação !", "body": "Esta é uma versão beta, está pronta para ser usada, mas pode ser alterada a qualquer momento que você será informado quando ela for alterada." } [/block] [block:code] { "codes": [ { "code": "dependencies {\t \n \n\t\t implementation 'com.github.inngage:inngage-lib:3.0.1-stable'\n\n}", "language": "java", "name": "build.gradle (Module: app)" } ] } [/block] **2.2 ** - Em **build.gradle (Project: AppName)** adicione o link do repositório [block:code] { "codes": [ { "code": "buildscript{\n\trepositories{\n\t\t\t\t\t\t\t// adicione somente esta linha dentro de \"repositories\"\n \t\t\t\t\t\tmaven { url 'https://jitpack.io' }\n \n\t}\n}\n\nallprojects {\n \trepositories {\n \t\t\t// adicione somente esta linha dentro deste outro \"repositories\"\n \t\t\tmaven { url 'https://jitpack.io' }\n \t}\n}", "language": "java", "name": "build.gradle (Project: AppName)" } ] } [/block] [block:callout] { "type": "warning", "body": "./gradlew --refresh-dependencies para Mac\ngradle --refresh-dependencies para Windows<br><br>", "title": "Em alguns casos, é necessário fazer refresh nas dependências do projeto. Clique em \"Sync\"/\"Sincronizar\" na IDE ou execute o comando:" } [/block] <br><br> [block:api-header] { "title": "3 - Adicionando InngageConstants Interface" } [/block] Visando desacoplar as constantes utilizadas em nossa integração, adicione uma nova interface ao seu projeto denominada "InngageConstants" <br> **3.1-** Crie o arquivo como uma interface "InngageConstants" e adicione o seguinte código [block:code] { "codes": [ { "code": "interface InngageConstants {\n\n String inngageAppToken = \"APP_TOKEN\"; //application token retirado da plataforma Inngage\n String inngageEnvironment = \"prod\";\n String googleMessageProvider = \"FCM\";\n\n}", "language": "java", "name": "InngageConstants" } ] } [/block] [block:api-header] { "title": "4 - Implementando Importações e Métodos na MainActivity" } [/block] Na MainActivity existem algumas importações e métodos para se implementar para possibilitar o processo de : <br> * **subscription** - Responsável por fazer a subscrição do usuário na plataforma Inngage; * **notification handler** - Responsável por fazer a manipulação da notificação quando recebida; <br><br> **4.1 - ** Começaremos importando: [block:code] { "codes": [ { "code": "\timport br.com.inngage.sdk.InngageIntentService;\n\timport br.com.inngage.sdk.InngageUtils;", "language": "java", "name": "MainActivity.java" } ] } [/block] **4.2 - ** Logo após a abertura da classe que implementará esses métodos, adicione essas duas linhas: [block:code] { "codes": [ { "code": "private static final String TAG = \"INNGAGE\";", "language": "java", "name": "MainActivity.java" } ] } [/block] <br><br>**4.3 - Adicione os seguintes métodos nesta mesma classe:**<br><br> **A - handleSubscription:** Esse método é responsável por fazer a subscrição do usuário na plataforma Inngage. Durante esse processo é possível definir um identificador amigável (identifier) ao usuário (CPF, e-mail, id do banco de dados, etc), e campos personalizados para compor a identidade do usuário de seu app (Nome, E-mail, Data de Nascimento, etc). Aprenda mais sobre campos personalizados [clicando aqui.](https://intercom.help/inngage/setup/campos-personalizados) [block:callout] { "type": "info", "body": "* Faça a parametrização do \"identificador\" no método startInit a seu critério (email, username, uuid, id do usuário, cpf, ou mascare esse valor como preferir);\n* Caso o App não tenha campos personalizados, remova a primeira seção abaixo e o atributo do método startInit.\n* Certifique-se de definir os customFields na plataforma antes de usá-los aqui." } [/block] [block:code] { "codes": [ { "code": "\n\t\t\t\t\t\t\t\t\n\t private void handleSubscription() {\n\t\t\t\t\n \t\t// caso o app possua campos customizáveis, descomente estas linhas, cheque-os na plataforma, substitua-os abaixo e adicione os valores de acordo com a sua aplicação\n// JSONObject jsonCustomField = new JSONObject();\n//\n// try {\n//\n// jsonCustomField.put(\"nome\", user.name); \n// jsonCustomField.put(\"email\", user.email);\n// jsonCustomField.put(\"telefone\", \"\");\n// jsonCustomField.put(\"dataRegistro\", \"\");\n// jsonCustomField.put(\"dataNascimento\", \"\");\n//\n//\n// } catch (JSONException e) {\n//\n// e.printStackTrace();\n// }\n//\t\t\t\t// caso possua campos customizáveis, adicione o \"jsonCustomField\" como na chamada abaixo \n// InngageIntentService.startInit(\n// this,\n// InngageConstants.inngageAppToken,\n// \"Identifier\", //Seu identificador\n// InngageConstants.inngageEnvironment,\n// InngageConstants.googleMessageProvider,\n//\t\tjsonCustomField);\n \n // caso não possua campos customizáveis até então:\n InngageIntentService.startInit(\n this,\n InngageConstants.inngageAppToken,\n \"Identifier\", //Seu identificador\n InngageConstants.inngageEnvironment,\n InngageConstants.googleMessageProvider);\n }\n", "language": "java", "name": "MainActivity.java" } ] } [/block] **B - handleNotification:** [block:code] { "codes": [ { "code": "\n \tprivate void handleNotification() {\n\n String notifyID = \"\", title = \"\", body = \"\", url = \"\";\n\n Bundle bundle = getIntent().getExtras();\n\n if (getIntent().hasExtra(\"EXTRA_NOTIFICATION_ID\")) {\n\n notifyID = bundle.getString(\"EXTRA_NOTIFICATION_ID\");\n }\n if (getIntent().hasExtra(\"EXTRA_TITLE\")) {\n\n title = bundle.getString(\"EXTRA_TITLE\");\n }\n if (getIntent().hasExtra(\"EXTRA_BODY\")) {\n\n body = bundle.getString(\"EXTRA_BODY\");\n }\n\n if (getIntent().hasExtra(\"EXTRA_URL\")) {\n\n url = bundle.getString(\"EXTRA_URL\");\n }\n\n if (url.isEmpty()) {\n if (!\"\".equals(notifyID) || !\"\".equals(title) || !\"\".equals(body)) {\n Log.d(TAG, \"no link: \" + url);\n InngageUtils.showDialog(\n title,\n body,\n notifyID,\n InngageConstants.inngageAppToken,\n InngageConstants.inngageEnvironment,\n this);\n }\n\n } else if (!\"\".equals(notifyID) || !\"\".equals(title) || !\"\".equals(body)) {\n Log.d(TAG, \"Link: \" + url);\n InngageUtils.showDialogwithLink(\n title,\n body,\n notifyID,\n InngageConstants.inngageAppToken,\n InngageConstants.inngageEnvironment,\n url,\n this);\n }\n\n }", "language": "java", "name": "MainActivity.java" } ] } [/block] [block:api-header] { "title": "5 - Chamando os métodos" } [/block] Depois de adicionar os trechos de código acima, certifique-se de chamar os 3 métodos em onCreate ou onStart: [block:code] { "codes": [ { "code": "\t \tprotected void onCreate(Bundle savedInstanceState) \n\t{\n \t\t\tsuper.onCreate(savedInstanceState);\n \t \t\tsetContentView(R.layout.activity_main);\n\t\t\t\t\n // adicione essas dois chamadas ao onCreate ou onStart da sua activity\n handleSubscription();\n handleNotification();\n \n \t\n\t}", "language": "java", "name": "MainActivity.java" } ] } [/block] <br><br> [block:api-header] { "title": "6 - Arquivo AndroidManifest.xml" } [/block] Depois de implementar a biblioteca, o arquivo de manifesto precisa de algumas permissões e serviços a serem adicionados.<br><br> **6.1 - **Adicionando Permissões (antes da tag '<application' do AndroidManifest.xml) : [block:code] { "codes": [ { "code": "\t\t\t\t\t<uses-permission android:name=\"android.permission.INTERNET\" />\n \t\t\t<uses-permission android:name=\"android.permission.READ_PHONE_STATE\" />", "language": "xml", "name": "AndroidManifest.xml" } ] } [/block] ** 6.2 - ** Antes de fechar a tag </ application>, adicione isto: [block:callout] { "type": "warning", "title": "Ícone de notificação !", "body": "é obrigatório colocar o ícone de notificação no repositório **drawable** sob o nome **ic_notification** como no exemplo abaixo:\n\n**android:resource=\"@drawable/ic_notification\"**" } [/block] [block:code] { "codes": [ { "code": "<service android:name=\"br.com.inngage.sdk.PushMessagingService\">\n <intent-filter>\n <action android:name=\"com.google.firebase.MESSAGING_EVENT\"/>\n </intent-filter>\n</service>\n\n<meta-data\n android:name=\"com.google.firebase.messaging.default_notification_icon\"\n android:resource=\"@drawable/ic_notification\" />\n\n<service android:name=\"br.com.inngage.sdk.InngageIntentService\"\n android:exported=\"false\">\n <intent-filter>\n <action android:name=\"com.google.firebase.INSTANCE_ID_EVENT\"/>\n </intent-filter>\n</service>\n", "language": "xml", "name": "AndroidManifest.xml" } ] } [/block] <br><br> [block:api-header] { "title": "7 - Configuração abertura do Dialog" } [/block] Após finalizar toda implementação da SDK Inngage e demais dependências do Android, finalizaremos configurando na plataforma Inngage os parâmetros do seu aplicativo. Nesta sessão deveremos informar o nome do pacote *(br.com.suaempresa.seuapp)* e a classe que fará o recebimento do Push, no caso dessa implementação **MainActivity**. [block:image] { "images": [ { "image": [ "https://files.readme.io/b6222bb-Screen_Shot_2018-12-13_at_15.49.05.png", "Screen Shot 2018-12-13 at 15.49.05.png", 890, 249, "#f2f7f7" ] } ] } [/block] <br><br> [block:callout] { "type": "success", "title": "Parabéns", "body": "Terminando este passo você implementou nossa biblioteca com sucesso." } [/block] <br><br> [block:api-header] { "title": "Execute seu projeto e registre seu dispositivo" } [/block] O registro de um dispositivo de teste permitirá que você teste suas mensagens, alterações de variáveis em um dispositivo real. Para registrar seu dispositivo, primeiro verifique se você está em ambiente de Desenvolvimento. Acesse o App gerado e abra a aba Todo Público em sua conta da Inngage, o Dispositivo deve estar registrado. Você pode olhar todas suas informações em variáveis clicando no ícone (Usuário) e enviar uma notificação clicando no ícone (Avião). [block:callout] { "type": "danger", "body": "O uso de uma chave de desenvolvimento pode não suportar usuários reais (em uma escala de produção). Além disso, todos os dados do usuário serão perdidos, pois não são capturados na análise.", "title": "Nunca use uma chave de desenvolvimento em um aplicativo em produção" } [/block]