Repository files navigation

Official Package

Intercom has released an official package for React Native. Please use it.

https://github.com/intercom/intercom-react-native

react-native-intercom [DEPRECATED]

React Native wrapper for Intercom.io. Based off of intercom-cordova

Installation Guide

  1. Install Intercom for iOS via whichever method you prefer.

    More recently others have had more success Installing Intercom Manually.

    In the past, installing via CocoaPods was recommended.

  2. Install react-native-intercom:

    yarn add react-native-intercom # or npm install react-native-intercom
  3. Link native dependencies

    react-native link react-native-intercom
  4. Manually Link the library in Xcode (Linking librarys on iOS)

    1. Open Xcode -> Right click "[Your Project Name]/Libraries" folder and select "Add File to [Your Project Name]" -> Select RNIntercom.xcodeproj located in node_modules/react-native-intercom/iOS.
    2. Open "General Settings" -> "Build Phases" -> "Link Binary with Libraries" and add libRNIntercom.a
  5. Config for iOS (intercom-ios)

    1. Add #import "Intercom/intercom.h" with the other imports at the top of ios/YOUR_PROJECT/AppDelegate.m.

    2. Initialize Intercom in ios/YOUR_PROJECT/AppDelegate.m with your Intercom iOS API Key and your Intercom App ID:

      - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
      // Intercom
      [Intercom setApiKey:@"YOUR_IOS_API_KEY_HERE"forAppId:@"YOUR_APP_ID_HERE"];
      }
    3. Optional, Intercom's documentation suggests adding the following call in order to receive push notifications for new messages:

      - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
      // Intercom
      [Intercom setDeviceToken:deviceToken];
      }
    4. Optional, allow access to photos on iOS. Open Info.plist in Xcode and add a new key "Privacy - Photo Library Usage Description". Or alternately, open ios/YOUR_PROJECT/Info.plist and add:

      <dict>
      ...other configuration here...
      <key>NSPhotoLibraryUsageDescription</key>
      <string>Send photos to help resolve app issues</string>
      ...other configuration here...
      </dict>
  6. Config for Android (intercom-android)

    1. In android/app/src/main/java/com/YOUR_APP/app/MainApplication.java, add the following code in the respective sections of the file using your Intercom Android API Key and Intercom App ID:

      // ...other configuration here...importcom.robinpowered.react.Intercom.IntercomPackage;
      importio.intercom.android.sdk.Intercom;
      publicclassMainApplicationextendsApplication {
      @OverridepublicvoidonCreate() {
      super.onCreate();
      Intercom.initialize(this, "YOUR_ANDROID_API_KEY_HERE", "YOUR_APP_ID_HERE");
      // ...other configuration here...
      }
      publicList<ReactPackage> getPackages() {
      // ...other configuration here...packages.add(newIntercomPackage());
      // ...other configuration here...
      }
      }
    2. In android/build.gradle add maven { url "https://maven.google.com" } (h/t):

      allprojects {
      repositories {
      //...other configuration here...
      maven { url "https://maven.google.com" }
      }
      }
    3. Decide which type of push messaging you want to install, and add choosen method to android/app/build.gradle.

      1. If you'd rather not have push notifications in your app, you can use this dependency:

        dependencies {
        implementation 'io.intercom.android:intercom-sdk-base:5.+'
        }
      2. If "Firebase Cloud Messaging(FCM)", then:

        dependencies {
        //...other configuration here...
        implementation 'io.intercom.android:intercom-sdk-base:9.+'
        implementation 'io.intercom.android:intercom-sdk:9.+'
        }

        If you're already using FCM in your application you'll need to extend FirebaseMessagingService to handle Intercom's push notifications (refer to Using Intercom with other FCM setups)

        Here's an example if you're using react-native-firebase as your existing FCM setup:

        I. Add a new file if you don't have one (android/app/src/main/java/com/YOUR_APP/MainMessagingService.java)

        packagecom.YOUR_APP;
        importio.invertase.firebase.messaging.*;
        importandroid.content.Intent;
        importandroid.content.Context;
        importio.intercom.android.sdk.push.IntercomPushClient;
        importio.invertase.firebase.messaging.ReactNativeFirebaseMessagingService;
        importcom.google.firebase.messaging.RemoteMessage;
        importandroid.util.Log;
        importjava.util.Map;
        publicclassMainMessagingServiceextendsReactNativeFirebaseMessagingService {
        privatestaticfinalStringTAG = "MainMessagingService";
        privatefinalIntercomPushClientintercomPushClient = newIntercomPushClient();
        @OverridepublicvoidonMessageReceived(RemoteMessageremoteMessage) {
        Mapmessage = remoteMessage.getData();
        if (intercomPushClient.isIntercomPush(message)) {
        Log.d(TAG, "Intercom message received");
        intercomPushClient.handlePush(getApplication(), message);
        } else {
        super.onMessageReceived(remoteMessage);
        }
        }
        }

        II. Then add the following code to android/app/src/main/AndroidManifest.xml:

        <?xml version="1.0" encoding="utf-8"?>
        <manifestpackage="com.YOUR_APP"
        ...other configuration here...
        >
        <application
        ...other configuration here...
        xmlns:tools="http://schemas.android.com/tools"
        >
        <!-- ...other configuration here... --><!-- ...ADD THE SERVICE BELOW... -->
        <serviceandroid:name=".MainMessagingService"android:enabled="true"android:exported="true">
        <intent-filter>
        <actionandroid:name="com.google.firebase.MESSAGING_EVENT" />
        </intent-filter>
        </service>
        </application>
        </manifest>
        • make sure you have only one service intent with action com.google.firebase.MESSAGING_EVENT
  7. Import Intercom and use methods

    importIntercomfrom'react-native-intercom';// or…// var Intercom = require('react-native-intercom');Intercom.registerIdentifiedUser({userId: 'Bob'});Intercom.logEvent('viewed_screen',{extra: 'metadata'});//...rest of your file...

    Note that calling Intercom.registerIdentifiedUser({ userId: 'Bob' }) (or Intercom.registerUnidentifiedUser()) is required before using methods which require that Intercom know the current user… such as Intercom.displayMessageComposer(), etc.

Usage

Import or Require the module

importIntercomfrom'react-native-intercom';

or

varIntercom=require('react-native-intercom');

Log an event

Intercom.logEvent('viewed_screen',{extra: 'metadata'});

Register a Logged In user

Intercom.registerIdentifiedUser({userId: 'bob'});

Register Unidentified user

Intercom.registerUnidentifiedUser();

Register a Logged In user and post extra metadata

