React Native wrapper for Intercom.io. Based off of intercom-cordova
Run npm install react-native-intercom
Run react-native link
Add the following to your podfile
pod 'react-native-intercom', :path => '../node_modules/react-native-intercom'
Follow how to manually link a library here https://facebook.github.io/react-native/docs/linking-libraries-ios.html#content
Run npm install react-native-intercom
More instructions here: Intercom for iOS
Initialize Intercom in your AppDelegate.m
#import "Intercom/intercom.h"
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Initialize Intercom
[Intercom setApiKey:@"<#ios_sdk-...#>" forAppId:@"<#your-app-id#>"];
}
- 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 setDeviceToken:deviceToken];
}
More instructions here: Intercom for Android
Your Android Application should look like:
// ...
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 api key", "your app id");
// ...
}
public List<ReactPackage> getPackages() {
return Arrays.<ReactPackage>asList(
// ...
new IntercomPackage()
// ...
);
}
}
And in your AndroidManifest.xml should look like
<?xml version="1.0" encoding="utf-8"?>
<manifest package="com.myapp"
...
... add the tools namespace if not already present...
xmlns:tools="http://schemas.android.com/tools"
...
>
<application
...
>
...
...
...
<!-- Add these lines -->
<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>
Don't forget the tools namespace xmlns:tools="http://schemas.android.com/tools"
in your main <application>
tag
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: [{
// Only supported for iOS now
// Parameters: IntercomUserAttribtesBuilder.m -> companyForDictionary()
}],
custom_attributes: {
my_custom_attribute: 123
},
});
Intercom.setUserHash(hash_received_from_backend)
Intercom.reset()
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 }) => {
//...
}
Firebase.messaging().getToken()
.then((token) => {
console.log('Device FCM Token: ', token);
Intercom.sendTokenToIntercom(token);
});