Track who your users are and what they do in your mobile app and customize the Intercom Messenger. Here’s how to configure Intercom for iOS:

Update a user

You can send any data you like to Intercom from standard user attributes that are common to all Intercom users to custom user attributes that are unique to your app.

The complete list of standard user attributes that can be updated are described in the ICMUserAttributes object. Standard user attributes such as a user's name or email address can be updated by calling:

ICMUserAttributes *userAttributes = [ICMUserAttributes new]; = @"Bob"; = @"[email protected]";
[Intercom updateUser:userAttributes];
let userAttributes = ICMUserAttributes() = "Bob" = "[email protected]"

Typically our customers see a lot of value in sending custom data that relates to customer development, such as price plan, value of purchases, etc. Custom user attributes can be created and modified by setting the customAttributes on the ICMUserAttributes object with a dictionary.

ICMUserAttributes *userAttributes = [ICMUserAttributes new];
userAttributes.customAttributes = @{@"paid_subscriber" : @YES,
                                    @"monthly_spend"   : @155.5,
                                    @"team_mates"      : @3};
[Intercom updateUser:userAttributes];
let userAttributes = ICMUserAttributes()
userAttributes.customAttributes = ["paid_subscriber": true,
                                   "monthly_spend"  : 155.5,
                                   "team_mates"     : 3]


You don’t have to create attributes in Intercom beforehand. If a custom attribute hasn't been seen before, it will be created for you automatically.

You can also set company data by setting an array of ICMCompany objects on the ICMUserAttributes object, like:

ICMCompany *company = [ICMCompany new]; = @"My Company";
company.companyId = @"abc1234";

ICMUserAttributes *userAttributes = [ICMUserAttributes new];
userAttributes.companies = @[company];
[Intercom updateUser:userAttributes];
let company = ICMCompany() = "My Company"
company.companyId = "abc1234"
let userAttributes = ICMUserAttributes()
userAttributes.companies = [company]


  • id is a required field for adding or modifying a company.
  • A detailed description of the company model is available in the ICMCompany object.

Submit an event

You can log events in Intercom that record what users do in your app and when they do it. For example, you could record the item a user ordered from your mobile app, and when they ordered it.

[Intercom logEventWithName:@"ordered_item" metaData: @{
    @"order_date": @1392036272,
    @"stripe_invoice": @"inv_3434343434",
    @"order_number": @{
      @"value": @"3434-3434",
      @"url": @""}
Intercom.logEvent(withName: "ordered_item", metaData:[
            "order_date": 1392036272,
            "order_number": [

Customize the Intercom Messenger

We definitely recommend that you customize the Intercom Messenger so that it feels completely at home on your mobile app. Here’s how:

Choose how the launcher appears and opens for your users

If you’d like the standard launcher to appear on the bottom right-hand side of your screen, just call:

[Intercom setLauncherVisible:YES];

If you want to set the bottom padding for the Messenger, which dictates how far from the bottom of the screen the default launcher and in-app messages will appear, you can call:

[Intercom setBottomPadding: bottomPadding];

Create a custom launcher

However, if you’d like the Messenger to open from another location in your mobile app, you can create a custom launcher. This allows you to specify a button, link or element that opens the Messenger. For example, you can trigger the launcher to open when a customer taps on your ‘Help and Support’ button.

If you have a custom launcher, you can call:

[Intercom presentMessenger];

Then we’ll ensure the Messenger opens in the best place for each user.

For example:

  • If a user has one unread conversation, we open that conversation.
  • If a user has no conversations, we open the composer.
  • If a user has more than one unread conversation, we open the conversations list.
  • If a user has no unread conversations, we open the last screen they were on when they closed it.

If you want to open the Messenger to the composer screen with message field pre-populated you can call:

[Intercom presentMessageComposer:@"Message"];

##Show your user’s unread message count

Now you can show how many unread conversations your user has on your custom launcher. Even if a user dismisses a notification, they’ll still have a persistent indicator of unread conversations.

Just grab the current count with this method:

[Intercom unreadConversationCount];

Then, start listening for updates by observing an NSNotification

[[NSNotificationCenter defaultCenter] addObserver:self
                                       selector: #selector(YourClassName.updateUnreadCount(_:)), 
                                           name: NSNotification.Name.IntercomUnreadConversationCountDidChange, 
                                         object: nil)

Temporarily hide notifications

You can prevent in app messages from popping up in certain parts of your app, by calling:

[Intercom setInAppMessagesVisible:NO];


Mobile Carousels Visibility

The method setInAppMessagesVisible does not apply to Mobile Carousels. They will always be displayed.

You can hide any Intercom screen in your app, by calling:

[Intercom hideIntercom];

Present a Carousel Programmatically

From version 8.1.0 of the iOS SDK you can programmatically present a Carousel. Every time this method is called, the carousel will be presented to the user. To present a Carousel, pass in a carouselID from your Intercom workspace to the following method:

[Intercom presentCarousel:@"123456"];


Make sure your carousel is live

A carousel must be ‘live’ to be used in this feature. If it is in a draft or paused state, end-users will see an error if the app tries to open the content.

Intercom NSNotifications

Intercom fires a number of NSNotifications to allow developers to be notified of certain events occurring within their app.

Messenger Display
The following notifications are fired during the Messenger presentation and dismissal. For example, when a user receives a new inapp message, IntercomWindowWillShowNotification will be fired. Once the inapp is displayed on screen IntercomWindowDidShowNotification will be fired.
If the user taps on that inapp message, these notifications will not be fired again as the Intercom window (inapp message) is already displayed.

When the user closes the messenger, IntercomWindowWillHideNotification and IntercomWindowDidHideNotification will be fired. This allows developers to perform certain actions in their app when the Intercom window is closed.

UIKIT_EXTERN NSString *const IntercomWindowDidShowNotification;
UIKIT_EXTERN NSString *const IntercomWindowDidShowNotification;
UIKIT_EXTERN NSString *const IntercomWindowWillHideNotification;
UIKIT_EXTERN NSString *const IntercomWindowDidHideNotification;

Starting a New Conversation
The notification IntercomDidStartNewConversationNotification is fired when a new conversation is started. By listening to this notification, developers can perform certain actions in their app like presenting the Allow Notifications alert to users so that they can receive push notifications replies to that conversation.

UIKIT_EXTERN NSString *const IntercomDidStartNewConversationNotification;

Help Center Display
The following notifications are fired when the Help Center is presented and dismissed.
This allows developers to listen to these notifications and take specific actions within their app as a result of opening or closing the Intercom Help Center.

UIKIT_EXTERN NSString *const IntercomHelpCenterWillShowNotification;
UIKIT_EXTERN NSString *const IntercomHelpCenterDidShowNotification;
UIKIT_EXTERN NSString *const IntercomHelpCenterWillHideNotification;
UIKIT_EXTERN NSString *const IntercomHelpCenterDidHideNotification;

Status Bar Style

If you wish to change your status bar's style or visibility while the Intercom Launcher or an Intercom in-app is displayed on screen, you will need to call [Intercom setNeedsStatusBarAppearanceUpdate] to ensure that Intercom's window can reflect these changes accordingly.

+ (void)setNeedsStatusBarAppearanceUpdate;
func setNeedsStatusBarAppearanceUpdate()


Do you support Dark Mode?
Not yet.

Do you support Multiple Windows on iPadOS?
We plan to support this in the future.

Will you support Catalyst apps in macOS Catalina?
Not yet, but we hope to be able to support this in the future.

What’s next?

Now that you have Intercom configured it's time to: