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 🙏

© 2025 – Pkg Stats / Ryan Hefner

@jiomeet/core_sdk_plugin

v1.1.0

Published

Core SDK React Native Plugin for Android

Downloads

32

Readme

React Native JioMeet Core Template SDK Plugin

Table of Contents -

  1. Introduction
  2. Features
  3. Prerequisites
  4. Setup
  5. Usage
  6. Example

Introduction

In this documentation, we'll guide you through the process of installation, enabling you to enhance your React Native app with React Native core sdk plugin swiftly and efficiently. Let's get started on your journey to creating seamless communication experiences with React Native plugin!


Features

In this Plugin , you'll find a range of powerful features designed to enhance your application's communication and collaboration capabilities. These features include:

  1. Voice and Video Calling:Enjoy high-quality, real-time audio and video calls with your contacts.

  2. Participant Panel: Manage and monitor participants in real-time meetings or video calls for a seamless user experience.

  3. Screen Sharing and Whiteboard Sharing: Empower collaboration by sharing your screen or using a virtual whiteboard during meetings or video conferences.

  4. Group Conversation: Easily engage in text-based conversations with multiple participants in one chat group.

  5. Inspect Call Health: Monitor the quality and performance of your audio and video calls to ensure a seamless communication experience.

Prerequisites

Before you begin, ensure you have met the following requirements:

Install the package:

Using npm:

npm install @jiomeet/core_sdk_plugin

Using Yarn:

yarn add @jiomeet/core_sdk_plugin

Automatic Linking (if necessary)

If you're using a React Native version that doesn't automatically link native modules and assets (React Native 0.59 and later usually do this automatically), you might need to perform these additional steps:

For Android

  1. Open a terminal and navigate to your project's root directory.

  2. Run the following command to link the @jiomeet/core_sdk_plugin library:

   npx react-native link @jiomeet/core_sdk_plugin

Android Manifest changes

To ensure proper functionality and compatibility of your Android application, please add the following parameters to your AndroidManifest.xml file.

  1. Open AndroidManifest.xml:
  • Navigate to the android/app/src/main directory of your project.
  • Open the AndroidManifest.xml file.
  1. Add the Following Attributes to manifest and <application> Tags:

    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        <!-- Other attributes -->
        xmlns:tools="http://schemas.android.com/tools">
    <application
        <!-- Other attributes -->
        android:supportsRtl="true"
        android:usesCleartextTraffic="true"
        android:requestLegacyExternalStorage="true"
        tools:replace="android:name">
        <!-- Other attributes and activities -->
    </application>
    

Adding credentials.properties File in the android Folder

  1. To securely add your GitHub credentials, follow these steps to create a credentials.properties file in your project's root directory, the directory containing the package.json file. and update the build configuration accordingly.

  2. Open the credentials.properties file and add your GitHub credentials:

    github_username=your-github-username
    github_password=your-github-token-or-password

For iOS

Require Configurations

Before getting started with this example app, please ensure you have the following software installed on your machine:

  • Xcode 14.2 or later.
  • Swift 5.0 or later.
  • An iOS device or emulator running iOS 13.0 or later.

Info.plist Changes

Please add below permissions keys to your Info.plist file with proper description.

<key>NSCameraUsageDescription</key>
<string>Allow access to camera for meetings</string>
<key>NSMicrophoneUsageDescription</key>
<string>Allow access to mic for meetings</string>

Enable Background Mode

Please enable Background Modes in your project Signing & Capibilities tab. After enabling please check box with option Audio, Airplay, and Pictures in Pictures. If you don't enables this setting, your mic will be muted when your app goes to background.

Screen Share Integration

Add Broadcast Upload Extension

You need to create a Broadcast Upload Extension to enable the screen sharing process. To do that,

open your example project, go to Xcode -> File -> Target... ->

create_broadcast_upload_extension

Select Broadcast Upload Extension and click on Next

select_broadcast_upload_extension

Fill the Product name and other info, uncheck Include UI Extension, and click Finish.

broadcast_upload_extension_info

Activate the Extension

activate_broadcast_upload_extension

Xcode automatically creates the Extension folder, which contains the SampleHandler.swift file.

NOTE: Please set deployment target for Broadcast Upload Extension same as of your main app.

Add JioMeet Screen Share SDK

Go to your Podfile. Add JioMeetScreenShareSDK_iOS pod for your newly created broadcast upload extension and run pod install --repo-update --verbose command to install the SDK.

target 'ScreenShareExtension' do
    use_frameworks!
    pod 'JioMeetScreenShareSDK_iOS', '4.0.7-temp.1'
end

NOTE: ScreenShareExtension is name of target you fill while creating Broadcast Upload Extension

Enable App Groups

You need to enable app groups for your main app and screenshare extension. Please follow guide from below link. https://developer.apple.com/documentation/xcode/configuring-app-groups

https://www.appcoda.com/app-group-macos-ios-communication/

Edit SampleHandler file.

Go to your SampleHandler.swift file. Replace the whole file content with content below.

NOTE: Please change YOUR_APP_GROUP_NAME_IDENTIFIER with app group you created in above step.

import ReplayKit
import JioMeetScreenShareSDK

class SampleHandler: JMScreenShareHandler {

    override func getAppGroupsIdentifier() -> String {
        return "YOUR_APP_GROUP_NAME_IDENTIFIER"
    }
}

Setup

Register on JioMeet Platform:

You need to first register on Jiomeet platform.Click here to sign up

Get your application keys:

Create a new app. Please follow the steps provided in the Documentation guide to create apps before you proceed.

Get you Jiomeet meeting id and pin

Use the create meeting api to get your room id and password

Usage: Launch Core Template Screen

import { launchMeetingCoreTemplateUI } from '@jiomeet/core_sdk_plugin';
// ...
         // ...
        const meetingConfig = {
            meetingId: meetingId,
            meetingPin: password,
            displayName: name,
            hostToken: '',
            initialAudio: false, // Set the initial audio state
            initialVideo: false, // Set the initial video state
            colorConfig: colorConfig, // Passing color configuration
            screenShareConfig: screenShareConfig, // Passing screen share configuration to support screen share in iOS (Only required for iOS)
            isChatCallbackEnabled: true, // Example callback enabled flag
            isParticipantCallbackEnabled: false, // Example callback enabled flag
          };

          launchMeetingCoreTemplateUI(meetingConfig);

To join a meeting, enter meeting details in the function and directly call the function as mentioned above

Receive a callback from SDK

import { DeviceEventEmitter } from 'react-native';

// ...

