---
title: "Xamarin.Forms"
slug: "xamarin-forms"
updated: 2026-06-09T22:43:39Z
published: 2026-06-09T22:43:39Z
canonical: "docs.xtremepush.com/xamarin-forms"
stale: true
---

> ## 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.

# Xamarin.Forms

> [!NOTE]
> **Integration of Xamarin.Forms requires the steps on this page in addition to those covered in the main** [**Xamarin integration guide**](/documentation/docs/xamarin)**.**

## Integration

There are three files needed to add the Xtremepush functionality to your Xamarin.Forms app. These are the Xtremepush interface, and its implementation for the Android and iOS platforms.

Add the IXPushDelegate to the shared code section of your app.

![300](https://cdn.document360.io/b056e88b-f6c1-4bd2-b5b8-08e9336a17c9/Images/Documentation/42a7a9c-xp1(1).png)

Open the `IXPushDelegate` and be sure to change the namespace to your own.

Add the `XPushDelegate.cs` files from the Android and iOS folders to the relevant platform section. Again, afterwards, you will need to open these files and change the namespace to your own.

For Android, you will also need to add the nuget package `Plugin.CurrentActivity` and initialise the same in your Application class.

## Using Xtremepush

Once the project has been set up with a common interface and implementations for each platform, use DependencyService to get the correct implementation at runtime.

Example to call `hitTag`:

```csharp
DependencyService.Get<IXPushDelegate>().HitTag("SampleTag");
```

The APIs available are:

```csharp
//sends a single string tag to the platform
DependencyService.Get<IXPushDelegate>().HitTag("TagTitle");

        //sends a tag key-value pair tag consisting of title and value to the platform
DependencyService.Get<IXPushDelegate>().HitTag("TagTitle", "TagValue");

        //sends an event to the platform
DependencyService.Get<IXPushDelegate>().HitEvent("SampleEvent");

        //sends an event key-value pair tag consisting of title and value to the platform
DependencyService.Get<IXPushDelegate>().HitEvent("SampleEvent", "WithValue");

        //opens up the Xtremepush inbox
DependencyService.Get<IXPushDelegate>().OpenInbox();

        //Sets subscribed to push messages as true or false
DependencyService.Get<IXPushDelegate>().SetSubscription(true);

        //Sets the Id associated with the user
DependencyService.Get<IXPushDelegate>().SetUser("UserId");

        //Returns an iDictionary containing details about device
DependencyService.Get<IXPushDelegate>().GetDeviceInfo();

        //Sends request to XPush to get list of push messages, 
                //uint offset = amount from latest to return messages
                //uint limit = number of messages to be returned
DependencyService.Get<IXPushDelegate>().GetPushList(offset, limit);

        //Marks a message as opened (This is tracked automatically so this is not required in most situations) 
                //string messageId = the id of the message to mark as opened
//DependencyService.Get<IXPushDelegate>().MarkPushAsRead(messageId);
```

## Using GetPushList

### Android

On Android, to handle the returned Message list, you must implement the `IPushListListener` interface.

This interface has a single method `PushListReceived`. An example is shown below.

```csharp
public class MainApplication : Application, Application.IActivityLifecycleCallbacks, IPushListListener
    {
        ...

        public void PushListReceived(IList<Message> p0, Java.Lang.Ref.WeakReference p1)
        {
            try
            {
                foreach (Message m in p0){
                    Log.Debug("XPushExample", "create_time: " + m.Metadata["create_time"]);
                }
            } catch (Exception e)
            {
                Log.Debug("XPushExample", "Empty message list received");
            }
        }
    }
```

### iOS

On iOS, in the `XPushDelagate.cs file`, `GetPushList` takes a callback method as its third parameter. This is set as default, to a method called `PushListCallback`, which is also in the file. However you can change this to another method if you wish.

An example of an implementation on iOS:

```csharp
public void GetPushList(uint offset, uint limit)
{
      //replace PushListCallback with your callback function if named differently
      XP.XPush.GetPushNotificationsOffset(offset, limit, PushListCallback);
}

public void PushListCallback(Foundation.NSArray arg1, Foundation.NSError arg2) {
      try
      {
          for (nuint i = 0; i < arg1.Count; i++){
              XP.XPMessage xpm = arg1.GetItem<XP.XPMessage>(i);
              System.Diagnostics.Debug.WriteLine("XPushExample - create_time: " + xpm.Metadata["create_time"]);
          }
      } catch (Exception e)
      {
          System.Diagnostics.Debug.WriteLine("XPushExample - Empty message list received");
      }
}
```

### Xtremepush Message Object

The `XPush` Message object contains the following keys:

- ID: The ID of the message
- Title: The title from the message
- Text: The text of the message
- Campaign ID: The ID of the Xtremepush campaign
- Data: Data includes additional information such as payloads associated with message
- MetaData: Additional data about the message, such as `create_time` and `read` (user clicked message)

## Deeplinks in Xamarin Forms

The process for deeplinking in the Xamarin Forms application is the same as the standard process to add deeplinks, which is described in our [dedicated guide](/documentation/docs/mobile-deeplinks), with a couple of additional changes.

In the Forms project, implement the listener in the format below:

```csharp
[Application]
public class MainApplication : Application, IInboxBadgeUpdateListener, IDeeplinkListener
{
    public MainApplication(IntPtr javaReference, JniHandleOwnership transfer) : base(javaReference, transfer)
    {
    }

    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 = "";
        String GOOGLE_PROJECT_NUMBER = "";
        new PushConnector.Builder(XPUSH_APP_KEY, GOOGLE_PROJECT_NUMBER)
                            .TurnOnDebugLogs(true)
                            .SetDeeplinkListener(this)
                            .Create(this);

    }
}
```

Call the `IDeeplinkListener` within the class itself and set the DeepLinkListener within the PushConnector builder:

```csharp
.setDeeplinkListener(this)
```

For iOS, the deeplink method needs to be registered as follows:

```csharp
(void)registerDeeplinkHandler: (XPDeeplinkCallback)callback;
```

Once those methods are implemented within the Xamarin Forms project, the rest of the deeplink configuration can be taken from the deeplink [user guide](/documentation/docs/mobile-deeplinks).
