JulianKingman / react-native-intercom

React Native wrapper for Intercom.io

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

react-native-intercom

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

Install

IOS

Run npm install react-native-intercom Run react-native link

CocoaPods

Add the following to your podfile

pod 'react-native-intercom', :path => '../node_modules/react-native-intercom'

Manual

Follow how to manually link a library here https://facebook.github.io/react-native/docs/linking-libraries-ios.html#content

Android

Run npm install react-native-intercom

Necessary Code Bits

iOS and Android each have their own special API keys. Get them in the intercom app settings, under "installation" in the left hand menu. Details here. They provide the snippets mentioned below to be easily pasted into your app.

IOS

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-api-key-goes-here" forAppId:@"app-id-goes-here"];
}

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];
}

Android

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, "android-api-key-goes-here", "app-id-goes-here");
    // ...
  }

  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

Methods

logEvent(eventName, metadata);

Log an event with intercom.

Intercom.logEvent('event_name', { any: 'metadata', you: 'want' });

registerIdentifiedUser({ userId })

Register a user with userId

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

registerUnidentifiedUser()

For when a userId is not available or relevant

Intercom.registerUnidentifiedUser();

setLauncherVisibility('VISIBLE' | 'HIDDEN');

Show/hide the launcher button (hidden by default).

// show
Intercom.setLauncherVisibility('VISIBLE');
// hide
Intercom.setLauncherVisibility('HIDDEN');

setBottomPadding(dpi)

Set the bottom padding for the launcher button

Intercom.setBottomPadding(64);

updateUser(userAttributes)

Updates a registered user.

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,
  },
});

setUserHash(hash)

Set User Hash for Identity Validation (optional)

Intercom.setUserHash(hash_received_from_backend);

reset()

Log user out

Intercom.reset();

displayMessenger()

Show messenger overlay

Intercom.displayMessenger();

displayMessageComposer()

Same as displayMessenger

Intercom.displayMessageComposer();

displayMessageComposerWithInitialMessage(message)

Show Message Composer with an Initial Message

Intercom.displayMessageComposerWithInitialMessage('Initial message');

hideMessenger()

Hide messenger overlay (works with any of the 3 above)

Intercom.hideMessenger();

displayHelpCenter()

Show Help Center

Intercom.displayHelpCenter();

displayConversationsList()

Show Conversation List

Intercom.displayConversationsList();

setInAppMessageVisibility('GONE' | 'VISIBLE')

If set to 'GONE', hides in app messages

// hide in app messages
Intercom.setInAppMessageVisibility('GONE');
// show in app messages
Intercom.setInAppMessageVisibility('VISIBLE');

getUnreadConversationCount()

Get Unread Message Count

Intercom.getUnreadConversationCount((err, count) => {
  console.log(`${count} conversations waiting`);
});

addEventListener(Intercom.Notifications.UNREAD_COUNT)

Listen for Unread Conversation Notifications. Example:

componentDidMount() {
	Intercom.addEventListener(Intercom.Notifications.UNREAD_COUNT, this._onUnreadChange)
}

componentWillUnmount() {
	Intercom.removeEventListener(Intercom.Notifications.UNREAD_COUNT, this._onUnreadChange);
}

_onUnreadChange = ({ count }) => {
	//...
}

removeEventListener(Intercom.Notifications.UNREAD_COUNT)

Removes event listener

sendTokenToIntercom(token)

Send FCM token directly to Intercom. Does nothing in iOS (that's handled with the setDeviceToken native code in the iOS instructions). Example:

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

setupAPN(deviceToken)

Set up iOS push notifications, passing in the device token.

Intercom.setupAPN('my-unique-device-token');

registerForPush()

Register device for push notifications

Set up iOS push notifications, passing in the device token.

Intercom.registerForPush();

About

React Native wrapper for Intercom.io

License:MIT License


Languages

Language:Java 41.0%Language:Objective-C 36.4%Language:JavaScript 21.0%Language:Ruby 1.6%