Intercom.registerIdentifiedUser({userId: 'bob'})Intercom.updateUser({// Pre-defined user attributesemail: 'mimi@intercom.com',user_id: 'user_id',name: 'your name',phone: '010-1234-5678',language_override: 'language_override',signed_up_at: 1004,unsubscribed_from_emails: true,companies: [{company_id: 'your company id',name: 'your company name'}],custom_attributes: {my_custom_attribute: 123},});

Set User Hash for Identity Validation (optional)

Intercom.setUserHash(hash_received_from_backend)

Sign Out

Intercom.logout()

Show Message Composer

Intercom.displayMessageComposer();

Show Message Composer with an Initial Message

Intercom.displayMessageComposerWithInitialMessage('Initial Message');

Display Latest Conversation

Intercom.displayMessenger();

Display Conversations List

Intercom.displayConversationsList();

Display Help Center

Intercom.displayHelpCenter();

Set Bottom Padding

Intercom.setBottomPadding(64);

Display Help Center

Intercom.displayHelpCenter();

Note that before calling Intercom.displayHelpCenter() it is required to enable Help Center in your Intercom settings.

Present a Carousel

Intercom.presentCarousel(carouselID);

Note that before calling Intercom.presentCarousel(carouselID) it is required to enable carousels and create a carousel in your Intercom settings.

Listen for Unread Conversation Notifications

componentDidMount(){Intercom.addEventListener(Intercom.Notifications.UNREAD_COUNT,this._onUnreadChange)}componentWillUnmount(){Intercom.removeEventListener(Intercom.Notifications.UNREAD_COUNT,this._onUnreadChange);}_onUnreadChange=({ count })=>{//...}

Other Notifications

// The window was hiddenIntercom.Notifications.WINDOW_DID_HIDE// The window was shownIntercom.Notifications.WINDOW_DID_SHOW

Send FCM token directly to Intercom for push notifications (Android only)

Firebase.messaging().getToken()
.then((token) => {
console.log('Device FCM Token: ', token);
Intercom.sendTokenToIntercom(token);
});

About

React Native wrapper for Intercom.io

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

Official Package

Intercom has released an official package for React Native. Please use it.

https://github.com/intercom/intercom-react-native

react-native-intercom [DEPRECATED]

React Native wrapper for Intercom.io. Based off of intercom-cordova

Installation Guide

  1. Install Intercom for iOS via whichever method you prefer.

    More recently others have had more success Installing Intercom Manually.

    In the past, installing via CocoaPods was recommended.

  2. Install react-native-intercom:

    yarn add react-native-intercom # or npm install react-native-intercom
  3. Link native dependencies

    react-native link react-native-intercom
  4. Manually Link the library in Xcode (Linking librarys on iOS)

    1. Open Xcode -> Right click "[Your Project Name]/Libraries" folder and select "Add File to [Your Project Name]" -> Select RNIntercom.xcodeproj located in node_modules/react-native-intercom/iOS.
    2. Open "General Settings" -> "Build Phases" -> "Link Binary with Libraries" and add libRNIntercom.a
  5. Config for iOS (intercom-ios)

    1. Add #import "Intercom/intercom.h" with the other imports at the top of ios/YOUR_PROJECT/AppDelegate.m.

    2. Initialize Intercom in ios/YOUR_PROJECT/AppDelegate.m with your Intercom iOS API Key and your Intercom App ID:

      - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
      // Intercom
      [Intercom setApiKey:@"YOUR_IOS_API_KEY_HERE"forAppId:@"YOUR_APP_ID_HERE"];
      }
    3. Optional, Intercom's documentation suggests adding the following call in order to receive push notifications for new messages:

      - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
      // Intercom
      [Intercom setDeviceToken:deviceToken];
      }
    4. Optional, allow access to photos on iOS. Open Info.plist in Xcode and add a new key "Privacy - Photo Library Usage Description". Or alternately, open ios/YOUR_PROJECT/Info.plist and add:

      <dict>
      ...other configuration here...
      <key>NSPhotoLibraryUsageDescription</key>
      <string>Send photos to help resolve app issues</string>
      ...other configuration here...
      </dict>
  6. Config for Android (intercom-android)

    1. In android/app/src/main/java/com/YOUR_APP/app/MainApplication.java, add the following code in the respective sections of the file using your Intercom Android API Key and Intercom App ID:

      // ...other configuration here...importcom.robinpowered.react.Intercom.IntercomPackage;
      importio.intercom.android.sdk.Intercom;
      publicclassMainApplicationextendsApplication {
      @OverridepublicvoidonCreate() {
      super.onCreate();
      Intercom.initialize(this, "YOUR_ANDROID_API_KEY_HERE", "YOUR_APP_ID_HERE");
      // ...other configuration here...
      }
      publicList<ReactPackage> getPackages() {
      // ...other configuration here...packages.add(newIntercomPackage());
      // ...other configuration here...
      }
      }
    2. In android/build.gradle add maven { url "https://maven.google.com" } (h/t):

      allprojects {
      repositories {
      //...other configuration here...
      maven { url "https://maven.google.com" }
      }
      }
    3. Decide which type of push messaging you want to install, and add choosen method to android/app/build.gradle.

      1. If you'd rather not have push notifications in your app, you can use this dependency:

        dependencies {
        implementation 'io.intercom.android:intercom-sdk-base:5.+'
        }
      2. If "Firebase Cloud Messaging(FCM)", then:

        dependencies {
        //...other configuration here...
        implementation 'io.intercom.android:intercom-sdk-base:9.+'
        implementation 'io.intercom.android:intercom-sdk:9.+'
        }

        If you're already using FCM in your application you'll need to extend FirebaseMessagingService to handle Intercom's push notifications (refer to Using Intercom with other FCM setups)

        Here's an example if you're using react-native-firebase as your existing FCM setup:

        I. Add a new file if you don't have one (android/app/src/main/java/com/YOUR_APP/MainMessagingService.java)

        packagecom.YOUR_APP;
        importio.invertase.firebase.messaging.*;
        importandroid.content.Intent;
        importandroid.content.Context;
        importio.intercom.android.sdk.push.IntercomPushClient;
        importio.invertase.firebase.messaging.ReactNativeFirebaseMessagingService;
        importcom.google.firebase.messaging.RemoteMessage;
        importandroid.util.Log;
        importjava.util.Map;
        publicclassMainMessagingServiceextendsReactNativeFirebaseMessagingService {
        privatestaticfinalStringTAG = "MainMessagingService";
        privatefinalIntercomPushClientintercomPushClient = newIntercomPushClient();
        @OverridepublicvoidonMessageReceived(RemoteMessageremoteMessage) {
        Mapmessage = remoteMessage.getData();
        if (intercomPushClient.isIntercomPush(message)) {
        Log.d(TAG, "Intercom message received");
        intercomPushClient.handlePush(getApplication(), message);
        } else {
        super.onMessageReceived(remoteMessage);
        }
        }
        }

        II. Then add the following code to android/app/src/main/AndroidManifest.xml:

        <?xml version="1.0" encoding="utf-8"?>
        <manifestpackage="com.YOUR_APP"
        ...other configuration here...
        >
        <application
        ...other configuration here...
        xmlns:tools="http://schemas.android.com/tools"
        >
        <!-- ...other configuration here... --><!-- ...ADD THE SERVICE BELOW... -->
        <serviceandroid:name=".MainMessagingService"android:enabled="true"android:exported="true">
        <intent-filter>
        <actionandroid:name="com.google.firebase.MESSAGING_EVENT" />
        </intent-filter>
        </service>
        </application>
        </manifest>
        • make sure you have only one service intent with action com.google.firebase.MESSAGING_EVENT
  7. Import Intercom and use methods

    importIntercomfrom'react-native-intercom';// or…// var Intercom = require('react-native-intercom');Intercom.registerIdentifiedUser({userId: 'Bob'});Intercom.logEvent('viewed_screen',{extra: 'metadata'});//...rest of your file...

    Note that calling Intercom.registerIdentifiedUser({ userId: 'Bob' }) (or Intercom.registerUnidentifiedUser()) is required before using methods which require that Intercom know the current user… such as Intercom.displayMessageComposer(), etc.

Usage

Import or Require the module

importIntercomfrom'react-native-intercom';

or

varIntercom=require('react-native-intercom');

Log an event

Intercom.logEvent('viewed_screen',{extra: 'metadata'});

Register a Logged In user

Intercom.registerIdentifiedUser({userId: 'bob'});

Register Unidentified user

Intercom.registerUnidentifiedUser();

Register a Logged In user and post extra metadata

Intercom.registerIdentifiedUser({userId: 'bob'})Intercom.updateUser({// Pre-defined user attributesemail: 'mimi@intercom.com',user_id: 'user_id',name: 'your name',phone: '010-1234-5678',language_override: 'language_override',signed_up_at: 1004,unsubscribed_from_emails: true,companies: [{company_id: 'your company id',name: 'your company name'}],custom_attributes: {my_custom_attribute: 123},});

Set User Hash for Identity Validation (optional)

Intercom.setUserHash(hash_received_from_backend)

Sign Out

Intercom.logout()

Show Message Composer

Intercom.displayMessageComposer();

Show Message Composer with an Initial Message

Intercom.displayMessageComposerWithInitialMessage('Initial Message');

Display Latest Conversation

Intercom.displayMessenger();

Display Conversations List

Intercom.displayConversationsList();

Display Help Center

Intercom.displayHelpCenter();

Set Bottom Padding

Intercom.setBottomPadding(64);

Display Help Center

Intercom.displayHelpCenter();

Note that before calling Intercom.displayHelpCenter() it is required to enable Help Center in your Intercom settings.

Present a Carousel

Intercom.presentCarousel(carouselID);

Note that before calling Intercom.presentCarousel(carouselID) it is required to enable carousels and create a carousel in your Intercom settings.

Listen for Unread Conversation Notifications

componentDidMount(){Intercom.addEventListener(Intercom.Notifications.UNREAD_COUNT,this._onUnreadChange)}componentWillUnmount(){Intercom.removeEventListener(Intercom.Notifications.UNREAD_COUNT,this._onUnreadChange);}_onUnreadChange=({ count })=>{//...}

Other Notifications

// The window was hiddenIntercom.Notifications.WINDOW_DID_HIDE// The window was shownIntercom.Notifications.WINDOW_DID_SHOW

Send FCM token directly to Intercom for push notifications (Android only)

Firebase.messaging().getToken()
.then((token) => {
console.log('Device FCM Token: ', token);
Intercom.sendTokenToIntercom(token);
});

About

React Native wrapper for Intercom.io

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Official Package

Intercom has released an official package for React Native. Please use it.

https://github.com/intercom/intercom-react-native

react-native-intercom [DEPRECATED]

React Native wrapper for Intercom.io. Based off of intercom-cordova

Installation Guide

  1. Install Intercom for iOS via whichever method you prefer.

    More recently others have had more success Installing Intercom Manually.

    In the past, installing via CocoaPods was recommended.

  2. Install react-native-intercom:

    yarn add react-native-intercom # or npm install react-native-intercom
  3. Link native dependencies

    react-native link react-native-intercom
  4. Manually Link the library in Xcode (Linking librarys on iOS)

    1. Open Xcode -> Right click "[Your Project Name]/Libraries" folder and select "Add File to [Your Project Name]" -> Select RNIntercom.xcodeproj located in node_modules/react-native-intercom/iOS.
    2. Open "General Settings" -> "Build Phases" -> "Link Binary with Libraries" and add libRNIntercom.a
  5. Config for iOS (intercom-ios)

    1. Add #import "Intercom/intercom.h" with the other imports at the top of ios/YOUR_PROJECT/AppDelegate.m.

    2. Initialize Intercom in ios/YOUR_PROJECT/AppDelegate.m with your Intercom iOS API Key and your Intercom App ID:

      - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
      // Intercom
      [Intercom setApiKey:@"YOUR_IOS_API_KEY_HERE"forAppId:@"YOUR_APP_ID_HERE"];
      }
    3. Optional, Intercom's documentation suggests adding the following call in order to receive push notifications for new messages:

      - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
      // Intercom
      [Intercom setDeviceToken:deviceToken];
      }
    4. Optional, allow access to photos on iOS. Open Info.plist in Xcode and add a new key "Privacy - Photo Library Usage Description". Or alternately, open ios/YOUR_PROJECT/Info.plist and add:

      <dict>
      ...other configuration here...
      <key>NSPhotoLibraryUsageDescription</key>
      <string>Send photos to help resolve app issues</string>
      ...other configuration here...
      </dict>
  6. Config for Android (intercom-android)

    1. In android/app/src/main/java/com/YOUR_APP/app/MainApplication.java, add the following code in the respective sections of the file using your Intercom Android API Key and Intercom App ID:

      // ...other configuration here...importcom.robinpowered.react.Intercom.IntercomPackage;
      importio.intercom.android.sdk.Intercom;
      publicclassMainApplicationextendsApplication {
      @OverridepublicvoidonCreate() {
      super.onCreate();
      Intercom.initialize(this, "YOUR_ANDROID_API_KEY_HERE", "YOUR_APP_ID_HERE");
      // ...other configuration here...
      }
      publicList<ReactPackage> getPackages() {
      // ...other configuration here...packages.add(newIntercomPackage());
      // ...other configuration here...
      }
      }
    2. In android/build.gradle add maven { url "https://maven.google.com" } (h/t):

      allprojects {
      repositories {
      //...other configuration here...
      maven { url "https://maven.google.com" }
      }
      }
    3. Decide which type of push messaging you want to install, and add choosen method to android/app/build.gradle.

      1. If you'd rather not have push notifications in your app, you can use this dependency:

        dependencies {
        implementation 'io.intercom.android:intercom-sdk-base:5.+'
        }
      2. If "Firebase Cloud Messaging(FCM)", then:

        dependencies {
        //...other configuration here...
        implementation 'io.intercom.android:intercom-sdk-base:9.+'
        implementation 'io.intercom.android:intercom-sdk:9.+'
        }

        If you're already using FCM in your application you'll need to extend FirebaseMessagingService to handle Intercom's push notifications (refer to Using Intercom with other FCM setups)

        Here's an example if you're using react-native-firebase as your existing FCM setup:

        I. Add a new file if you don't have one (android/app/src/main/java/com/YOUR_APP/MainMessagingService.java)

        packagecom.YOUR_APP;
        importio.invertase.firebase.messaging.*;
        importandroid.content.Intent;
        importandroid.content.Context;
        importio.intercom.android.sdk.push.IntercomPushClient;
        importio.invertase.firebase.messaging.ReactNativeFirebaseMessagingService;
        importcom.google.firebase.messaging.RemoteMessage;
        importandroid.util.Log;
        importjava.util.Map;
        publicclassMainMessagingServiceextendsReactNativeFirebaseMessagingService {
        privatestaticfinalStringTAG = "MainMessagingService";
        privatefinalIntercomPushClientintercomPushClient = newIntercomPushClient();
        @OverridepublicvoidonMessageReceived(RemoteMessageremoteMessage) {
        Mapmessage = remoteMessage.getData();
        if (intercomPushClient.isIntercomPush(message)) {
        Log.d(TAG, "Intercom message received");
        intercomPushClient.handlePush(getApplication(), message);
        } else {
        super.onMessageReceived(remoteMessage);
        }
        }
        }

        II. Then add the following code to android/app/src/main/AndroidManifest.xml:

        <?xml version="1.0" encoding="utf-8"?>
        <manifestpackage="com.YOUR_APP"
        ...other configuration here...
        >
        <application
        ...other configuration here...
        xmlns:tools="http://schemas.android.com/tools"
        >
        <!-- ...other configuration here... --><!-- ...ADD THE SERVICE BELOW... -->
        <serviceandroid:name=".MainMessagingService"android:enabled="true"android:exported="true">
        <intent-filter>
        <actionandroid:name="com.google.firebase.MESSAGING_EVENT" />
        </intent-filter>
        </service>
        </application>
        </manifest>
        • make sure you have only one service intent with action com.google.firebase.MESSAGING_EVENT
  7. Import Intercom and use methods

    importIntercomfrom'react-native-intercom';// or…// var Intercom = require('react-native-intercom');Intercom.registerIdentifiedUser({userId: 'Bob'});Intercom.logEvent('viewed_screen',{extra: 'metadata'});//...rest of your file...

    Note that calling Intercom.registerIdentifiedUser({ userId: 'Bob' }) (or Intercom.registerUnidentifiedUser()) is required before using methods which require that Intercom know the current user… such as Intercom.displayMessageComposer(), etc.

Usage

Import or Require the module

importIntercomfrom'react-native-intercom';

or

varIntercom=require('react-native-intercom');

Log an event

Intercom.logEvent('viewed_screen',{extra: 'metadata'});

Register a Logged In user

Intercom.registerIdentifiedUser({userId: 'bob'});

Register Unidentified user

Intercom.registerUnidentifiedUser();

Register a Logged In user and post extra metadata

Intercom.registerIdentifiedUser({userId: 'bob'})Intercom.updateUser({// Pre-defined user attributesemail: 'mimi@intercom.com',user_id: 'user_id',name: 'your name',phone: '010-1234-5678',language_override: 'language_override',signed_up_at: 1004,unsubscribed_from_emails: true,companies: [{company_id: 'your company id',name: 'your company name'}],custom_attributes: {my_custom_attribute: 123},});

Set User Hash for Identity Validation (optional)

Intercom.setUserHash(hash_received_from_backend)

Sign Out

Intercom.logout()

Show Message Composer

Intercom.displayMessageComposer();

Show Message Composer with an Initial Message

Intercom.displayMessageComposerWithInitialMessage('Initial Message');

Display Latest Conversation

Intercom.displayMessenger();

Display Conversations List

Intercom.displayConversationsList();

Display Help Center

Intercom.displayHelpCenter();

Set Bottom Padding

Intercom.setBottomPadding(64);

Display Help Center

Intercom.displayHelpCenter();

Note that before calling Intercom.displayHelpCenter() it is required to enable Help Center in your Intercom settings.

Present a Carousel

Intercom.presentCarousel(carouselID);

Note that before calling Intercom.presentCarousel(carouselID) it is required to enable carousels and create a carousel in your Intercom settings.

Listen for Unread Conversation Notifications

componentDidMount(){Intercom.addEventListener(Intercom.Notifications.UNREAD_COUNT,this._onUnreadChange)}componentWillUnmount(){Intercom.removeEventListener(Intercom.Notifications.UNREAD_COUNT,this._onUnreadChange);}_onUnreadChange=({ count })=>{//...}

Other Notifications

// The window was hiddenIntercom.Notifications.WINDOW_DID_HIDE// The window was shownIntercom.Notifications.WINDOW_DID_SHOW

Send FCM token directly to Intercom for push notifications (Android only)

Firebase.messaging().getToken()
.then((token) => {
console.log('Device FCM Token: ', token);
Intercom.sendTokenToIntercom(token);
});

About

React Native wrapper for Intercom.io

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Official Package

Intercom has released an official package for React Native. Please use it.

https://github.com/intercom/intercom-react-native

react-native-intercom [DEPRECATED]

React Native wrapper for Intercom.io. Based off of intercom-cordova

Installation Guide

  1. Install Intercom for iOS via whichever method you prefer.

    More recently others have had more success Installing Intercom Manually.

    In the past, installing via CocoaPods was recommended.

  2. Install react-native-intercom:

    yarn add react-native-intercom # or npm install react-native-intercom
  3. Link native dependencies

    react-native link react-native-intercom
  4. Manually Link the library in Xcode (Linking librarys on iOS)

    1. Open Xcode -> Right click "[Your Project Name]/Libraries" folder and select "Add File to [Your Project Name]" -> Select RNIntercom.xcodeproj located in node_modules/react-native-intercom/iOS.
    2. Open "General Settings" -> "Build Phases" -> "Link Binary with Libraries" and add libRNIntercom.a
  5. Config for iOS (intercom-ios)

    1. Add #import "Intercom/intercom.h" with the other imports at the top of ios/YOUR_PROJECT/AppDelegate.m.

    2. Initialize Intercom in ios/YOUR_PROJECT/AppDelegate.m with your Intercom iOS API Key and your Intercom App ID:

      - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
      // Intercom
      [Intercom setApiKey:@"YOUR_IOS_API_KEY_HERE"forAppId:@"YOUR_APP_ID_HERE"];
      }
    3. Optional, Intercom's documentation suggests adding the following call in order to receive push notifications for new messages:

      - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
      // Intercom
      [Intercom setDeviceToken:deviceToken];
      }
    4. Optional, allow access to photos on iOS. Open Info.plist in Xcode and add a new key "Privacy - Photo Library Usage Description". Or alternately, open ios/YOUR_PROJECT/Info.plist and add:

      <dict>
      ...other configuration here...
      <key>NSPhotoLibraryUsageDescription</key>
      <string>Send photos to help resolve app issues</string>
      ...other configuration here...
      </dict>
  6. Config for Android (intercom-android)

    1. In android/app/src/main/java/com/YOUR_APP/app/MainApplication.java, add the following code in the respective sections of the file using your Intercom Android API Key and Intercom App ID:

      // ...other configuration here...importcom.robinpowered.react.Intercom.IntercomPackage;
      importio.intercom.android.sdk.Intercom;
      publicclassMainApplicationextendsApplication {
      @OverridepublicvoidonCreate() {
      super.onCreate();
      Intercom.initialize(this, "YOUR_ANDROID_API_KEY_HERE", "YOUR_APP_ID_HERE");
      // ...other configuration here...
      }
      publicList<ReactPackage> getPackages() {
      // ...other configuration here...packages.add(newIntercomPackage());
      // ...other configuration here...
      }
      }
    2. In android/build.gradle add maven { url "https://maven.google.com" } (h/t):

      allprojects {
      repositories {
      //...other configuration here...
      maven { url "https://maven.google.com" }
      }
      }
    3. Decide which type of push messaging you want to install, and add choosen method to android/app/build.gradle.

      1. If you'd rather not have push notifications in your app, you can use this dependency:

        dependencies {
        implementation 'io.intercom.android:intercom-sdk-base:5.+'
        }
      2. If "Firebase Cloud Messaging(FCM)", then:

        dependencies {
        //...other configuration here...
        implementation 'io.intercom.android:intercom-sdk-base:9.+'
        implementation 'io.intercom.android:intercom-sdk:9.+'
        }

        If you're already using FCM in your application you'll need to extend FirebaseMessagingService to handle Intercom's push notifications (refer to Using Intercom with other FCM setups)

        Here's an example if you're using react-native-firebase as your existing FCM setup:

        I. Add a new file if you don't have one (android/app/src/main/java/com/YOUR_APP/MainMessagingService.java)

        packagecom.YOUR_APP;
        importio.invertase.firebase.messaging.*;
        importandroid.content.Intent;
        importandroid.content.Context;
        importio.intercom.android.sdk.push.IntercomPushClient;
        importio.invertase.firebase.messaging.ReactNativeFirebaseMessagingService;
        importcom.google.firebase.messaging.RemoteMessage;
        importandroid.util.Log;
        importjava.util.Map;
        publicclassMainMessagingServiceextendsReactNativeFirebaseMessagingService {
        privatestaticfinalStringTAG = "MainMessagingService";
        privatefinalIntercomPushClientintercomPushClient = newIntercomPushClient();
        @OverridepublicvoidonMessageReceived(RemoteMessageremoteMessage) {
        Mapmessage = remoteMessage.getData();
        if (intercomPushClient.isIntercomPush(message)) {
        Log.d(TAG, "Intercom message received");
        intercomPushClient.handlePush(getApplication(), message);
        } else {
        super.onMessageReceived(remoteMessage);
        }
        }
        }

        II. Then add the following code to android/app/src/main/AndroidManifest.xml:

        <?xml version="1.0" encoding="utf-8"?>
        <manifestpackage="com.YOUR_APP"
        ...other configuration here...
        >
        <application
        ...other configuration here...
        xmlns:tools="http://schemas.android.com/tools"
        >
        <!-- ...other configuration here... --><!-- ...ADD THE SERVICE BELOW... -->
        <serviceandroid:name=".MainMessagingService"android:enabled="true"android:exported="true">
        <intent-filter>
        <actionandroid:name="com.google.firebase.MESSAGING_EVENT" />
        </intent-filter>
        </service>
        </application>
        </manifest>
        • make sure you have only one service intent with action com.google.firebase.MESSAGING_EVENT
  7. Import Intercom and use methods

    importIntercomfrom'react-native-intercom';// or…// var Intercom = require('react-native-intercom');Intercom.registerIdentifiedUser({userId: 'Bob'});Intercom.logEvent('viewed_screen',{extra: 'metadata'});//...rest of your file...

    Note that calling Intercom.registerIdentifiedUser({ userId: 'Bob' }) (or Intercom.registerUnidentifiedUser()) is required before using methods which require that Intercom know the current user… such as Intercom.displayMessageComposer(), etc.

Usage

Import or Require the module

importIntercomfrom'react-native-intercom';

or

varIntercom=require('react-native-intercom');

Log an event

Intercom.logEvent('viewed_screen',{extra: 'metadata'});

Register a Logged In user

Intercom.registerIdentifiedUser({userId: 'bob'});

Register Unidentified user

Intercom.registerUnidentifiedUser();

Register a Logged In user and post extra metadata

Intercom.registerIdentifiedUser({userId: 'bob'})Intercom.updateUser({// Pre-defined user attributesemail: 'mimi@intercom.com',user_id: 'user_id',name: 'your name',phone: '010-1234-5678',language_override: 'language_override',signed_up_at: 1004,unsubscribed_from_emails: true,companies: [{company_id: 'your company id',name: 'your company name'}],custom_attributes: {my_custom_attribute: 123},});

Set User Hash for Identity Validation (optional)

Intercom.setUserHash(hash_received_from_backend)

Sign Out

Intercom.logout()

Show Message Composer

Intercom.displayMessageComposer();

Show Message Composer with an Initial Message

Intercom.displayMessageComposerWithInitialMessage('Initial Message');

Display Latest Conversation

Intercom.displayMessenger();

Display Conversations List

Intercom.displayConversationsList();

Display Help Center

Intercom.displayHelpCenter();

Set Bottom Padding

Intercom.setBottomPadding(64);

Display Help Center

Intercom.displayHelpCenter();

Note that before calling Intercom.displayHelpCenter() it is required to enable Help Center in your Intercom settings.

Present a Carousel

Intercom.presentCarousel(carouselID);

Note that before calling Intercom.presentCarousel(carouselID) it is required to enable carousels and create a carousel in your Intercom settings.

Listen for Unread Conversation Notifications

componentDidMount(){Intercom.addEventListener(Intercom.Notifications.UNREAD_COUNT,this._onUnreadChange)}componentWillUnmount(){Intercom.removeEventListener(Intercom.Notifications.UNREAD_COUNT,this._onUnreadChange);}_onUnreadChange=({ count })=>{//...}

Other Notifications

// The window was hiddenIntercom.Notifications.WINDOW_DID_HIDE// The window was shownIntercom.Notifications.WINDOW_DID_SHOW

Send FCM token directly to Intercom for push notifications (Android only)

Firebase.messaging().getToken()
.then((token) => {
console.log('Device FCM Token: ', token);
Intercom.sendTokenToIntercom(token);
});

About

React Native wrapper for Intercom.io

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

Official Package

Intercom has released an official package for React Native. Please use it.

https://github.com/intercom/intercom-react-native

react-native-intercom [DEPRECATED]

React Native wrapper for Intercom.io. Based off of intercom-cordova

Installation Guide

  1. Install Intercom for iOS via whichever method you prefer.

    More recently others have had more success Installing Intercom Manually.

    In the past, installing via CocoaPods was recommended.

  2. Install react-native-intercom:

    yarn add react-native-intercom # or npm install react-native-intercom
  3. Link native dependencies

    react-native link react-native-intercom
  4. Manually Link the library in Xcode (Linking librarys on iOS)

    1. Open Xcode -> Right click "[Your Project Name]/Libraries" folder and select "Add File to [Your Project Name]" -> Select RNIntercom.xcodeproj located in node_modules/react-native-intercom/iOS.
    2. Open "General Settings" -> "Build Phases" -> "Link Binary with Libraries" and add libRNIntercom.a
  5. Config for iOS (intercom-ios)

    1. Add #import "Intercom/intercom.h" with the other imports at the top of ios/YOUR_PROJECT/AppDelegate.m.

    2. Initialize Intercom in ios/YOUR_PROJECT/AppDelegate.m with your Intercom iOS API Key and your Intercom App ID:

      - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
      // Intercom
      [Intercom setApiKey:@"YOUR_IOS_API_KEY_HERE"forAppId:@"YOUR_APP_ID_HERE"];
      }
    3. Optional, Intercom's documentation suggests adding the following call in order to receive push notifications for new messages:

      - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
      // Intercom
      [Intercom setDeviceToken:deviceToken];
      }
    4. Optional, allow access to photos on iOS. Open Info.plist in Xcode and add a new key "Privacy - Photo Library Usage Description". Or alternately, open ios/YOUR_PROJECT/Info.plist and add:

      <dict>
      ...other configuration here...
      <key>NSPhotoLibraryUsageDescription</key>
      <string>Send photos to help resolve app issues</string>
      ...other configuration here...
      </dict>
  6. Config for Android (intercom-android)

    1. In android/app/src/main/java/com/YOUR_APP/app/MainApplication.java, add the following code in the respective sections of the file using your Intercom Android API Key and Intercom App ID:

      // ...other configuration here...importcom.robinpowered.react.Intercom.IntercomPackage;
      importio.intercom.android.sdk.Intercom;
      publicclassMainApplicationextendsApplication {
      @OverridepublicvoidonCreate() {
      super.onCreate();
      Intercom.initialize(this, "YOUR_ANDROID_API_KEY_HERE", "YOUR_APP_ID_HERE");
      // ...other configuration here...
      }
      publicList<ReactPackage> getPackages() {
      // ...other configuration here...packages.add(newIntercomPackage());
      // ...other configuration here...
      }
      }
    2. In android/build.gradle add maven { url "https://maven.google.com" } (h/t):

      allprojects {
      repositories {
      //...other configuration here...
      maven { url "https://maven.google.com" }
      }
      }
    3. Decide which type of push messaging you want to install, and add choosen method to android/app/build.gradle.

      1. If you'd rather not have push notifications in your app, you can use this dependency:

        dependencies {
        implementation 'io.intercom.android:intercom-sdk-base:5.+'
        }
      2. If "Firebase Cloud Messaging(FCM)", then:

        dependencies {
        //...other configuration here...
        implementation 'io.intercom.android:intercom-sdk-base:9.+'
        implementation 'io.intercom.android:intercom-sdk:9.+'
        }

        If you're already using FCM in your application you'll need to extend FirebaseMessagingService to handle Intercom's push notifications (refer to Using Intercom with other FCM setups)

        Here's an example if you're using react-native-firebase as your existing FCM setup:

        I. Add a new file if you don't have one (android/app/src/main/java/com/YOUR_APP/MainMessagingService.java)

        packagecom.YOUR_APP;
        importio.invertase.firebase.messaging.*;
        importandroid.content.Intent;
        importandroid.content.Context;
        importio.intercom.android.sdk.push.IntercomPushClient;
        importio.invertase.firebase.messaging.ReactNativeFirebaseMessagingService;
        importcom.google.firebase.messaging.RemoteMessage;
        importandroid.util.Log;
        importjava.util.Map;
        publicclassMainMessagingServiceextendsReactNativeFirebaseMessagingService {
        privatestaticfinalStringTAG = "MainMessagingService";
        privatefinalIntercomPushClientintercomPushClient = newIntercomPushClient();
        @OverridepublicvoidonMessageReceived(RemoteMessageremoteMessage) {
        Mapmessage = remoteMessage.getData();
        if (intercomPushClient.isIntercomPush(message)) {
        Log.d(TAG, "Intercom message received");
        intercomPushClient.handlePush(getApplication(), message);
        } else {
        super.onMessageReceived(remoteMessage);
        }
        }
        }

        II. Then add the following code to android/app/src/main/AndroidManifest.xml:

        <?xml version="1.0" encoding="utf-8"?>
        <manifestpackage="com.YOUR_APP"
        ...other configuration here...
        >
        <application
        ...other configuration here...
        xmlns:tools="http://schemas.android.com/tools"
        >
        <!-- ...other configuration here... --><!-- ...ADD THE SERVICE BELOW... -->
        <serviceandroid:name=".MainMessagingService"android:enabled="true"android:exported="true">
        <intent-filter>
        <actionandroid:name="com.google.firebase.MESSAGING_EVENT" />
        </intent-filter>
        </service>
        </application>
        </manifest>
        • make sure you have only one service intent with action com.google.firebase.MESSAGING_EVENT
  7. Import Intercom and use methods

    importIntercomfrom'react-native-intercom';// or…// var Intercom = require('react-native-intercom');Intercom.registerIdentifiedUser({userId: 'Bob'});Intercom.logEvent('viewed_screen',{extra: 'metadata'});//...rest of your file...

    Note that calling Intercom.registerIdentifiedUser({ userId: 'Bob' }) (or Intercom.registerUnidentifiedUser()) is required before using methods which require that Intercom know the current user… such as Intercom.displayMessageComposer(), etc.

Usage

Import or Require the module

importIntercomfrom'react-native-intercom';

or

varIntercom=require('react-native-intercom');

Log an event

Intercom.logEvent('viewed_screen',{extra: 'metadata'});

Register a Logged In user

Intercom.registerIdentifiedUser({userId: 'bob'});

Register Unidentified user

Intercom.registerUnidentifiedUser();

Register a Logged In user and post extra metadata

Intercom.registerIdentifiedUser({userId: 'bob'})Intercom.updateUser({// Pre-defined user attributesemail: 'mimi@intercom.com',user_id: 'user_id',name: 'your name',phone: '010-1234-5678',language_override: 'language_override',signed_up_at: 1004,unsubscribed_from_emails: true,companies: [{company_id: 'your company id',name: 'your company name'}],custom_attributes: {my_custom_attribute: 123},});

Set User Hash for Identity Validation (optional)

Intercom.setUserHash(hash_received_from_backend)

Sign Out

Intercom.logout()

Show Message Composer

Intercom.displayMessageComposer();

Show Message Composer with an Initial Message

Intercom.displayMessageComposerWithInitialMessage('Initial Message');

Display Latest Conversation

Intercom.displayMessenger();

Display Conversations List

Intercom.displayConversationsList();

Display Help Center

Intercom.displayHelpCenter();

Set Bottom Padding

Intercom.setBottomPadding(64);

Display Help Center

Intercom.displayHelpCenter();

Note that before calling Intercom.displayHelpCenter() it is required to enable Help Center in your Intercom settings.

Present a Carousel

Intercom.presentCarousel(carouselID);

Note that before calling Intercom.presentCarousel(carouselID) it is required to enable carousels and create a carousel in your Intercom settings.

Listen for Unread Conversation Notifications

componentDidMount(){Intercom.addEventListener(Intercom.Notifications.UNREAD_COUNT,this._onUnreadChange)}componentWillUnmount(){Intercom.removeEventListener(Intercom.Notifications.UNREAD_COUNT,this._onUnreadChange);}_onUnreadChange=({ count })=>{//...}

Other Notifications

// The window was hiddenIntercom.Notifications.WINDOW_DID_HIDE// The window was shownIntercom.Notifications.WINDOW_DID_SHOW

Send FCM token directly to Intercom for push notifications (Android only)

Firebase.messaging().getToken()
.then((token) => {
console.log('Device FCM Token: ', token);
Intercom.sendTokenToIntercom(token);
});

About

React Native wrapper for Intercom.io

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Official Package

Intercom has released an official package for React Native. Please use it.

https://github.com/intercom/intercom-react-native

react-native-intercom [DEPRECATED]

React Native wrapper for Intercom.io. Based off of intercom-cordova

Installation Guide

  1. Install Intercom for iOS via whichever method you prefer.

    More recently others have had more success Installing Intercom Manually.

    In the past, installing via CocoaPods was recommended.

  2. Install react-native-intercom:

    yarn add react-native-intercom # or npm install react-native-intercom
  3. Link native dependencies

    react-native link react-native-intercom
  4. Manually Link the library in Xcode (Linking librarys on iOS)

    1. Open Xcode -> Right click "[Your Project Name]/Libraries" folder and select "Add File to [Your Project Name]" -> Select RNIntercom.xcodeproj located in node_modules/react-native-intercom/iOS.
    2. Open "General Settings" -> "Build Phases" -> "Link Binary with Libraries" and add libRNIntercom.a
  5. Config for iOS (intercom-ios)

    1. Add #import "Intercom/intercom.h" with the other imports at the top of ios/YOUR_PROJECT/AppDelegate.m.

    2. Initialize Intercom in ios/YOUR_PROJECT/AppDelegate.m with your Intercom iOS API Key and your Intercom App ID:

      - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
      // Intercom
      [Intercom setApiKey:@"YOUR_IOS_API_KEY_HERE"forAppId:@"YOUR_APP_ID_HERE"];
      }
    3. Optional, Intercom's documentation suggests adding the following call in order to receive push notifications for new messages:

      - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
      // Intercom
      [Intercom setDeviceToken:deviceToken];
      }
    4. Optional, allow access to photos on iOS. Open Info.plist in Xcode and add a new key "Privacy - Photo Library Usage Description". Or alternately, open ios/YOUR_PROJECT/Info.plist and add:

      <dict>
      ...other configuration here...
      <key>NSPhotoLibraryUsageDescription</key>
      <string>Send photos to help resolve app issues</string>
      ...other configuration here...
      </dict>
  6. Config for Android (intercom-android)

    1. In android/app/src/main/java/com/YOUR_APP/app/MainApplication.java, add the following code in the respective sections of the file using your Intercom Android API Key and Intercom App ID:

      // ...other configuration here...importcom.robinpowered.react.Intercom.IntercomPackage;
      importio.intercom.android.sdk.Intercom;
      publicclassMainApplicationextendsApplication {
      @OverridepublicvoidonCreate() {
      super.onCreate();
      Intercom.initialize(this, "YOUR_ANDROID_API_KEY_HERE", "YOUR_APP_ID_HERE");
      // ...other configuration here...
      }
      publicList<ReactPackage> getPackages() {
      // ...other configuration here...packages.add(newIntercomPackage());
      // ...other configuration here...
      }
      }
    2. In android/build.gradle add maven { url "https://maven.google.com" } (h/t):

      allprojects {
      repositories {
      //...other configuration here...
      maven { url "https://maven.google.com" }
      }
      }
    3. Decide which type of push messaging you want to install, and add choosen method to android/app/build.gradle.

      1. If you'd rather not have push notifications in your app, you can use this dependency:

        dependencies {
        implementation 'io.intercom.android:intercom-sdk-base:5.+'
        }
      2. If "Firebase Cloud Messaging(FCM)", then:

        dependencies {
        //...other configuration here...
        implementation 'io.intercom.android:intercom-sdk-base:9.+'
        implementation 'io.intercom.android:intercom-sdk:9.+'
        }

        If you're already using FCM in your application you'll need to extend FirebaseMessagingService to handle Intercom's push notifications (refer to Using Intercom with other FCM setups)

        Here's an example if you're using react-native-firebase as your existing FCM setup:

        I. Add a new file if you don't have one (android/app/src/main/java/com/YOUR_APP/MainMessagingService.java)

        packagecom.YOUR_APP;
        importio.invertase.firebase.messaging.*;
        importandroid.content.Intent;
        importandroid.content.Context;
        importio.intercom.android.sdk.push.IntercomPushClient;
        importio.invertase.firebase.messaging.ReactNativeFirebaseMessagingService;
        importcom.google.firebase.messaging.RemoteMessage;
        importandroid.util.Log;
        importjava.util.Map;
        publicclassMainMessagingServiceextendsReactNativeFirebaseMessagingService {
        privatestaticfinalStringTAG = "MainMessagingService";
        privatefinalIntercomPushClientintercomPushClient = newIntercomPushClient();
        @OverridepublicvoidonMessageReceived(RemoteMessageremoteMessage) {
        Mapmessage = remoteMessage.getData();
        if (intercomPushClient.isIntercomPush(message)) {
        Log.d(TAG, "Intercom message received");
        intercomPushClient.handlePush(getApplication(), message);
        } else {
        super.onMessageReceived(remoteMessage);
        }
        }
        }

        II. Then add the following code to android/app/src/main/AndroidManifest.xml:

        <?xml version="1.0" encoding="utf-8"?>
        <manifestpackage="com.YOUR_APP"
        ...other configuration here...
        >
        <application
        ...other configuration here...
        xmlns:tools="http://schemas.android.com/tools"
        >
        <!-- ...other configuration here... --><!-- ...ADD THE SERVICE BELOW... -->
        <serviceandroid:name=".MainMessagingService"android:enabled="true"android:exported="true">
        <intent-filter>
        <actionandroid:name="com.google.firebase.MESSAGING_EVENT" />
        </intent-filter>
        </service>
        </application>
        </manifest>
        • make sure you have only one service intent with action com.google.firebase.MESSAGING_EVENT
  7. Import Intercom and use methods

    importIntercomfrom'react-native-intercom';// or…// var Intercom = require('react-native-intercom');Intercom.registerIdentifiedUser({userId: 'Bob'});Intercom.logEvent('viewed_screen',{extra: 'metadata'});//...rest of your file...

    Note that calling Intercom.registerIdentifiedUser({ userId: 'Bob' }) (or Intercom.registerUnidentifiedUser()) is required before using methods which require that Intercom know the current user… such as Intercom.displayMessageComposer(), etc.

Usage

Import or Require the module

importIntercomfrom'react-native-intercom';

or

varIntercom=require('react-native-intercom');

Log an event

Intercom.logEvent('viewed_screen',{extra: 'metadata'});

Register a Logged In user

Intercom.registerIdentifiedUser({userId: 'bob'});

Register Unidentified user

Intercom.registerUnidentifiedUser();

Register a Logged In user and post extra metadata

Intercom.registerIdentifiedUser({userId: 'bob'})Intercom.updateUser({// Pre-defined user attributesemail: 'mimi@intercom.com',user_id: 'user_id',name: 'your name',phone: '010-1234-5678',language_override: 'language_override',signed_up_at: 1004,unsubscribed_from_emails: true,companies: [{company_id: 'your company id',name: 'your company name'}],custom_attributes: {my_custom_attribute: 123},});

Set User Hash for Identity Validation (optional)

Intercom.setUserHash(hash_received_from_backend)

Sign Out

Intercom.logout()

Show Message Composer

Intercom.displayMessageComposer();

Show Message Composer with an Initial Message

Intercom.displayMessageComposerWithInitialMessage('Initial Message');

Display Latest Conversation

Intercom.displayMessenger();

Display Conversations List

Intercom.displayConversationsList();

Display Help Center

Intercom.displayHelpCenter();

Set Bottom Padding

Intercom.setBottomPadding(64);

Display Help Center

Intercom.displayHelpCenter();

Note that before calling Intercom.displayHelpCenter() it is required to enable Help Center in your Intercom settings.

Present a Carousel

Intercom.presentCarousel(carouselID);

Note that before calling Intercom.presentCarousel(carouselID) it is required to enable carousels and create a carousel in your Intercom settings.

Listen for Unread Conversation Notifications

componentDidMount(){Intercom.addEventListener(Intercom.Notifications.UNREAD_COUNT,this._onUnreadChange)}componentWillUnmount(){Intercom.removeEventListener(Intercom.Notifications.UNREAD_COUNT,this._onUnreadChange);}_onUnreadChange=({ count })=>{//...}

Other Notifications

// The window was hiddenIntercom.Notifications.WINDOW_DID_HIDE// The window was shownIntercom.Notifications.WINDOW_DID_SHOW

Send FCM token directly to Intercom for push notifications (Android only)

Firebase.messaging().getToken()
.then((token) => {
console.log('Device FCM Token: ', token);
Intercom.sendTokenToIntercom(token);
});

About

React Native wrapper for Intercom.io

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Official Package

Intercom has released an official package for React Native. Please use it.

https://github.com/intercom/intercom-react-native

react-native-intercom [DEPRECATED]

React Native wrapper for Intercom.io. Based off of intercom-cordova

Installation Guide

  1. Install Intercom for iOS via whichever method you prefer.

    More recently others have had more success Installing Intercom Manually.

    In the past, installing via CocoaPods was recommended.

  2. Install react-native-intercom:

    yarn add react-native-intercom # or npm install react-native-intercom
  3. Link native dependencies

    react-native link react-native-intercom
  4. Manually Link the library in Xcode (Linking librarys on iOS)

    1. Open Xcode -> Right click "[Your Project Name]/Libraries" folder and select "Add File to [Your Project Name]" -> Select RNIntercom.xcodeproj located in node_modules/react-native-intercom/iOS.
    2. Open "General Settings" -> "Build Phases" -> "Link Binary with Libraries" and add libRNIntercom.a
  5. Config for iOS (intercom-ios)

    1. Add #import "Intercom/intercom.h" with the other imports at the top of ios/YOUR_PROJECT/AppDelegate.m.

    2. Initialize Intercom in ios/YOUR_PROJECT/AppDelegate.m with your Intercom iOS API Key and your Intercom App ID:

      - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
      // Intercom
      [Intercom setApiKey:@"YOUR_IOS_API_KEY_HERE"forAppId:@"YOUR_APP_ID_HERE"];
      }
    3. Optional, Intercom's documentation suggests adding the following call in order to receive push notifications for new messages:

      - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
      // Intercom
      [Intercom setDeviceToken:deviceToken];
      }
    4. Optional, allow access to photos on iOS. Open Info.plist in Xcode and add a new key "Privacy - Photo Library Usage Description". Or alternately, open ios/YOUR_PROJECT/Info.plist and add:

      <dict>
      ...other configuration here...
      <key>NSPhotoLibraryUsageDescription</key>
      <string>Send photos to help resolve app issues</string>
      ...other configuration here...
      </dict>
  6. Config for Android (intercom-android)

    1. In android/app/src/main/java/com/YOUR_APP/app/MainApplication.java, add the following code in the respective sections of the file using your Intercom Android API Key and Intercom App ID:

      // ...other configuration here...importcom.robinpowered.react.Intercom.IntercomPackage;
      importio.intercom.android.sdk.Intercom;
      publicclassMainApplicationextendsApplication {
      @OverridepublicvoidonCreate() {
      super.onCreate();
      Intercom.initialize(this, "YOUR_ANDROID_API_KEY_HERE", "YOUR_APP_ID_HERE");
      // ...other configuration here...
      }
      publicList<ReactPackage> getPackages() {
      // ...other configuration here...packages.add(newIntercomPackage());
      // ...other configuration here...
      }
      }
    2. In android/build.gradle add maven { url "https://maven.google.com" } (h/t):

      allprojects {
      repositories {
      //...other configuration here...
      maven { url "https://maven.google.com" }
      }
      }
    3. Decide which type of push messaging you want to install, and add choosen method to android/app/build.gradle.

      1. If you'd rather not have push notifications in your app, you can use this dependency:

        dependencies {
        implementation 'io.intercom.android:intercom-sdk-base:5.+'
        }
      2. If "Firebase Cloud Messaging(FCM)", then:

        dependencies {
        //...other configuration here...
        implementation 'io.intercom.android:intercom-sdk-base:9.+'
        implementation 'io.intercom.android:intercom-sdk:9.+'
        }

        If you're already using FCM in your application you'll need to extend FirebaseMessagingService to handle Intercom's push notifications (refer to Using Intercom with other FCM setups)

        Here's an example if you're using react-native-firebase as your existing FCM setup:

        I. Add a new file if you don't have one (android/app/src/main/java/com/YOUR_APP/MainMessagingService.java)

        packagecom.YOUR_APP;
        importio.invertase.firebase.messaging.*;
        importandroid.content.Intent;
        importandroid.content.Context;
        importio.intercom.android.sdk.push.IntercomPushClient;
        importio.invertase.firebase.messaging.ReactNativeFirebaseMessagingService;
        importcom.google.firebase.messaging.RemoteMessage;
        importandroid.util.Log;
        importjava.util.Map;
        publicclassMainMessagingServiceextendsReactNativeFirebaseMessagingService {
        privatestaticfinalStringTAG = "MainMessagingService";
        privatefinalIntercomPushClientintercomPushClient = newIntercomPushClient();
        @OverridepublicvoidonMessageReceived(RemoteMessageremoteMessage) {
        Mapmessage = remoteMessage.getData();
        if (intercomPushClient.isIntercomPush(message)) {
        Log.d(TAG, "Intercom message received");
        intercomPushClient.handlePush(getApplication(), message);
        } else {
        super.onMessageReceived(remoteMessage);
        }
        }
        }

        II. Then add the following code to android/app/src/main/AndroidManifest.xml:

        <?xml version="1.0" encoding="utf-8"?>
        <manifestpackage="com.YOUR_APP"
        ...other configuration here...
        >
        <application
        ...other configuration here...
        xmlns:tools="http://schemas.android.com/tools"
        >
        <!-- ...other configuration here... --><!-- ...ADD THE SERVICE BELOW... -->
        <serviceandroid:name=".MainMessagingService"android:enabled="true"android:exported="true">
        <intent-filter>
        <actionandroid:name="com.google.firebase.MESSAGING_EVENT" />
        </intent-filter>
        </service>
        </application>
        </manifest>
        • make sure you have only one service intent with action com.google.firebase.MESSAGING_EVENT
  7. Import Intercom and use methods

    importIntercomfrom'react-native-intercom';// or…// var Intercom = require('react-native-intercom');Intercom.registerIdentifiedUser({userId: 'Bob'});Intercom.logEvent('viewed_screen',{extra: 'metadata'});//...rest of your file...

    Note that calling Intercom.registerIdentifiedUser({ userId: 'Bob' }) (or Intercom.registerUnidentifiedUser()) is required before using methods which require that Intercom know the current user… such as Intercom.displayMessageComposer(), etc.

Usage

Import or Require the module

importIntercomfrom'react-native-intercom';

or

varIntercom=require('react-native-intercom');

Log an event

Intercom.logEvent('viewed_screen',{extra: 'metadata'});

Register a Logged In user

Intercom.registerIdentifiedUser({userId: 'bob'});

Register Unidentified user

Intercom.registerUnidentifiedUser();

Register a Logged In user and post extra metadata

Intercom.registerIdentifiedUser({userId: 'bob'})Intercom.updateUser({// Pre-defined user attributesemail: 'mimi@intercom.com',user_id: 'user_id',name: 'your name',phone: '010-1234-5678',language_override: 'language_override',signed_up_at: 1004,unsubscribed_from_emails: true,companies: [{company_id: 'your company id',name: 'your company name'}],custom_attributes: {my_custom_attribute: 123},});

Set User Hash for Identity Validation (optional)

Intercom.setUserHash(hash_received_from_backend)

Sign Out

Intercom.logout()

Show Message Composer

Intercom.displayMessageComposer();

Show Message Composer with an Initial Message

Intercom.displayMessageComposerWithInitialMessage('Initial Message');

Display Latest Conversation

Intercom.displayMessenger();

Display Conversations List

Intercom.displayConversationsList();

Display Help Center

Intercom.displayHelpCenter();

Set Bottom Padding

Intercom.setBottomPadding(64);

Display Help Center

Intercom.displayHelpCenter();

Note that before calling Intercom.displayHelpCenter() it is required to enable Help Center in your Intercom settings.

Present a Carousel

Intercom.presentCarousel(carouselID);

Note that before calling Intercom.presentCarousel(carouselID) it is required to enable carousels and create a carousel in your Intercom settings.

Listen for Unread Conversation Notifications

componentDidMount(){Intercom.addEventListener(Intercom.Notifications.UNREAD_COUNT,this._onUnreadChange)}componentWillUnmount(){Intercom.removeEventListener(Intercom.Notifications.UNREAD_COUNT,this._onUnreadChange);}_onUnreadChange=({ count })=>{//...}

Other Notifications

// The window was hiddenIntercom.Notifications.WINDOW_DID_HIDE// The window was shownIntercom.Notifications.WINDOW_DID_SHOW

Send FCM token directly to Intercom for push notifications (Android only)

Firebase.messaging().getToken()
.then((token) => {
console.log('Device FCM Token: ', token);
Intercom.sendTokenToIntercom(token);
});

About

React Native wrapper for Intercom.io

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

Official Package

Intercom has released an official package for React Native. Please use it.

https://github.com/intercom/intercom-react-native

react-native-intercom [DEPRECATED]

React Native wrapper for Intercom.io. Based off of intercom-cordova

Installation Guide

  1. Install Intercom for iOS via whichever method you prefer.

    More recently others have had more success Installing Intercom Manually.

    In the past, installing via CocoaPods was recommended.

  2. Install react-native-intercom:

    yarn add react-native-intercom # or npm install react-native-intercom
  3. Link native dependencies

    react-native link react-native-intercom
  4. Manually Link the library in Xcode (Linking librarys on iOS)

    1. Open Xcode -> Right click "[Your Project Name]/Libraries" folder and select "Add File to [Your Project Name]" -> Select RNIntercom.xcodeproj located in node_modules/react-native-intercom/iOS.
    2. Open "General Settings" -> "Build Phases" -> "Link Binary with Libraries" and add libRNIntercom.a
  5. Config for iOS (intercom-ios)

    1. Add #import "Intercom/intercom.h" with the other imports at the top of ios/YOUR_PROJECT/AppDelegate.m.

    2. Initialize Intercom in ios/YOUR_PROJECT/AppDelegate.m with your Intercom iOS API Key and your Intercom App ID:

      - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
      // Intercom
      [Intercom setApiKey:@"YOUR_IOS_API_KEY_HERE"forAppId:@"YOUR_APP_ID_HERE"];
      }
    3. Optional, Intercom's documentation suggests adding the following call in order to receive push notifications for new messages:

      - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
      // Intercom
      [Intercom setDeviceToken:deviceToken];
      }
    4. Optional, allow access to photos on iOS. Open Info.plist in Xcode and add a new key "Privacy - Photo Library Usage Description". Or alternately, open ios/YOUR_PROJECT/Info.plist and add:

      <dict>
      ...other configuration here...
      <key>NSPhotoLibraryUsageDescription</key>
      <string>Send photos to help resolve app issues</string>
      ...other configuration here...
      </dict>
  6. Config for Android (intercom-android)

    1. In android/app/src/main/java/com/YOUR_APP/app/MainApplication.java, add the following code in the respective sections of the file using your Intercom Android API Key and Intercom App ID:

      // ...other configuration here...importcom.robinpowered.react.Intercom.IntercomPackage;
      importio.intercom.android.sdk.Intercom;
      publicclassMainApplicationextendsApplication {
      @OverridepublicvoidonCreate() {
      super.onCreate();
      Intercom.initialize(this, "YOUR_ANDROID_API_KEY_HERE", "YOUR_APP_ID_HERE");
      // ...other configuration here...
      }
      publicList<ReactPackage> getPackages() {
      // ...other configuration here...packages.add(newIntercomPackage());
      // ...other configuration here...
      }
      }
    2. In android/build.gradle add maven { url "https://maven.google.com" } (h/t):

      allprojects {
      repositories {
      //...other configuration here...
      maven { url "https://maven.google.com" }
      }
      }
    3. Decide which type of push messaging you want to install, and add choosen method to android/app/build.gradle.

      1. If you'd rather not have push notifications in your app, you can use this dependency:

        dependencies {
        implementation 'io.intercom.android:intercom-sdk-base:5.+'
        }
      2. If "Firebase Cloud Messaging(FCM)", then:

        dependencies {
        //...other configuration here...
        implementation 'io.intercom.android:intercom-sdk-base:9.+'
        implementation 'io.intercom.android:intercom-sdk:9.+'
        }

        If you're already using FCM in your application you'll need to extend FirebaseMessagingService to handle Intercom's push notifications (refer to Using Intercom with other FCM setups)

        Here's an example if you're using react-native-firebase as your existing FCM setup:

        I. Add a new file if you don't have one (android/app/src/main/java/com/YOUR_APP/MainMessagingService.java)

        packagecom.YOUR_APP;
        importio.invertase.firebase.messaging.*;
        importandroid.content.Intent;
        importandroid.content.Context;
        importio.intercom.android.sdk.push.IntercomPushClient;
        importio.invertase.firebase.messaging.ReactNativeFirebaseMessagingService;
        importcom.google.firebase.messaging.RemoteMessage;
        importandroid.util.Log;
        importjava.util.Map;
        publicclassMainMessagingServiceextendsReactNativeFirebaseMessagingService {
        privatestaticfinalStringTAG = "MainMessagingService";
        privatefinalIntercomPushClientintercomPushClient = newIntercomPushClient();
        @OverridepublicvoidonMessageReceived(RemoteMessageremoteMessage) {
        Mapmessage = remoteMessage.getData();
        if (intercomPushClient.isIntercomPush(message)) {
        Log.d(TAG, "Intercom message received");
        intercomPushClient.handlePush(getApplication(), message);
        } else {
        super.onMessageReceived(remoteMessage);
        }
        }
        }

        II. Then add the following code to android/app/src/main/AndroidManifest.xml:

        <?xml version="1.0" encoding="utf-8"?>
        <manifestpackage="com.YOUR_APP"
        ...other configuration here...
        >
        <application
        ...other configuration here...
        xmlns:tools="http://schemas.android.com/tools"
        >
        <!-- ...other configuration here... --><!-- ...ADD THE SERVICE BELOW... -->
        <serviceandroid:name=".MainMessagingService"android:enabled="true"android:exported="true">
        <intent-filter>
        <actionandroid:name="com.google.firebase.MESSAGING_EVENT" />
        </intent-filter>
        </service>
        </application>
        </manifest>
        • make sure you have only one service intent with action com.google.firebase.MESSAGING_EVENT
  7. Import Intercom and use methods

    importIntercomfrom'react-native-intercom';// or…// var Intercom = require('react-native-intercom');Intercom.registerIdentifiedUser({userId: 'Bob'});Intercom.logEvent('viewed_screen',{extra: 'metadata'});//...rest of your file...

    Note that calling Intercom.registerIdentifiedUser({ userId: 'Bob' }) (or Intercom.registerUnidentifiedUser()) is required before using methods which require that Intercom know the current user… such as Intercom.displayMessageComposer(), etc.

Usage

Import or Require the module

importIntercomfrom'react-native-intercom';

or

varIntercom=require('react-native-intercom');

Log an event

Intercom.logEvent('viewed_screen',{extra: 'metadata'});

Register a Logged In user

Intercom.registerIdentifiedUser({userId: 'bob'});

Register Unidentified user

Intercom.registerUnidentifiedUser();

Register a Logged In user and post extra metadata

Intercom.registerIdentifiedUser({userId: 'bob'})Intercom.updateUser({// Pre-defined user attributesemail: 'mimi@intercom.com',user_id: 'user_id',name: 'your name',phone: '010-1234-5678',language_override: 'language_override',signed_up_at: 1004,unsubscribed_from_emails: true,companies: [{company_id: 'your company id',name: 'your company name'}],custom_attributes: {my_custom_attribute: 123},});

Set User Hash for Identity Validation (optional)

Intercom.setUserHash(hash_received_from_backend)

Sign Out

Intercom.logout()

Show Message Composer

Intercom.displayMessageComposer();

Show Message Composer with an Initial Message

Intercom.displayMessageComposerWithInitialMessage('Initial Message');

Display Latest Conversation

Intercom.displayMessenger();

Display Conversations List

Intercom.displayConversationsList();

Display Help Center

Intercom.displayHelpCenter();

Set Bottom Padding

Intercom.setBottomPadding(64);

Display Help Center

Intercom.displayHelpCenter();

Note that before calling Intercom.displayHelpCenter() it is required to enable Help Center in your Intercom settings.

Present a Carousel

Intercom.presentCarousel(carouselID);

Note that before calling Intercom.presentCarousel(carouselID) it is required to enable carousels and create a carousel in your Intercom settings.

Listen for Unread Conversation Notifications

componentDidMount(){Intercom.addEventListener(Intercom.Notifications.UNREAD_COUNT,this._onUnreadChange)}componentWillUnmount(){Intercom.removeEventListener(Intercom.Notifications.UNREAD_COUNT,this._onUnreadChange);}_onUnreadChange=({ count })=>{//...}

Other Notifications

// The window was hiddenIntercom.Notifications.WINDOW_DID_HIDE// The window was shownIntercom.Notifications.WINDOW_DID_SHOW

Send FCM token directly to Intercom for push notifications (Android only)

Firebase.messaging().getToken()
.then((token) => {
console.log('Device FCM Token: ', token);
Intercom.sendTokenToIntercom(token);
});

About

React Native wrapper for Intercom.io

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages