npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@haptik/react-native

v0.0.1

Published

React native wrapper around native SDKs

Downloads

4

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 the Podfile inside the ios 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 the ios/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 your AndroidManifest.xml header located in android/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 in android/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 in android/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 in android/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-cbb37c50d85

  • Android 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 and VIA_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