--- title: "Titânio" slug: "titanium" updated: 2026-06-12T10:30:57Z published: 2026-06-12T10:30:57Z canonical: "docs.xtremepush.com/titanium" --- > ## Documentation Index > Fetch the complete documentation index at: https://docs.xtremepush.com/llms.txt > Use this file to discover all available pages before exploring further. # Titânio Use o SDK Xtremepush para integrar seus apps Titanium com a plataforma Com o módulo Xtremepush para [Titanium](https://www.appcelerator.com/Titanium/), você pode adicionar Xtremepush rapidamente tanto aos apps iOS quanto Android. Certifique-se de que seus aplicativos móveis estejam adicionados ao Xtremepush, seguindo os guias para [Android](/documentation/docs/pt-br/android-integration) e [iOS](/documentation/docs/pt-br/ios-integration). ## Adicione os arquivos Xtremepush Titanium Baixe o módulo Titanium na página [de lançamentos do Titanium SDK](/documentation/docs/pt-br/titanium-sdk-releases) . Copie a pasta de módulos do download para o diretório mostrado abaixo para seu respectivo sistema e permita que ele se mescle. **macOS** ```macOS ~/Library/Application Support/Titanium ``` **Janelas** ```Windows C:\ProgramData\Titanium ``` **Linux** ```Linux ~/.titanium ``` ### Modificar o `tiapp.xml` Importe o módulo Xtremepush para o seu projeto abrindo os `tiapp.xml` do seu projeto no TitaniumStudio. Você pode adicionar o módulo pela interface do editor do TiApp clicando no botão verde de adicionar ao lado da lista de módulos, ![950](https://cdn.document360.io/b056e88b-f6c1-4bd2-b5b8-08e9336a17c9/Images/Documentation/b1398c9-Screen_Shot_2014-12-30_at_14.03.06(1).png?sv=2026-02-06&spr=https&st=2026-11-04T08%3A56%3A59Z&se=2026-11-04T09%3A56%3A59Z&sr=c&sp=r&sig=8dNpGepRawBvJ3vHQkNsJsJjXhtAKTbSOAmrL7irrWQ%3D) e selecionar Xtremepush na lista suspensa ![600](https://cdn.document360.io/b056e88b-f6c1-4bd2-b5b8-08e9336a17c9/Images/Documentation/e816efd-Screen_Shot_2014-12-30_at_14.11.17(1).png?sv=2026-02-06&spr=https&st=2026-11-04T08%3A56%3A59Z&se=2026-11-04T09%3A56%3A59Z&sr=c&sp=r&sig=8dNpGepRawBvJ3vHQkNsJsJjXhtAKTbSOAmrL7irrWQ%3D) você verá o Xtremepush na lista de módulos se você o adicionou com sucesso. ![431](https://cdn.document360.io/b056e88b-f6c1-4bd2-b5b8-08e9336a17c9/Images/Documentation/adfd2a3-Screen_Shot_2014-12-30_at_14.11.36(1).png?sv=2026-02-06&spr=https&st=2026-11-04T08%3A56%3A59Z&se=2026-11-04T09%3A56%3A59Z&sr=c&sp=r&sig=8dNpGepRawBvJ3vHQkNsJsJjXhtAKTbSOAmrL7irrWQ%3D) Você também pode adicionar o módulo editando `tiapp.xml` via editor XML bruto. Nota: Para aplicativos Android, devido à dependência do Xtremepush dos play-services, você também precisará adicionar o módulo *ti.playservices* , da mesma forma que adicionou o módulo Xtremepush descrito acima. ### iOS ```xml ... com.xtremepush.xtremepush com.xtremepush.xtremepush ``` Você deve seguir os passos **em Adicionar descrição para CoreBluetooth** no guia [Integrar o SDK iOS](/documentation/docs/pt-br/ios-sdk-integration) , para adicionar a descrição *necessária do CoreBluetooth* . Se você também estiver ativando notificações push, precisará configurar seus certificados push da Apple e adicionar os métodos de gerenciamento de notificações descritos no guia [de notificações push do iOS](/documentation/docs/pt-br/ios-push-notifications) . Se você estiver adicionando serviços de localização, precisará adicionar as descrições de uso seguindo o guia [de permissões de localização do iOS](/documentation/docs/pt-br/ios-sdk-location) . Se você estiver usando beacons, também precisará adicionar a mensagem de uso de bluetooth descrita na seção de beacons do mesmo guia. Além disso, você precisará adicionar a flag bluetooth no `register.json` seu nó iOS: ```json ios: {    locationsEnabled: true,    beaconsEnabled: true, }, ``` ### Android Siga os passos do guia para [notificações push do Android](/documentation/docs/pt-br/android-push-notifications) para obter os valores de configuração e `google-services.json` o arquivo. No Android nativo, ou em outro framework que use a ferramenta de build do Gradle, você pode adicionar um plugin que migra automaticamente valores do arquivo google-services.json para os recursos do app. O titânio exige que os valores de configuração sejam definidos manualmente a partir do arquivo de configuração. No seu projeto, edite o arquivo `platform/android/res/values/values.xml`, criando-o se ele ainda não existir: ```xml        1:312123...:android:...    312123...    312123...-860....apps.googleusercontent.com    AIza..    my_project...    ... ``` Os valores das chaves no XML podem ser encontrados no `google-services.json` arquivo nestes locais: | Chave XML | Localização em `google-services.json` | | --- | --- | | google_app_id | {YOUR_CLIENT}/client_info/mobilesdk_app_id | | gcm_defaultSenderId | project_info/project_number | | default_web_client_id | {YOUR_CLIENT}/oauth_client/client_id (client_type == 3) | | ga_trackingId | {YOUR_CLIENT}/services/analytics-service/analytics_property/tracking_id | | firebase_database_url | project_info/firebase_url | | google_api_key | {YOUR_CLIENT}/api_key/current_key | | google_crash_reporting_api_key | {YOUR_CLIENT}/api_key/current_key | | project_id | project_info/project_id | Agora você adiciona o módulo Xtremepush e `ti.playservices` ao seu app: ![491](https://cdn.document360.io/b056e88b-f6c1-4bd2-b5b8-08e9336a17c9/Images/Documentation/541f94d-Screenshot_2019-02-11_at_11.54.57(1).png?sv=2026-02-06&spr=https&st=2026-11-04T08%3A56%3A59Z&se=2026-11-04T09%3A56%3A59Z&sr=c&sp=r&sig=8dNpGepRawBvJ3vHQkNsJsJjXhtAKTbSOAmrL7irrWQ%3D) Edite o `tiapp.xml` arquivo para adicionar o seguinte à seção do Android: ```xml                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             ``` ## Habilitar na aplicação de ligas Se você está usando Alloy, então adicionaria o seguinte ao seu `alloy.js` arquivo: ```javascript // Initialise XtremePush Ti.Network.registerApp; Alloy.Globals.xtremepush = require("com.xtremepush.xtremepush"); Alloy.Globals.xtremepush.registerApp(   {      appKey: "YOUR_APP_KEY",      debugLogsEnabled: true,      impressionsBatchingEnabled: true,      impressionsStoreLimit: 999,      inappMessagingEnabled: true,      inboxBadgeCallback: inboxBadgeCallbackFunction,      inboxEnabled: true,      messageResponseCallback: messageResponseCallbackFunction,      deeplinkCallback: onDeeplinkReceived,      tagsBatchingEnabled: true,      tagsStoreLimit: 888,      startSessionEnabled: true,      sessionsStoreLimit: 777,      attributionsEnabled: true,      foregroundNotificationsEnabled: true,          ios: {         //if using location         locationsEnabled: true,         //if sandbox         sandboxModeEnabled: true      },      android: {         gcmProjectNumber: "YOUR_GCM_PROJECT_NUMBER",         //if using geo         geoEnabled: false,         //if using beacon         beaconsEnabled: true      }   }); ``` Você pode ver no registro acima que há três funções de retorno de chamada (`messageResponseCallback`, `InboxBadgeCallback`, `deeplinkCallback`). Exemplos de como usar esses dispositivos são mostrados mais adiante. No seu arquivo `index.js` JavaScript do controle, você precisa registrar o app nos servidores Xtremepush: ```javascript Ti.Network.registerForPushNotifications; ``` Devido ao tratamento do Titanium com Windows e TabGroups como atividades no Android, há várias opções adicionais que podem ser definidas no seu `index.js` arquivo. Neste exemplo, `$.index` está o *principal Grupo de Tabulação* do aplicativo e `$.b1-14` há botões de exemplo que mostram algumas das opções disponíveis no módulo. ```javascript Ti.Network.registerForPushNotifications; var handlePush = function(exampleDataForProcessing) { // Handle received push data alert(exampleDataForProcessing); }; var handlePushList = function(data) { // Handle received push data var pushArray = data.notifications; for (var i=0; i < pushArray.length; i++) { Ti.API.debug(pushArray[i]); handlePush(pushArray[i].alert); } }; $.button0.addEventListener('click', function(e) { Titanium.API.debug("You clicked the trigger event button");    Alloy.Globals.xtremepush.hitEvent("InAppCampaign"); }); $.button1.addEventListener('click', function(e) { Titanium.API.debug("You clicked the hit tag button");    Alloy.Globals.xtremepush.hitEvent("tagTest"); }); $.button2.addEventListener('click', function(e) { Titanium.API.debug("You clicked the hit impression button");    Alloy.Globals.xtremepush.hitImpression("ExampleImpression"); }); $.button3.addEventListener('click', function(e) { Titanium.API.debug("You clicked the release all button");    Alloy.Globals.xtremepush.sendTags();    Alloy.Globals.xtremepush.sendImpressions(); }); batching = false; $.button4.addEventListener('click', function(e) { Titanium.API.debug("You clicked the toggle batching button"); batching = !batching; Ti.API.debug(batching);    Alloy.Globals.xtremepush.setTagsBatchingEnabled(batching);    Alloy.Globals.xtremepush.setImpressionsBatchingEnabled(batching); }); $.button5.addEventListener('click', function(e) { Titanium.API.debug("You clicked the getPushList button");    Alloy.Globals.xtremepush.getPushNotifications({     success: handlePushList,     offset: 0,     limit: 1,     read: 0    }); }); $.button6.addEventListener('click', function(e) { Titanium.API.debug("You clicked the markRead button"); Alloy.Globals.xtremepush.markPushAsRead($.pushid.value); }); $.button7.addEventListener('click', function(e) { Titanium.API.debug("You clicked the openInbox button");    Alloy.Globals.xtremepush.openInbox(); }); $.button8.addEventListener('click', function(e) { Titanium.API.debug("You clicked the Report Message Clicked button with lastPushId = " + lastPushId);    Alloy.Globals.xtremepush.reportMessageClicked(lastPushId); }); $.button9.addEventListener('click', function(e) { Titanium.API.debug("You clicked the Report Message Clicked button with lastPushId = " + lastPushId +" and action 'test'"); var obj = {id: lastPushId, action: "test"};    Alloy.Globals.xtremepush.reportMessageClicked(obj); }); $.button10.addEventListener('click', function(e) { Titanium.API.debug("You clicked the Report Message Dismissed button with lastPushId = "+lastPushId);    Alloy.Globals.xtremepush.reportMessageDismissed(lastPushId); }); $.button11.addEventListener('click', function(e) { Titanium.API.debug("You clicked the Show Notification button");    Alloy.Globals.xtremepush.showNotification(lastPushId); }); $.button12.addEventListener('click', function(e) { Titanium.API.debug("You clicked the set External Id button");    Alloy.Globals.xtremepush.setExternalId($.pushid.value); }); $.button13.addEventListener('click', function(e) { Titanium.API.debug("You clicked the set Hit Event With Value button"); var stringOrHash = {0: "number0", 1: "number1"}; //var stringOrHash = "numbers"; var obj = {title: "tagString", value: stringOrHash};    Alloy.Globals.xtremepush.hitEventWithValue(obj); }); // Declare XtremePush in alloy.js as shown here: // Alloy.Globals.xtremepush = require("com.xtremepush.xtremepush"); var OS_ANDROID = Ti.Platform.getOsname() === "android"; if (OS_ANDROID) { var onRotation = function(e){ var rotation = false; switch(e.orientation) {    case Ti.UI.LANDSCAPE_RIGHT:        Ti.API.info("LANDSCAPE_RIGHT");        rotation = true;        break;    case Ti.UI.LANDSCAPE_LEFT:        Ti.API.info("LANDSCAPE_LEFT");        rotation = true;        break;    case Ti.UI.UPSIDE_PORTRAIT:        Ti.API.info("UPSIDE_PORTRAIT");        rotation = true;        break;    case Ti.UI.PORTRAIT:        Ti.API.info("PORTRAIT");        rotation = true;        break;    default:        Ti.API.info("Unknown!!");    }    if(rotation)     Alloy.Globals.xtremepush.onRotation(); }; $.index.orientationModes = [    Titanium.UI.PORTRAIT,    Titanium.UI.UPSIDE_PORTRAIT,    Titanium.UI.LANDSCAPE_LEFT,    Titanium.UI.LANDSCAPE_RIGHT ]; Ti.Gesture.addEventListener('orientationchange', onRotation); } $.index.open(); ``` > [!TIP] > Certifique-se de definir o ID do usuário > > Recomenda-se que, nesta fase, você use nosso método SDK para definir IDs de usuário, seguindo nosso [guia dedicado](/documentation/docs/pt-br/set-user-id) para garantir que os dispositivos possam ser associados e direcionados em suas campanhas por seu próprio identificador único. ## Definindo o ícone de notificação no Android Existe uma chave que pode ser definida em `register.json` chamada `setIcon`. Se ativado, o programa tentará encontrar e usar `iconfilenamewithoutextension.png` no `platform/android/res/drawable` diretório e também buscará uma entrada de cor com o mesmo nome em qualquer um dos arquivos XML do `platform/android/res/values` diretório para usar como cor de fundo atrás do ícone. ```json setIcon: "iconFileNameWithoutExtension", ``` O Android incentiva você a criar um ícone que esteja de acordo com as [diretrizes](https://developer.android.com/design/patterns/notifications.html) de design deles. Mais informações podem ser encontradas no guia de [ícones de notificação do Android](/documentation/docs/pt-br/android-custom-icon). ## Funções de callback Xtremepush `messageResponseCallback`, `deeplinkCallback`, e `inboxBadgeCallback` são funções JavaScript definidas em um arquivo JavaScript do seu projeto. Após criar, você precisa defini-los na `registerXtremePush` função: ```javascript messageResponseCallback: messageResponseCallbackFunction, inboxBadgeCallback: inboxBadgeCallbackFunction, deeplinkCallback: onDeeplinkReceived, ``` ### mensagemRespostaChamada de Retorno ```javascript var messageResponseCallbackFunction = function(xp) {     if(xp.response.type === "present"){   alert("receive");   } else if (xp.response.type === "click"){   alert("click");   } else if (xp.response.type === "dismiss"){   alert("dismiss");   }   }; ``` A `response.type` variável mostrada acima pode ser de valores específicos: - presente - quando uma notificação push é recebida e o aplicativo está em primeiro plano - clique - quando uma mensagem é clicada - Dispensar - quando uma mensagem é descartada Abaixo está um exemplo completo de tratamento personalizado de notificações, que: - mostra um diálogo personalizado quando uma mensagem push é recebida em primeiro plano, - abre uma página de artigo quando uma mensagem é clicada, - Salva as informações quando um dos botões da mensagem é clicado. (Cada mensagem enviada nas campanhas associadas ao exemplo inclui um payload personalizado para `articleId`) ```javascript var messageResponseCallbackFunction = function(xp) {   Ti.API.info(''+JSON.stringify(xp));    if (xp.response.type === "present") {        openArticle(xp.message.articleId);        //when the user clicks on a message    } else if (xp.response.type === "click") {        //default click action        if (!xp.response.hasOwnProperty('action')) {            openArticle(xp.message.articleId);            //action for specific button click        } else {            if (xp.response.action === "like") {                likeArticle(xp.message.articleId);            } else if (xp.response.action === "share") {                shareArticle(xp.message.articleId);            }        }        //show alert if dismiss button click    } else if (xp.response.type === "dismiss") {        alert("message dismiss");    } }; ``` ### inboxBadgeCallback Isso é chamado quando o número do distintivo é atualizado. O número do distintivo é verificado quando: - Nova mensagem push chega - A inscrição é iniciada - A janela da caixa de entrada está fechada ```javascript var inboxBadgeCallbackFunction = function(xp) {   //do something with message   alert('Inbox badge update with number: ' + JSON.stringify(xp)); }; ``` ### deeplinkCallback Isso é chamado quando uma mensagem com a ação *de clique Ir para o deeplink* é clicada. ```javascript var onDeeplinkReceived = function(xp) {    alert('onDeeplinkReceived called in alloy.js with data:'+JSON.stringify(xp)); }; ``` ## Tratamento de notificações em primeiro plano É importante definir o comportamento correto para a situação quando uma notificação push é recebida em primeiro plano. Você não quer interromper o fluxo de trabalho do usuário, mas ainda assim entregar informações importantes ao usuário. O comportamento padrão tanto no iOS quanto no Android é mostrar notificações no estilo do sistema operacional. Mas isso pode ser mudado, adicionando o payload com chave `foreground` e valor `false` à sua campanha. ![607](https://cdn.document360.io/b056e88b-f6c1-4bd2-b5b8-08e9336a17c9/Images/Documentation/67b297d-pg.1(1).png?sv=2026-02-06&spr=https&st=2026-11-04T08%3A56%3A59Z&se=2026-11-04T09%3A56%3A59Z&sr=c&sp=r&sig=8dNpGepRawBvJ3vHQkNsJsJjXhtAKTbSOAmrL7irrWQ%3D) Agora, quando o pedido é recebido, caso o aplicativo esteja em primeiro plano, a notificação não será exibida. Se você quiser mudar o comportamento padrão para não mostrar notificações quando o app estiver aberto, na função de registro você pode usar o seguinte: ```json foregroundNotificationsEnabled: false ``` ## Recuperando seu ID Xtremepush Agora que seu aplicativo está configurado para análise móvel e envio de notificações push, o recurso básico final do Xtremepush é recuperar seu ID Xtremepush. Isso pode ser feito chamando o `deviceInfo` método: ```javascript Alloy.Globals.xtremepush.deviceInfo ``` Esse método retorna o ID do seu dispositivo como obtido do servidor Xtremepush. Se seu dispositivo não recebeu um ID, então ele não foi registrado com sucesso e há um problema com sua integração. Se, por exemplo, você quiser rapidamente exportar o ID do dispositivo para a área de depuração no TitaniumStudio, usaria assim: ```javascript Ti.API.debug("deviceInfo" + Alloy.Globals.xtremepush.deviceInfo); ``` Se você conseguir recuperar o ID, ele pode ser usado para identificar seu dispositivo na plataforma e enviar uma notificação push apenas para esse dispositivo. ## Gerenciamento de usuários Defina o usuário principal na plataforma: ```javascript Alloy.Globals.xtremepush.setUser(""); ``` Defina o usuário temporário na plataforma: ```javascript Alloy.Globals.xtremepush.setTempUser(""); ```