Adicionar Xtremepush tanto aos apps iOS quanto Android construídos com Xamarin
O Xtremepush suporta notificações push para dispositivos iOS via o Push Notification Service (APNs) da Apple e notificações push para dispositivos Android via o serviço FCM (Firebase Cloud Messaging for Android) do Google. Esta página contém instruções específicas da Xamarin, mas você precisará conectar seu app iOS e Android à plataforma separadamente.
Antes de integrar
Para completar essa integração, você precisará ter sua chave do aplicativo Xtremepush, certificados APNS para iOS e número do projeto Google e chave API FCM para Android. Esses são usados para conectar seu app à plataforma e aos serviços push da Apple e Google. Revise nossos guias sobre como se conectar à plataforma abaixo:
Formas de Xamarin
Esta página oferece um guia completo de integração com Xamarin para Android e iOS. Se você estiver usando o Xamarin.Forms, deve completar a integração para cada plataforma conforme descrito no guia do Xamarin.Forms e, em seguida, também deve seguir os passos descritos aqui.
Android
Para salvar o
google-services.jsonarquivo associado ao seu projeto, siga os passos em Obter valores de configuração no guia de notificações push do Android .Baixe o arquivo DLL Xtremepush Xamarin bindings dos lançamentos do Xamarin SDK.
No seu IDE (Visual Studio ou Xamarin Studio), adicione uma referência no seu projeto de app ao arquivo DLL:
Editar Referências > .Net Assembly > Navegar... > Selecione a DLL
.png?sv=2026-02-06&spr=https&st=2026-10-03T08%3A12%3A14Z&se=2026-10-03T08%3A29%3A14Z&sr=c&sp=r&sig=8psaQN%2FgH5DkEzhx9ERdVVg9C61Gu7EXP7mOFmsxqcc%3D)
No seu IDE, adicione dois pacotes adicionais ao projeto para satisfazer as dependências subjacentes do nosso SDK:
Google Play Services - Localização (último pacote NuGet estável atualmente 120.0.0.1)
GoogleGson - (último pacote NuGet estável atualmente 2.10.1.2)
Xamarin.Firebase.Messaging (último pacote NuGet estável atualmente 123.1.1.1)
Edite o
AndroidManifest.xmlarquivo para adicionar os seguintes elementos dentro domanifestelemento.<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.WAKE_LOCK" /> <permission android:name=".permission.C2D_MESSAGE" android:protectionLevel="signature" />Se você estiver usando a funcionalidade de Localização ou Beacon, será necessário adicionar o seguinte ao elemento manifesto também.
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" android:exported="false" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" android:exported="false" /> <uses-feature android:name="android.hardware.bluetooth_le" android:required="false" /> <uses-permission android:name="android.permission.BLUETOOTH" android:required="false" /> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" android:required="false" /> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" android:exported="false"/> <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" android:exported="false" />Edite o
AndroidManifest.xmlarquivo para adicionar os seguintes elementos dentro doapplicationelemento.<activity android:name="ie.imobile.extremepush.ui.InboxActivity" android:configChanges="orientation|screenSize" android:label="@string/title_activity_inbox" android:theme="@style/Theme.Transparent" /> <activity android:name="ie.imobile.extremepush.ui.OnclickPushActivity" android:exported="false" android:taskAffinity="" /> <service android:name="ie.imobile.extremepush.NotificationOnClickHandlerService" /> <activity android:name="ie.imobile.extremepush.ui.WebViewActivity" android:exported="false" /> <activity android:name="ie.imobile.extremepush.ui.LocationDialogActivity" android:exported="false" android:label="Locations are not available" android:theme="@android:style/Theme.Dialog" /> <!-- REQUIRED FOR GEO LOCATION SERVICES --> <service android:name="ie.imobile.extremepush.location.GeoLocationService" /> <!-- REQUIRED FOR IBEACON --> <service android:name="ie.imobile.extremepush.beacons.BeaconLocationService" /> <!-- REQUIRED FOR GCM, LOCATION AND BEACON --> <receiver android:name="ie.imobile.extremepush.receivers.CoreBroadcastReceiver" android:exported="false"> <intent-filter> <action android:name="ie.imobile.extremepush.BEACON_SERVICE_STARTED" /> <category android:name="." /> </intent-filter> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> <action android:name="android.intent.action.ACTION_POWER_CONNECTED" /> <action android:name="android.intent.action.ACTION_POWER_DISCONNECTED" /> </intent-filter> </receiver> <service android:name="ie.imobile.extremepush.beacons.XPBeaconJobService" android:permission="android.permission.BIND_JOB_SERVICE" /> <service android:name="ie.imobile.extremepush.util.ImageHandlerJobService" android:permission="android.permission.BIND_JOB_SERVICE" /> <receiver android:name="ie.imobile.extremepush.beacons.BeaconLocationReceiver" android:exported="false" /> <receiver android:name="ie.imobile.extremepush.location.GeoLocationBroadcastReceiver" android:exported="false" /> <receiver android:name="ie.imobile.extremepush.location.ProxymityAlertReceiver" android:exported="false" /> <receiver android:name="ie.imobile.extremepush.receivers.XP_App_Update_Receiver" android:exported="false"> <intent-filter> <action android:name="android.intent.action.MY_PACKAGE_REPLACED" /> <category android:name="." /> </intent-filter> </receiver> <service android:name="ie.imobile.extremepush.google.XPFirebaseMessagingService" android:exported="false"> <intent-filter> <action android:name="com.google.firebase.MESSAGING_EVENT" /> </intent-filter> </service>Edite o
AndroidManifest.xmlarquivo para garantir que haja um ícone definido dentro doapplicationelemento. Isso é necessário para a geração correta de notificações.<application android:icon="@mipmap/icon" android:label="@string/app_name">No arquivo raiz C# do seu projeto, puxe a biblioteca Xtremepush:
using IE.Imobile.Extremepush; using IE.Imobile.Extremepush.Api.Model;Você pode precisar de alguns dos seguintes pacotes no mesmo arquivo, se ainda não foram importados:
using Android.App; using Android.OS; using Android.Runtime; using Android.Util; using Android.Views; using Android.Widget; using System; using System.Collections.Generic;Adicione o que
google-services.jsonvocê baixou ao seu projeto.Copie
google-services.jsonpara a pasta do projeto.Adicione
google-services.jsonao projeto do app.Clique
google-services.jsoncom o botão direito.Defina a ação de build para GoogleServicesJson.
.png?sv=2026-02-06&spr=https&st=2026-10-03T08%3A12%3A14Z&se=2026-10-03T08%3A29%3A14Z&sr=c&sp=r&sig=8psaQN%2FgH5DkEzhx9ERdVVg9C61Gu7EXP7mOFmsxqcc%3D)
Substitua a função Application
onCreatepara inicializar o SDK Xtremepush. Defina a chave do SDK para a que é fornecida ao adicionar o app à plataforma, e o Número do Projeto do Google com o que está nos passos anteriores para configurar as notificações push do Android. Este exemplo também mostra como você pode registrar um callback para eventos de resposta à mensagem e registrar um callback quando o selo da caixa de entrada for atualizado.[Application] public class MainApp : Application, IMessageResponseListener, IInboxBadgeUpdateListener { public MainApp(IntPtr javaReference, JniHandleOwnership transfer) : base(javaReference, transfer) { } public void MessageResponseReceived(Message messagePayload, IDictionary<string, string> responsePayload, Java.Lang.Ref.WeakReference activityHolder) { // Handle a message response if (messagePayload != null) { Log.Debug("MessageResponseReceived", messagePayload.ToJson()); } if (responsePayload != null) { foreach (KeyValuePair<string, string> keypair in responsePayload) Log.Debug("MessageResponseReceived", keypair.Key + " - " + keypair.Value); } } public void InboxBadgeUpdated(int i, Java.Lang.Ref.WeakReference activityHolder) { //print out inbox badge Log.Debug("Inbox Badge is : ", i + ""); } public override void OnCreate() { base.OnCreate(); // If using Xamarin.Forms please install the Plugin.CurrentActivity package // from NuGet and uncomment the line below // CrossCurrentActivity.Current.Init(this); String XPUSH_APP_KEY = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"; String GOOGLE_PROJECT_NUMBER = "XXXXXXXXXXXX"; new PushConnector.Builder(XPUSH_APP_KEY, GOOGLE_PROJECT_NUMBER) .SetMessageResponseListener(this) .SetInboxBadgeUpdateListener(this) .Create(this); } }Se você quiser enviar tags ou eventos para o Xtremepush em outra parte do seu app, isso pode ser feito com as seguintes chamadas de função:
PushConnector.MPushConnector.HitTag("TestTag"); PushConnector.MPushConnector.HitEvent("TestEvent");
iOS
Baixe o arquivo DLL Xtremepush Xamarin bindings dos lançamentos do Xamarin SDK.
No seu IDE (Visual Studio ou Xamarin Studio), adicione uma referência no seu projeto de app ao arquivo DLL
Editar Referências > .Net Assembly > Navegar... > Selecione a DLL
.png?sv=2026-02-06&spr=https&st=2026-10-03T08%3A12%3A14Z&se=2026-10-03T08%3A29%3A14Z&sr=c&sp=r&sig=8psaQN%2FgH5DkEzhx9ERdVVg9C61Gu7EXP7mOFmsxqcc%3D)
Na visualização Source do
Info.plistarquivo, defina os seguintes parâmetros:XtremePushApplicationKey – a chave de aplicação SDK fornecida ao adicionar o app à plataforma.
NSBluetoothPeripheralUsageDescription – uma descrição de uso obrigatória que você precisa adicionar ao seu app, já que o SDK Xtremepush inclui CoreBluetooth (mesmo que não seja usado ativamente). Veja a descrição adicional do CoreBluetooth para mais informações.
Se estiver usando a funcionalidade de localização/beacon no seu app, certifique-se de que tenha entradas para NSLocationAlwaysUsageDescription, NSLocationAlwaysAndWhenInUseUsageDescription e NSLocationWhenInUseUsageDescription.
.png?sv=2026-02-06&spr=https&st=2026-10-03T08%3A12%3A14Z&se=2026-10-03T08%3A29%3A14Z&sr=c&sp=r&sig=8psaQN%2FgH5DkEzhx9ERdVVg9C61Gu7EXP7mOFmsxqcc%3D)
Edite o
AppDelegate.csarquivo e adicione as seguintes linhas dentro daFinishedLaunching()função:using XP; // Setup xtremepush XPush.RegisterForRemoteNotificationTypes(XPNotificationType.Alert | XPNotificationType.Badge | XPNotificationType.Sound); XPush.SetSandboxModeEnabled(true); //Required if doing a debug/dev build of your app XPush.SetLocationEnabled(true); // Required for location or beacon functionality XPush.RegisterMessageResponseHandler((XPMessageResponse response) => { ///handle received message. For example: Console.WriteLine("Response with identifier: " + response.Message.CampaignIdentifier); Console.WriteLine("Response with type: " + response.Message.Type); Console.WriteLine("Response with action URL: " + response.Action.Url); ////Check out XPMessage and XPAction declarations for more avaliable fields }); NSNotificationCenter.DefaultCenter.AddObserver(Constants.XPushInboxBadgeChangeNotification, InboxBadgeUpdated); XPush.ApplicationDidFinishLaunchingWithOptions((options != null) ? options : new NSDictionary());Adicione a seguinte função ao
AppDelegate.csarquivo se quiser lidar com eventos atualizados do selo da caixa de entrada:public void InboxBadgeUpdated(NSNotification nu){ Console.WriteLine("Inbox Badge Changed : " + XP.XPush.InboxBadge); }Edite o
AppDelegate.csarquivo e adicione os seguintes callbacks ao Xtremepush SDK:public override void RegisteredForRemoteNotifications(UIApplication application, NSData deviceToken) { XP.XPush.ApplicationDidRegisterForRemoteNotificationsWithDeviceToken(deviceToken); } public override void FailedToRegisterForRemoteNotifications(UIApplication application, NSError error) { XP.XPush.ApplicationDidFailToRegisterForRemoteNotificationsWithError(error); }Se você precisar associar um Apple ID ao seu IDE, faça isso agora nas preferências do IDE:
.png?sv=2026-02-06&spr=https&st=2026-10-03T08%3A12%3A14Z&se=2026-10-03T08%3A29%3A14Z&sr=c&sp=r&sig=8psaQN%2FgH5DkEzhx9ERdVVg9C61Gu7EXP7mOFmsxqcc%3D)
Edite o
Entitlements.plistarquivo para ativar notificações push..png?sv=2026-02-06&spr=https&st=2026-10-03T08%3A12%3A14Z&se=2026-10-03T08%3A29%3A14Z&sr=c&sp=r&sig=8psaQN%2FgH5DkEzhx9ERdVVg9C61Gu7EXP7mOFmsxqcc%3D)
Se você não está usando o Xamarin.Forms e deseja enviar tags ou eventos para o Xtremepush em outro lugar do seu app, isso pode ser feito com as seguintes chamadas de função:
XPush.XPush.HitTag("TestTag"); XPush.XPush.HitEvent("TestEvent");Se você quiser receber notificações quando seu app estiver em primeiro plano. Isso é possível no iOS 10 e superiores chamando o seguinte método dentro do FinishedLaunching():
XP.XPush.RegisterForegroundNotificationOptions((XPMessage arg0) => { ///you can return different foreground options based on particular message. ///for example you might want to show notification in foreground only for messages from specific campaign id if (arg0.CampaignIdentifier == "travel") { return XP.XPNotificationType.Alert | XP.XPNotificationType.Badge | XP.XPNotificationType.Sound; } return XPNotificationType.None; });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 para garantir que os dispositivos possam ser associados e direcionados em suas campanhas por seu próprio identificador único.
Solução de problemas
Erro de build "Não foi possível AOT do assembly ... xpios.dll"
Desligue as Opções de Projeto > Build > Build iOS > Ative builds incrementais
Reconstruir o projeto novamente (agora deve ter sucesso)
Deve ser possível habilitar builds incrementais novamente após esse ponto