---
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,
.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
.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.
.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:
.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.
.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("");
```