UNPKG

react-native-freshchat-sdk-latest

Version:

A React Native module that allows you to use the native Freshchat SDK

390 lines (270 loc) 12.2 kB
# README.md ## Integration Steps 1. `yarn add react-native-freshchat-sdk-latest` OR `npm install react-native-freshchat-sdk-latest --save` 2. Run `react-native link` on you project root directory ### iOS setup steps 1. Navigate inside `ios` folder in your project 2. Add an entry for FreshchatSDK as shown below in `Podfile` ``` target 'ProjectName' do pod 'FreshchatSDK', :path=> '../node_modules/react-native-freshchat-sdk-latest/ios/FreshchatSDK.podspec' end ``` 3. Run `pod install` from ios directory Follow how to manually link a library here [https://facebook.github.io/react-native/docs/linking-libraries-ios.html#content](https://facebook.github.io/react-native/docs/linking-libraries-ios.html#content) ### Android setup steps Add `maven { url "https://jitpack.io” }` to you project level build.gradle as below allprojects { repositories { ..... maven { url "https://jitpack.io" } } } ## Usage ### Import module import { Freshchat, FreshchatConfig, FaqOptions, ConversationOptions, FreshchatUser, FreshchatMessage, FreshchatNotificationConfig } from 'react-native-freshchat-sdk-latest'; ### Initialise SDK var freshchatConfig = new FreshchatConfig('YOUR_APP_ID', 'YOUR_APP_KEY'); Freshchat.init(freshchatConfig); ### Show FAQs Freshchat.showFAQs(); ### Filter and Show FAQs with tags var faqOptions = new FaqOptions(); faqOptions.tags = ["premium"]; faqOptions.filteredViewTitle = "Tags"; faqOptions.filterType = FaqOptions.FilterType.ARTICLE; Freshchat.showFAQs(faqOptions); ### Show Conversations Freshchat.showConversations(); ### Filter and Show Conversations with tags var conversationOptions = new ConversationOptions(); conversationOptions.tags = ["premium"]; conversationOptions.filteredViewTitle = "Premium Support"; Freshchat.showConversations(conversationOptions); ### Reset User Freshchat.resetUser(); ### Get Unread Message Count Freshchat.getUnreadCountAsync((data) => { console.log(data); }); ### Listen to changes to unread message count Freshchat.addEventListener( Freshchat.EVENT_UNREAD_MESSAGE_COUNT_CHANGED, () => { console.log("onUnreadMessageCountChanged triggered"); Freshchat.getUnreadCountAsync((data) => { var count = data.count; var status = data.status; if (status) { console.log("Message count: " + count); } else { console.log("getUnreadCountAsync unsuccessful"); } }); } ); ### To stop listening from changes to unread count Freshchat.removeEventListeners(Freshchat.EVENT_UNREAD_MESSAGE_COUNT_CHANGED); ### Get User Freshchat.getUser((user) => { console.log(user); }) ### Set User var freshchatUser = new FreshchatUser(); freshchatUser.firstName = "John"; freshchatUser.lastName = "Doe"; freshchatUser.email = "johndoe@dead.man"; freshchatUser.phoneCountryCode = "+91"; freshchatUser.phone = "1234234123"; Freshchat.setUser(freshchatUser, (error) => { console.log(error); }); ### Set User Properties var userPropertiesJson = { "user_type": "Paid", "plan": "Gold" } Freshchat.setUserProperties(userPropertiesJson, (error) => { console.log(error); }); ### Get SDK version code Freshchat.getSDKVersionCode((data) => { console.log(data); }); ### Send Message On Behalf of the User var freshchatMessage = new FreshchatMessage(); freshchatMessage.tag = "video"; freshchatMessage.message = "text send message"; Freshchat.sendMessage(freshchatMessage); ### Dismiss Freshchat Views (iOS Only) Freshchat.dismissFreshchatViews(); ### Identify and Restore User Freshchat.identifyUser("EXTERNAL_ID", "RESTORE_ID", (error) => { console.log(error); }); ### Listen to restore id generated Freshchat.addEventListener( Freshchat.EVENT_USER_RESTORE_ID_GENERATED, () => { console.log("onRestoreIdUpdated triggered"); Freshchat.getUser((user) => { var restoreId = user.restoreId; var externalId = user.externalId; console.log("externalId: " + externalId); console.log("restoreId: " + restoreId); }) } ); ### To stop listening from restore id generated event Freshchat.removeEventListeners(Freshchat.EVENT_USER_RESTORE_ID_GENERATED); ### Set Notification Config var freshchatNotificationConfig = new FreshchatNotificationConfig(); freshchatNotificationConfig.priority = FreshchatNotificationConfig.NotificationPriority.PRIORITY_HIGH; freshchatNotificationConfig.notificationSoundEnabled = false; Freshchat.setNotificationConfig(freshchatNotificationConfig); ### Save device token of the user in Freshchat server Freshchat.setPushRegistrationToken(token); ### Handle Freshchat notification when user receives it Freshchat.isFreshchatNotification(notification, (freshchatNotification) => { if (freshchatNotification) { Freshchat.handlePushNotification(notification); } else { // handle your app notification } }) In iOS, Application state should be sent as part of notification payload to effectively handle notification `isActive` field should be `true` if Application state is active, `false` otherwise. ##### Example Snippet to add `isActive` parameter: NSMutableDictionary *mutableDict = [response.notification.request.content.userInfo mutableCopy]; BOOL isActive = [UIApplication sharedApplication].applicationState == UIApplicationStateActive; [mutableDict setObject:@(isActive) forKey:@"isActive"]; Note: If this parameter is not set, Conversations screen will not open when app is inactive or in background. Instead In-App notification will be shown. ### Transform PushNotificationIOS Payload To Native Payload const notificationPayload = Freshchat.transformPushNotificationIOSPayloadToNativePayload(notification); If you want to handle push notifications in Native layer. You can follow the below steps ### iOS #### Add Import import "FreshchatSDK.h" #### Save device token of the user in Freshchat server [[FreshchatSDK sharedInstance]setPushRegistrationToken:deviceToken]; #### Handle Freshchat notification when user receives it if ([[FreshchatSDK sharedInstance]isFreshchatNotification:userInfo]) { [[FreshchatSDK sharedInstance]handlePushNotification:userInfo]; } else { // handle your app notification } ### Android #### Save device token of the user in Freshchat server Freshchat.getInstance(context).setPushRegistrationToken(token); #### Handle Freshchat notification when user receives it if (Freshchat.isFreshchatNotification(message)) { Freshchat.getInstance(getApplicationContext()).handleFcmMessage(message); } else { // handle your app notification } ### Listen to User Interactions 1. Add event listener for Freshchat.EVENT_USER_INTERACTED event. When user interacts with app, this event will be triggered. Freshchat.addEventListener( Freshchat.EVENT_USER_INTERACTED, userInteractionHandler ); 2. iOS Specific configuration - In AppDelegate.h, Use `RNFreshchatWindow` instead of `UIWindow`, which extends `UIWindow` ``` #import "RNFreshchatSdk.h" @property (nonatomic, strong) RNFreshchatWindow *window; ``` - In AppDelegate.m, - Use `RNFreshchatWindow` instead of `UIWindow` - Override `applicationDidEnterBackground` and trigger `FRESHCHAT_USER_INTERACTED` event as below ``` - (void)applicationDidEnterBackground:(UIApplication *)application { [[NSNotificationCenter defaultCenter] postNotificationName:FRESHCHAT_USER_INTERACTED object:self]; } ``` 3. To remove event listener, use the below code Freshchat.removeEventListeners(Freshchat.EVENT_USER_INTERACTED); ## JWT integration documentation 1. To create user with reference_id and to restore existing user, call `restoreUserWithIdToken` with JWT token. 2. To update user properties, create user without reference_id or to update JWT token, call `setUserWithIdToken` with JWT token. 3. `getUserIdTokenStatus` return current status of the JWT token 4. `getFreshchatUserId` generate and return user alias 5. Use `Freshchat.FRESHCHAT_EVENTS` event to listen to user interactions like SCREEN_TRANSITIONS and NEW_MESSAGE. JWT Token will be in any one of the below 5 states - TOKEN_NOT_SET : Token not set in SDK - TOKEN_NOT_PROCESSED : Token set in SDK and is being processed - TOKEN_VALID : Token set and is valid - TOKEN_INVALID : Token set and is invalid - TOKEN_EXPIRED : Token set and is expired ## API ### Restore user with Id Token Freshchat.restoreUserWithIdToken(jwt); ### Set user user with Id Token Freshchat.setUserWithIdToken(jwt); ### Get ID Token Status Freshchat.getUserIdTokenStatus((data) => { var status = data.user_id_token_status; console.log('FRESHCHAT_EVENTS: state - ', status); }); ### Get Alias Freshchat.getFreshchatUserId((alias) => { console.log('Alias - ', alias); }); ## Event ### User Actions Adding Listener Freshchat.addEventListener( Freshchat.FRESHCHAT_EVENTS, userActionsEventHandler ); Handling when event triggered const userActionsEventHandler = (actionData) => { console.log("FRESHCHAT_EVENTS triggered"); var action = actionData.user_action; Freshchat.getUserIdTokenStatus((data) => { var status = data.user_id_token_status; console.log('FRESHCHAT_EVENTS: action - ', action); console.log('FRESHCHAT_EVENTS: state - ', status); }); }; ### Overriding External Links Adding listener Freshchat.addEventListener( Freshchat.EVENT_EXTERNAL_LINK_CLICKED, openLinkHandler ); Handling when event triggered const openLinkHandler = (data) => { console.log("link - ", data.url); }; ### Override Notification Click Listener Freshchat.addEventListener( Freshchat.FRESHCHAT_NOTIFICATION_CLICKED, (data) => { // if (canOpenSdkScreenDirectly) { Freshchat.openFreshchatDeeplink(data.url); // } else { // save deeplink and open Freshchat screen when required // } } ); When app is in killed state and SDK screen is opened directly due to notifications, `activityToLaunchOnFinish` will be launched when user clicks back button from SDK screen. Set `overrideNotificationClickListener` to `true` when you want to override notification click event in Android. Configure FreshchatNotificationConfig as follows. var freshchatNotificationConfig = new FreshchatNotificationConfig(); freshchatNotificationConfig.priority = FreshchatNotificationConfig.NotificationPriority.PRIORITY_HIGH; freshchatNotificationConfig.notificationSoundEnabled = false; freshchatNotificationConfig.activityToLaunchOnFinish = "com.demoapp.MainActivity"; freshchatNotificationConfig.overrideNotificationClickListener = true; Freshchat.setNotificationConfig(freshchatNotificationConfig); ## For More References More instructions here: [Freshchat for Android](https://support.freshchat.com/support/solutions/articles/229319) More instructions here: [Freshchat for iOS](https://support.freshchat.com/support/solutions/articles/232945)