> ## Documentation Index
> Fetch the complete documentation index at: https://cometchat-22654f5b-feature-card-builder.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Setup

> Setup — CometChat documentation.

## Get your Application Keys

[Signup for CometChat](https://app.cometchat.com) and then:

1. Create a new app
2. Head over to the **API & Auth Keys** section and note the **Auth Key**, **App ID** & **Region**

## Add the CometChatCalls Dependency

Install the package as NPM module:

<Tabs>
  <Tab title="npm">
    ```bash theme={null}
    npm install @cometchat-pro/react-native-calls@latest --save
    ```
  </Tab>

  <Tab title="yarn">
    ```bash theme={null}
    yarn add @cometchat-pro/react-native-calls@latest
    ```
  </Tab>
</Tabs>

Then, import the `CometChatCalls` class wherever you want to use `CometChatCalls`.

<Tabs>
  <Tab title="JavaScript">
    ```javascript theme={null}
    import { CometChatCalls } from "@cometchat-pro/react-native-calls";
    ```
  </Tab>

  <Tab title="TypeScript">
    ```typescript theme={null}
    import { CometChatCalls } from "@cometchat-pro/react-native-calls";
    ```
  </Tab>
</Tabs>

## Calling Component Configuration

For `@cometchat-pro/react-native-calls` version starting **3.0.0**, please make sure you add the following additional dependencies & permissions.

<Tabs>
  <Tab title="JSON">
    ```json theme={null}
    {
      "@cometchat-pro/react-native-chat": "^3.0.13",
      "@react-native-async-storage/async-storage": "^1.17.5",
      "@react-native-community/netinfo": "7.1.7", // for react-native 0.63 & above.
      "@react-native-community/netinfo": "6.1.0", // for react-native below 0.63
      "react-native-background-timer": "2.4.1",
      "react-native-callstats": "3.73.7",
      "react-native-webrtc": "^1.106.1"
    }
    ```
  </Tab>
</Tabs>

#### Permissions:

**Android:**

<Tabs>
  <Tab title="XML">
    ```xml theme={null}
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    ```
  </Tab>
</Tabs>

**iOS:**

<Tabs>
  <Tab title="XML">
    ```xml theme={null}
    <key>NSCameraUsageDescription</key>
    <string>This is for Camera permission</string>
    <key>NSMicrophoneUsageDescription</key>
    <string>This is for Mic permission</string>
    ```
  </Tab>
</Tabs>

#### Android:

Also in the same file in `buildscript` section in `ext` block make sure you have set **minSdkVersion** to **24.**

<Tabs>
  <Tab title="build.gradle">
    ```java theme={null}
    buildscript {
        ext {
            buildToolsVersion = "29.0.2"
            minSdkVersion = 24
            compileSdkVersion = 29
            targetSdkVersion = 29
        }
    }
    ```
  </Tab>
</Tabs>

#### iOS:

Please update the minimum target version in the Podfile. Goto ./ios folder and open the Podfile. In the Podfile update the platform version to `12.0.`

<Tabs>
  <Tab title="Podfile">
    ```
    platform :ios, '12.0'
    ```
  </Tab>
</Tabs>

Open the `ios/App` folder and run `pod install` this will create an `App.xcworkspace` open this and run the app.

## Initialize CometChatCalls

The init() method initialises the settings required for CometChatCalls. The init() method takes a single paramater, that is the instance of CallAppSettingsBuilder class.

The `CallAppSettings` class allows you to configure three settings:

* **App ID**: CometChat app ID.
* **Region**: The region where you app was created.
* **Host(host: string)**: This method takes the client URL as input and uses this client URL instead of the default client URL. This can be used in case of dedicated deployment of CometChat.

You need to call `init()` before calling any other method from CometChatCalls. We suggest you call the `init()` method on app startup, preferably in the `index.js` file.

<Tabs>
  <Tab title="JavaScript">
    ```javascript theme={null}
    let appID = "APP_ID";
    let region = "REGION";

    const callAppSettings = new CometChatCalls.CallAppSettingsBuilder()
        .setAppId(appID)
        .setRegion(region)
        .build();

    CometChatCalls.init(callAppSettings).then(
        () => {
            console.log('CometChatCalls initialization completed successfully');
        },
        error => {
            console.log('CometChatCalls initialization failed with error:', error);
        },
    );
    ```
  </Tab>

  <Tab title="TypeScript">
    ```typescript theme={null}
    let appID = "APP_ID";
    let region = "REGION";

    const callAppSetting = new CometChatCalls.CallAppSettingsBuilder()
        .setAppId(appID)
        .setRegion(region)
        .build();

    CometChatCalls.init(callAppSetting).then(
        () => {
            console.log('CometChatCalls initialization completed successfully');
        },
        error => {
            console.log('CometChatCalls initialization failed with error:', error);
        },
    );
    ```
  </Tab>
</Tabs>

Make sure you replace the `APP_ID` with your CometChat `AppID` and `REGION` with your **App Region** in the above code.

| Parameter         | Description                              |
| ----------------- | ---------------------------------------- |
| `callAppSettings` | An object of the `CallAppSettings` class |
