Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

How to configure for Android #268

Closed
klamping opened this issue Feb 13, 2019 · 11 comments
Closed

How to configure for Android #268

klamping opened this issue Feb 13, 2019 · 11 comments

Comments

@klamping
Copy link

I'd like to configure this to run in Android. Please advise how I'd go about doing this.

@browniefed
Copy link
Contributor

@klamping
Copy link
Author

Okay but what specifically are the steps.

image

@browniefed
Copy link
Contributor

react-native-intercom

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...
      
      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...
      
          );
        }
      }
    2. 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>
    3. In android/build.gradle add maven { url "https://maven.google.com" } (h/t):

      allprojects {
        repositories {
      
          //...other configuration here...
      
          maven { url "https://maven.google.com" }
        }
      }
    4. 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.+'
      }

      If "Firebase Cloud Messaging(FCM)", then:

      dependencies {
      
        //...other configuration here...
      
        compile 'io.intercom.android:intercom-sdk-fcm:5.+'
        compile 'com.google.firebase:firebase-messaging:11.+'
      }

      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.+'
      }
  7. 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' }) (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

import Intercom from 'react-native-intercom';

or

var Intercom = 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 attributes
    email: '[email protected]',
    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');

Set Bottom Padding

Intercom.setBottomPadding(64);

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 hidden
    Intercom.Notifications.WINDOW_DID_HIDE

    // The window was shown
    Intercom.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);
});

@klamping
Copy link
Author

Thanks. Another question. I'd like to Send an FCM token directly to Intercom for push notifications. Any ideas?

@browniefed
Copy link
Contributor

Nope

@klamping
Copy link
Author

gee, thanks for nothing then.

@cbrwizard
Copy link

cbrwizard commented Feb 18, 2019

Wow that's toxic "help"

@klamping
Copy link
Author

@cbrwizard this is a joke in case you missed it: https://twitter.com/klamping/status/1095776458520383489

@klamping
Copy link
Author

@browniefed feel free to delete this issue

@browniefed
Copy link
Contributor

Ha, I'll leave it. The giant troll face above is pretty good indicator we were joking.

@Subway19
Copy link

@browniefed After following all the steps, I am getting following error :

Intercom: Api call failed: {"type":"error.list","request_id":"000inqj90bj3mpbrov80","errors":[{"code":"not_found","message":"User Not Found"}]}

any help?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants