Message Center Overview

The default Message Center is available for iOS and Android. Minimal integration is required, and basic theming options are supported.

By default, when the app receives a push notification carrying a Message Center Action, the Message Center will be automatically displayed in a modal view controller. The Message Center can also be displayed manually with a simple method call on the UAMessageCenter instance. By wiring this method call to a button in your app, you can quickly produce a user-initiated Message Center with no additional effort.

Message Center inboxes are associated with channel IDs. On Android, reinstalling an app creates a new channel ID. Messages previously available in an Android user’s inbox will no longer be available after app reinstall.

Display message center

MessageCenter.shared().showMessageCenter()
MessageCenter.shared().showMessageCenter();
MessageCenter.shared.display()
[UAMessageCenter.shared display];
Airship.messageCenter.display()
Airship.messageCenter.display()
UAirship.displayMessageCenter();
Airship.Instance.DisplayMessageCenter()
Airship.messageCenter.display();
UAirship.Shared.DisplayMessageCenter();

Override default display

The Airship SDK will default to showing the provided MessageCenterActivity. A custom show behavior can be accomplished by providing a MessageCenter.OnShowMessageCenterListener listener during takeOff:

MessageCenter.shared().setOnShowMessageCenterListener { messageId: String? ->
    // Show the message center (messageId is optional)
    true
}

The Airship SDK will default to showing the provided MessageCenterActivity. A custom show behavior can be accomplished by providing a MessageCenter.OnShowMessageCenterListener listener during takeOff:

MessageCenter.shared().setOnShowMessageCenterListener(messageId -> {
    // Show the message center (messageId is optional)
    return true;
});
For custom Message Center implementations, initialize the MessageCenterDisplayDelegate with the custom Message Center implementation’s view controller. This is necessary to ensure that the modal Message Center is not displayed on top of the custom Message Center when a message is received.
For custom Message Center implementations, initialize the UAMessageCenterDisplayDelegate with the custom Message Center implementation’s view controller. This is necessary to ensure that the modal Message Center is not displayed on top of the custom Message Center when a message is received.

First disable the OOTB UI for Message Center.

  Airship.messageCenter.setAutoLaunchDefaultMessageCenter(false);

When disabled, the plugin will generate DisplayMessageCenter events instead of showing any OOTB UI when the Message Center is requested to display.

Next, add a listener to handle the display events:

  Airship.addListener(EventType.DisplayMessageCenter, (event) => {
    if (event.messageId) {
      // deep link to message
    } else {
      // deep link to message center
    }
  });

First disable the OOTB UI for Message Center.

  Airship.messageCenter.setAutoLaunchDefaultMessageCenter(false);

When disabled, the plugin will generate display events instead of showing any OOTB UI when the Message Center is requested to display.

Next, add a listener to handle the display events:

Airship.messageCenter.onDisplay
    .listen((event) => debugPrint('Navigate to app's inbox $event'));
// Not supported
Airship.Instance.OnMessageCenterDisplay += OnMessageCenterDisplay;

static void OnMessageCenterDisplay(object sender, MessageCenterEventArgs e)
{
    //Navigate to custom UI
}
// Not supported
// Not supported

Fetch messages

val messages = MessageCenter.shared().inbox.messages
MessageCenter.shared().getInbox().getMessages();
let messages = await MessageCenter.shared.inbox.messages
[UAMessageCenter.shared.inbox getMessagesWithCompletionHandler:^(NSArray<UAMessageCenterMessage *> *messages) {
    // handle messages
}];
  Airship.messageCenter.getMessages().then((messages) => {
    console.log('Inbox messages: ', messages);
  });
List<InboxMessage> messages = await Airship.messageCenter.messages;
UAirship.getInboxMessages();
var messages = Airship.Instance.InboxMessages;
Airship.messageCenter.messages
Airship.Shared.InboxMessages();

Refresh messages

MessageCenter.shared().inbox.fetchMessages { success ->

}
MessageCenter.shared().getInbox().fetchMessages(new Inbox.FetchMessagesCallback() {

});
let refreshed = await MessageCenter.shared.inbox.refreshMessages()
[UAMessageCenter.shared.inbox refreshMessagesWithCompletionHandler:^(BOOL result) {
    // handle result
}];
  Airship.messageCenter
    .refreshMessages()
    .then(() => {
      console.log('Inbox refreshed');
    })
    .catch((err) => {
      console.log('Unable to refresh inbox: ', err);
    });
Airship.messageCenter.refreshInbox();
UAirship.refreshInbox();
Airship.Instance.FetchInboxMessages(success =>
{
   // ...
});
// Not supported
Airship.Shared.RefreshInbox()

Mark message read

MessageCenter.shared().inbox.markMessagesRead(setOf(messageId))
Message message = MessageCenter.shared().getInbox().getMessage(messageId);
message.markRead();
await MessageCenter.shared.inbox.markRead(messageIDs: [messageID])
[UAMessageCenter.shared.inbox markReadWithMessageIDs:@[messageID] completionHandler:^{
    // Marked read
}];
  Airship.messageCenter
    .markMessageRead('message-id')
    .then(() => {
      console.log('Message marked as read');
    })
    .catch((err) => {
      console.log('Unable to mark message as read: ', err);
    });
Airship.messageCenter.markRead("message-id");
UAirship.markInboxMessageRead("message-id");
Airship.Instance.MarkMessageRead("message-id");
Airship.messageCenter.markMessageRead("message-id")
Airship.Shared.MarkInboxMessageRead("message-id");

Delete message

MessageCenter.shared().inbox.markMessagesDeleted(setOf(messageId))
Message message = MessageCenter.shared().getInbox().getMessage(messageId);
message.delete();
await MessageCenter.shared.inbox.delete(messageIDs: [messageID])
[UAMessageCenter.shared.inbox deleteWithMessageIDs:@[messageID] completionHandler:^{
    // Deleted
}];
  Airship.messageCenter
    .deleteMessage('message-id')
    .then(() => {
      console.log('Message deleted');
    })
    .catch((err) => {
      console.log('Unable to delete message: ', err);
    });
Airship.messageCenter.deleteMessage("message-id");
UAirship.deleteInboxMessage("message-id");
using AirshipDotNet;

Airship.Instance.DeleteMessage("message-id")
using UrbanAirship.NETStandard;

Airship.Instance.DeleteMessage("message-id")
Airship.messageCenter.deleteMessage("message-id")
Airship.Shared.DeleteInboxMessage("message-id");