React Native wrapper for Intercom.io. Based off of intercom-cordova
-
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.
-
Install
react-native-intercom
:yarn add react-native-intercom # or npm install react-native-intercom
Others have reported issues with the current 11.x version and recommend installing the 10.2.0 version:
yarn add react-native-intercom@10.2.0 # or npm install react-native-intercom@10.2.0
-
Link native dependencies
react-native link react-native-intercom
-
Manually Link the library in Xcode (Linking librarys on iOS)
- Open Xcode -> Right click "[Your Project Name]/Libraries" folder and select "Add File to [Your Project Name]" -> Select
RNIntercom.xcodeproj
located innode_modules/react-native-intercom/iOS
. - Open "General Settings" -> "Build Phases" -> "Link Binary with Libraries" and add
libRNIntercom.a
- Open Xcode -> Right click "[Your Project Name]/Libraries" folder and select "Add File to [Your Project Name]" -> Select
-
Config for iOS (intercom-ios)
-
Add
#import "Intercom/intercom.h"
with the other imports at the top ofios/YOUR_PROJECT/AppDelegate.m
. -
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"]; }
-
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]; }
-
Optional, allow access to photos on iOS. Open
Info.plist
in Xcode and add a new key "Privacy - Photo Library Usage Description". Or alternately, openios/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>
-
-
Config for Android (intercom-android)
-
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... 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<ReactPackage> getPackages() { return Arrays.<ReactPackage>asList( // ...other configuration here... new IntercomPackage() // ...other configuration here... ); } }
-
In
android/app/src/main/AndroidManifest.xml
, add the following code in the respective sections of the file:<?xml version="1.0" encoding="utf-8"?> <manifest package="com.myapp" ...other configuration here... > <application ...other configuration here... xmlns:tools="http://schemas.android.com/tools" > <!-- ...other configuration here... --> <service android:name="com.robinpowered.react.Intercom.IntercomIntentService" android:exported="false"> <intent-filter android:priority="999"> <action android:name="com.google.android.c2dm.intent.RECEIVE"/> </intent-filter> </service> <receiver android:name="io.intercom.android.sdk.push.IntercomPushBroadcastReceiver" tools:replace="android:exported" android:exported="true" /> </application> </manifest>
-
In
android/build.gradle
addmaven { url "https://maven.google.com" }
(h/t):allprojects { repositories { //...other configuration here... maven { url "https://maven.google.com" } } }
-
Decide which type of push messaging you want to install, and add choosen method to
android/app/build.gradle
. If "Google Cloud Messaging (GCM)", then:dependencies { //...other configuration here... compile 'io.intercom.android:intercom-sdk:5.+' }
-
-
Import Intercom and use methods
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' })
(orIntercom.registerUnidentifiedUser()
) is required before using methods which require that Intercom know the current user… such asIntercom.displayMessageComposer()
, etc.
import Intercom from 'react-native-intercom';
or
var Intercom = require('react-native-intercom');
Intercom.logEvent('viewed_screen', { extra: 'metadata' });
Intercom.registerIdentifiedUser({ userId: 'bob' });
Intercom.registerUnidentifiedUser();
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
},
});
Intercom.setUserHash(hash_received_from_backend)
Intercom.logout()
Intercom.displayMessageComposer();
Intercom.displayMessageComposerWithInitialMessage('Initial Message');
Intercom.setBottomPadding(64);
componentDidMount() {
Intercom.addEventListener(Intercom.Notifications.UNREAD_COUNT, this._onUnreadChange)
}
componentWillUnmount() {
Intercom.removeEventListener(Intercom.Notifications.UNREAD_COUNT, this._onUnreadChange);
}
_onUnreadChange = ({ count }) => {
//...
}
// The window was hidden
Intercom.Notifications.WINDOW_DID_HIDE
Firebase.messaging().getToken()
.then((token) => {
console.log('Device FCM Token: ', token);
Intercom.sendTokenToIntercom(token);
});