useEffect(() => {
    if (Platform.OS === 'ios') {
      CoreSDKManager.addListener('call_ended', (message) => {
        console.log('Received message from Swift:', message);
        setCallStatus(message);
        // Handle the message as needed
      });
      CoreSDKManager.addListener('chat_option_clicked', (message) => {
        console.log('Received message from Swift:', message);
        setCallStatus(message);
        // Handle the message as needed
      });
    } else {
      DeviceEventEmitter.addListener('call_ended', (message) => {
        console.log('Received message from Kotlin:', message);
        setCallStatus(message);
        // Handle the message as needed
      });

      DeviceEventEmitter.addListener('chat_option_clicked', (message) => {
        console.log('Received message from Kotlin:', message);
        // setCallStatus(message);
        // Handle the message as needed
      });
}, []);

The above callback will be triggered when the Call is ended, you can handle this callback as per your need

Example

import * as React from 'react';

import {
  StyleSheet,
  Button,
  SafeAreaView,
  StatusBar,
  TextInput,
  useColorScheme,
  Text,
  DeviceEventEmitter,
  Platform,
} from 'react-native';
import { launchMeetingCoreTemplateUI } from '@jiomeet/core_sdk_plugin';
import { Colors } from 'react-native/Libraries/NewAppScreen';
import { useEffect, useState } from 'react';
import CoreSDKManager from '@jiomeet/core_sdk_plugin';

export default function App() {
  const isDarkMode = useColorScheme() === 'dark';
  const [meetingId, setMeetingId] = useState('');
  const [password, setPassword] = useState('');
  const [name, setName] = useState('');
  const [callStatus, setCallStatus] = useState('Not Started');

  const backgroundStyle = StyleSheet.create({
    container: {
      backgroundColor: isDarkMode ? Colors.darker : Colors.lighter,
      justifyContent: 'center',
      alignItems: 'center',
      flex: 1,
    },
  });

  useEffect(() => {
    if (Platform.OS === 'ios') {
      CoreSDKManager.addListener('call_ended', (message) => {
        console.log('Received message from Swift:', message);
        setCallStatus(message);
        // Handle the message as needed
      });
      CoreSDKManager.addListener('chat_option_clicked', (message) => {
        console.log('Received message from Swift:', message);
        setCallStatus(message);
        // Handle the message as needed
      });
    } else {
      DeviceEventEmitter.addListener('call_ended', (message) => {
        console.log('Received message from Kotlin:', message);
        setCallStatus(message);
        // Handle the message as needed
      });

      DeviceEventEmitter.addListener('chat_option_clicked', (message) => {
        console.log('Received message from Kotlin:', message);
        // setCallStatus(message);
        // Handle the message as needed
      });
    }


    return () => {
      CoreSDKManager.removeAllListeners('call_ended');
      CoreSDKManager.removeAllListeners('chat_option_clicked');

      DeviceEventEmitter.removeAllListeners('call_ended');
      DeviceEventEmitter.removeAllListeners('chat_option_clicked');
    };
  }, []);

  const colorConfig = {
    primary: '#0062FF', // Primary color
    primaryDark50: '#0041CC', // Primary Dark 50
    primary70: '#338BFF', // Primary 70
  };
  
  const screenShareConfig = {
    appGroupName: 'YOUR_APP_GROUP_NAME_IDENTIFIER', // App group name
    screenShareExtensionBundleIdentifier: 'BROADCAST_UPLOAD_EXTENSION_IDENTIFIER', // Screen share extension bundle identifier
  }

  return (
    <SafeAreaView style={backgroundStyle.container}>
      <StatusBar
        barStyle={isDarkMode ? 'light-content' : 'dark-content'}
        backgroundColor={backgroundStyle.container.backgroundColor}
      />
      <TextInput
        value={meetingId}
        onChange={() => setCallStatus('Not Started')}
        style={styles.textInput}
        placeholder={'Meeting ID'}
        onChangeText={setMeetingId}
        inputMode={'numeric'}
      />
      <TextInput
        value={password}
        onChange={() => setCallStatus('Not Started')}
        style={styles.textInput}
        placeholder={'Password'}
        onChangeText={setPassword}
      />
      <TextInput
        value={name}
        onChange={() => setCallStatus('Not Started')}
        style={styles.textInput}
        placeholder={'Name Visible'}
        onChangeText={setName}
      />
      <Button
        disabled={
          name.length < 3 || meetingId.length < 9 || password.length < 5
        }
        title={'Join Call'}
        onPress={() => {
          const meetingConfig = {
            meetingId: meetingId,
            meetingPin: password,
            displayName: name,
            hostToken: '',
            initialAudio: false, // Set the initial audio state
            initialVideo: false, // Set the initial video state
            colorConfig: colorConfig, // Passing color configuration
            screenShareConfig: screenShareConfig, // Passing screen share configuration. Pass this configuration only if we need screenshare support
            isChatCallbackEnabled: true, // Example callback enabled flag
            isParticipantCallbackEnabled: false, // Example callback enabled flag
          };

          launchMeetingCoreTemplateUI(meetingConfig);
        }}
      />
      {/* eslint-disable-next-line react-native/no-inline-styles */}
      <Text style={{ margin: 16 }}>Call status: {callStatus}</Text>
    </SafeAreaView>
  );
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    alignItems: 'center',
    justifyContent: 'center',
  },
  box: {
    width: 60,
    height: 60,
    marginVertical: 20,
  },
  textInput: {
    padding: 16,
    margin: 16,
    backgroundColor: '#FCE6E7',
    borderRadius: 8,
    alignSelf: 'stretch',
    color: 'black',
  },
});

Troubleshooting

  • Facing any issues while integrating or installing the JioMeet Template UI Kit please connect with us via real time support present in [email protected] or https://jiomeetpro.jio.com/contact-us