@haptik/react-native
v0.0.1
Published
React native wrapper around native SDKs
Downloads
12
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 link
iOS
Install the pods that come with the integration by running
pod install
cd ios pod install
Add
use_frameworks!
to thePodfile
inside theios
directory. Ensure that you disable Flipper.platform :ios, '9.0' use_frameworks! ... # add_flipper_pods! # post_install do |installer| # flipper_post_install(installer) # end
Disable 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); //#endif
Add the following authentication information to the
Info.plist
file inside theios/AppName
directory<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:replace
support by adding it to yourAndroidManifest.xml
header 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.xml
located 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.xml
file 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.gradle
located inandroid/app
allprojects { 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_PASSWORD
Enable
MultiDex
support 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
authType
andVIA_NAME
for 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 completion
renewSignupToken({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 completion
isSignedUp()
Checks whether the user has already signed up or not.
@returns {Promise} Resolves with the boolean value upon completion
open(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 completion
sendMessage(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 completion
getUnreadCount(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 completion
setTheme(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 set
setDeviceToken(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