A React Native client for Intercom.io
npm install react-native-intercomIntercom has released an official package for React Native. Please use it.
https://github.com/intercom/intercom-react-native
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.
1. Install react-native-intercom:
``bash`
yarn add react-native-intercom # or npm install react-native-intercom
1. Link native dependencies
`bash`
react-native link react-native-intercom
1. 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.libRNIntercom.a
1. Open "General Settings" -> "Build Phases" -> "Link Binary with Libraries" and add
1. Config for iOS (intercom-ios)
1. Add #import "Intercom/intercom.h" with the other imports at the top of ios/YOUR_PROJECT/AppDelegate.m.ios/YOUR_PROJECT/AppDelegate.m
1. Initialize Intercom in with your Intercom iOS API Key and your Intercom App ID:
`obj-c
- (BOOL)application:(UIApplication )application didFinishLaunchingWithOptions:(NSDictionary )launchOptions {
// Intercom
[Intercom setApiKey:@"YOUR_IOS_API_KEY_HERE" forAppId:@"YOUR_APP_ID_HERE"];
}
`
1. Optional, Intercom's documentation suggests adding the following call in order to receive push notifications for new messages:
`obj-c
- (void)application:(UIApplication )application didRegisterForRemoteNotificationsWithDeviceToken:(NSData )deviceToken {
// Intercom
[Intercom setDeviceToken:deviceToken];
}
`
1. 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:
`xml
...other configuration here...
...other configuration here...
`
1. 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:
`java
// ...other configuration here...
import com.robinpowered.react.Intercom.IntercomPackage;
import io.intercom.android.sdk.Intercom;
public class MainApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
Intercom.initialize(this, "YOUR_ANDROID_API_KEY_HERE", "YOUR_APP_ID_HERE");
// ...other configuration here...
}
public List
// ...other configuration here...
packages.add(new IntercomPackage());
// ...other configuration here...
}
}
`
1. In android/build.gradle add maven { url "https://maven.google.com" } (h/t):
`gradle
allprojects {
repositories {
//...other configuration here...
maven { url "https://maven.google.com" }
}
}
`
1. 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:
`gradle`
dependencies {
implementation 'io.intercom.android:intercom-sdk-base:5.+'
}
1. If "Firebase Cloud Messaging(FCM)", then:
`gradle
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)
`java
package com.YOUR_APP;
import io.invertase.firebase.messaging.*;
import android.content.Intent;
import android.content.Context;
import io.intercom.android.sdk.push.IntercomPushClient;
import io.invertase.firebase.messaging.ReactNativeFirebaseMessagingService;
import com.google.firebase.messaging.RemoteMessage;
import android.util.Log;
import java.util.Map;
public class MainMessagingService extends ReactNativeFirebaseMessagingService {
private static final String TAG = "MainMessagingService";
private final IntercomPushClient intercomPushClient = new IntercomPushClient();
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
Map message = 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 ...other configuration here... > ...other configuration here... xmlns:tools="http://schemas.android.com/tools" :`
xml`
>
android:enabled="true"
android:exported="true">
* make sure you have only one service intent with action com.google.firebase.MESSAGING_EVENT
1. Import Intercom and use methods
`javascript
import Intercom from '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.
`javascript`
import Intercom from 'react-native-intercom';
or
`javascript`
var Intercom = require('react-native-intercom');
javascript
Intercom.logEvent('viewed_screen', { extra: 'metadata' });
`$3
`javascript
Intercom.registerIdentifiedUser({ userId: 'bob' });
`$3
`javascript
Intercom.registerUnidentifiedUser();
`$3
`javascript
Intercom.registerIdentifiedUser({ userId: 'bob' })
Intercom.updateUser({
// Pre-defined user attributes
email: '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
},
});
`$3
`javascript
Intercom.setUserHash(hash_received_from_backend)
`$3
`javascript
Intercom.logout()
`$3
`javascript
Intercom.displayMessageComposer();
`$3
`javascript
Intercom.displayMessageComposerWithInitialMessage('Initial Message');
`$3
`javascript
Intercom.displayMessenger();
`$3
`javascript
Intercom.displayConversationsList();
`$3
`javascript
Intercom.displayHelpCenter();
`$3
`javascript
Intercom.setBottomPadding(64);
`$3
`javascript
Intercom.displayHelpCenter();
`
Note that before calling Intercom.displayHelpCenter() it is required to enable Help Center in your Intercom settings.$3
`javascript
Intercom.presentCarousel(carouselID);
`
Note that before calling Intercom.presentCarousel(carouselID) it is required to enable carousels and create a carousel in your Intercom settings.$3
`javascript
componentDidMount() {
Intercom.addEventListener(Intercom.Notifications.UNREAD_COUNT, this._onUnreadChange)
}componentWillUnmount() {
Intercom.removeEventListener(Intercom.Notifications.UNREAD_COUNT, this._onUnreadChange);
}
_onUnreadChange = ({ count }) => {
//...
}
`
$3
`javascript
// The window was hidden
Intercom.Notifications.WINDOW_DID_HIDE // The window was shown
Intercom.Notifications.WINDOW_DID_SHOW
`$3
`
Firebase.messaging().getToken()
.then((token) => {
console.log('Device FCM Token: ', token);
Intercom.sendTokenToIntercom(token);
});
``