@haptik/react-native
v0.0.1
Published
React native wrapper around native SDKs
Keywords
Readme
HaptikRN
Installation
The react native integration for the SDKs is available as npm package.
Start by installing and linking the module using npm
npm install @haptik/react-native --save
npx react-native linkiOS
Install the pods that come with the integration by running
pod installcd ios pod installAdd
use_frameworks!to thePodfileinside theiosdirectory. Ensure that you disable Flipper.platform :ios, '9.0' use_frameworks! ... # add_flipper_pods! # post_install do |installer| # flipper_post_install(installer) # endDisable Flipper initialization by commenting out the following lines in
ios/AppName/AppDelegate.m#import <React/RCTBridge.h> #import <React/RCTBundleURLProvider.h> #import <React/RCTRootView.h> //#if DEBUG //#import <FlipperKit/FlipperClient.h> //#import <FlipperKitLayoutPlugin/FlipperKitLayoutPlugin.h> //#import <FlipperKitUserDefaultsPlugin/FKUserDefaultsPlugin.h> //#import <FlipperKitNetworkPlugin/FlipperKitNetworkPlugin.h> //#import <SKIOSNetworkPlugin/SKIOSNetworkAdapter.h> //#import <FlipperKitReactPlugin/FlipperKitReactPlugin.h> // //static void InitializeFlipper(UIApplication *application) { // FlipperClient *client = [FlipperClient sharedClient]; // SKDescriptorMapper *layoutDescriptorMapper = [[SKDescriptorMapper alloc] initWithDefaults]; // [client addPlugin:[[FlipperKitLayoutPlugin alloc] initWithRootNode:application withDescriptorMapper:layoutDescriptorMapper]]; // [client addPlugin:[[FKUserDefaultsPlugin alloc] initWithSuiteName:nil]]; // [client addPlugin:[FlipperKitReactPlugin new]]; // [client addPlugin:[[FlipperKitNetworkPlugin alloc] initWithNetworkAdapter:[SKIOSNetworkAdapter new]]]; // [client start]; //} //#endif @implementation AppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { //#if DEBUG // InitializeFlipper(application); //#endifAdd the following authentication information to the
Info.plistfile inside theios/AppNamedirectory<key>HaptikLib</key> <dict> <key>clientID</key> <string>CLIENT_ID_HERE</string> <key>baseUrl</key> <string>BASE_URL_HERE</string> <key>runEnvironment</key> <string>1</string> </dict>You can contact Haptik for the CLIENT_ID, and BASE_URL
iOS should be good to go.
Android
Add
tools:replacesupport by adding it to yourAndroidManifest.xmlheader located inandroid/app/src/main/<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.haptikrnintegration" xmlns:tools="http://schemas.android.com/tools">Add the following values to the application
AndroidManifest.xmllocated inandroid/app/src/main/<meta-data android:name="ai.haptik.android.sdk.ClientId" android:resource="@string/haptik_sdk_client_id" /> <!-- Geo API key needs to be put only if you require to enable maps in the SDK --> <meta-data android:name="com.google.android.geo.API_KEY" android:value="YOUR GEO API KEY HERE" tools:replace="android:value" /> <!-- Pass the Geo API key here, if you do not have one, pass empty string --> <meta-data android:name="ai.haptik.places.sdk.api.key" android:value="YOUR PLACES SDK API KEY HERE" tools:replace="android:value" /> <activity android:name="ai.haptik.android.sdk.messaging.ChatActivity" android:parentActivityName=".MainActivity"> <meta-data android:name="ai.haptik.android.sdk.messaging.backAsUp" android:value="true" /> </activity>Add the clientId key to the
strings.xmlfile located inandroid/app/src/main/res/values<string name="haptik_sdk_client_id">CLIENT_ID</string>You can request the client id from Haptik
Add maven repository for the android sdk in
build.gradlelocated inandroid/appallprojects { repositories { mavenLocal() ... maven { url "https://artifactory.hellohaptik.com/artifactory/libs-release-local" credentials { username "ARTIFACTORY_USERNAME" password "ARTIFACTORY_PASSWORD" } } } }Please request Haptik to provide
ARTIFACTORY_USERNAME&ARTIFACTORY_PASSWORDEnable
MultiDexsupport on your react-native android application by following this guide https://medium.com/@aungmt/multidex-on-androidx-for-rn-0-60-x-cbb37c50d85Android should be good to go.
Usage
Basic Example
import React from 'react';
import { View, Text, TouchableOpacity } from 'react-native';
import HaptikRN from '@haptik/react-native';
const VIA_NAME = 'testdemochannel';
const BRAND_COLOR = '#1350A0';
const App = () => {
const [unreadCount, setUnreadCount] = React.useState('N/A');
const themeChat = () => {
return HaptikRN.setTheme({
brandColor: BRAND_COLOR,
businessChatBackground: '#F5F5F5',
businessChatText: '#000000',
messageTimeStamp: '#000000',
});
};
const openChat = async () => {
const isSignedUp = await HaptikRN.isSignedUp();
if (isSignedUp) {
HaptikRN.open(VIA_NAME).catch(console.error);
} else {
HaptikRN.signup({
authType: 'test',
authID: 'test',
authToken: 'test',
})
.then(themeChat)
.then(() => HaptikRN.open(VIA_NAME, 'Hi'))
.catch(console.error);
}
};
React.useEffect(() => {
themeChat().catch(console.error);
}, []);
return (
<View style={styles.body}>
<TouchableOpacity onPress={openChat}>
<View>
<Text> Open Chat </Text>
</View>
</TouchableOpacity>
</View>
);
};Request Haptik for the
authTypeandVIA_NAMEfor your IVA
Available Methods
signup(options)
Signup bridge method. When no authType is provided, it defaults to guest signup (basic)
@param {Object} options auth options
@param {String} options.authType authentication type
@param {String} options.authCode authentication token
@param {String} options.authId authentication id
@returns {Promise} Resolves upon completionrenewSignupToken({token, authType, authId})
Renew signup token bridge method @param {Object} options auth options @param {String} options.authType authentication type @param {String} options.authCode authentication token @param {String} options.authId authentication id
@returns {Promise} Resolves upon completion
Sets the user data for a signed up user. All data passed in the userData object is forwarded to the native SDK client.
setUserData(userData)
@param {Object} userData arbitrary dict of key, value pairs
@returns {Promise} Resolves upon completionisSignedUp()
Checks whether the user has already signed up or not.
@returns {Promise} Resolves with the boolean value upon completionopen(viaName, launchMessage, hideLaunchMessage)
Opens the chat window with a particular business via name
@param {String} viaName The business via name (ex. reminderschannel)
@param {String} launchMessage An optional message to launch the channel with
@param {String} hideLaunchMessage Whether to hide the launch message or not
@returns {Promise} Resolves upon completionsendMessage(message)
Sends a message to the sdk from the user's side programmatically.
@note: NOT SUPPORTED ON IOS
@param {String} message the message to be sent
@returns {Promise} Resolves upon completiongetUnreadCount(viaName)
Fetched the unread count for a given business via name.
@param {String} viaName The business via name (ex. reminderschannel)
@returns {Promise} Resolves with the unread count value upon completionsetTheme(theme = {})
Sets the theme for the sdk. Useful for setting brand colors and fonts.
=== All colors must be in 6 digit hex code strings (ex. #FFFFFF) ===
@param {Object} theme the theme object that contains all the theme configurations
@param {String} theme.brandColor The client's main primary brand color
@param {String} theme.businessChatBackground The background color for the chat
@param {String} theme.businessChatText The color for the chat text
@param {String} theme.messageTimeStamp The color for the message timestamps
@param {String} theme.lightFont The font string for light weights
@param {String} theme.regularFont The font string for regular weights
@param {String} theme.mediumFont The font string for medium weights
@param {String} theme.boldFont The font string for bold weights
@param {String} theme.italicFont The font string for italic weights
@returns {Promise} Resolves once the theme is successfully setsetDeviceToken(token)
Sets the device token for supporting notifications.
@param {String} token the string representation of the device token to be set.
@returns {Promise} Resolves once the token is set.isHaptikNofication(notification)
Checks whether a particular notification was sent by Haptik or not.
@param {Object} notification the notification object to be checked
@returns {Promise} Resolves with the boolean value upon completion