# Get Started

## Quick Start

MeetTalk iOS SDK provides all of the features available in the PowerTalk SDK, with the addition of voice and video call feature. This page presents a brief overview of the SDK’s structure and abilities, then lets you go through the preliminary steps of implementing the SDK in your own app.

## Configure and Initialize TapTalk.io iOS SDK

The first step to configure MeetTalk SDK will be the same as configuring PowerTalk SDK, if you have completed this step, you can [skip to Step 2.](#step-2-install-taptalk.io-sdk)

#### **Step 1: Create a new application from your dashboard**

**1.** Login to [TapTalk.io Dashboard](https://taptalk.io/), then choose **Development** -> **Apps**

![](https://4266585843-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LfVupFSqh_qZAY9OiCO%2F-MHKsq4vOlouRa03adbb%2F-MHKvQJYwokZj2SvRd6U%2F08a4ad0-Screenly_-_9.0_Development_-_Apps_-_Empty_State2x.png?alt=media\&token=6f629f44-d932-400f-984d-2fb1a1f0e408)

**2**. Click **New App** Button, input **App Name** and choose **Platform**, and then click **Create New App** Button.

![](https://4266585843-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LfVupFSqh_qZAY9OiCO%2Fuploads%2FIIGiGYFhsdbR4rpy1wXJ%2Fimage.png?alt=media\&token=bad0c834-0102-4255-adff-4983e2cf5ea5)

**3.** A pop-up dialog will be shown with provided **App Key ID** & **App Key Secret**

![](https://4266585843-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LfVupFSqh_qZAY9OiCO%2Fuploads%2F8IHmyjCSGO4WhP97uSUu%2Fimage.png?alt=media\&token=3385dac5-6a77-4c2c-b623-8fda61729a32)

{% hint style="warning" %}
**Note:** Please remember to save your **App Key ID** & your **App Key Secret** because it will only be shown once and will be used in [TapTalk.io initialization](https://docs.taptalk.io/powertalk-chat-sdk-documentation/powertalk-ios/get-started#step-5-initialize-taptalk-io-in-your-application-class)
{% endhint %}

#### Step 2: Install **MeetTalk** SDK

You can install the MeetTalk iOS SDK using [CocoaPods](https://cocoapods.org/) like the following. If you are new to CocoaPods, you can see more information in [Cocoapods guides](https://guides.cocoapods.org/using/getting-started.html). To create a **Podfile**, open a terminal window, navigate to your project directory, and then create a **Podfile** by running the following command:

{% tabs %}
{% tab title="Terminal" %}

```
$ pod install
```

{% endtab %}
{% endtabs %}

Then **Podfile** will be created in your project directory. Open the **Podfile** and add the following lines to the **Podfile**.

{% tabs %}
{% tab title="Podfile" %}

```ruby
# Please make sure you define platform on your Podfile
# Make sure to use ios 12.0 for minimum deployment target

platform :ios, '12.0'

target "YourProjectName" do
    pod 'MeetTalk'
    pod 'JSONModel', '1.8.0', :modular_headers => true
end
```

{% endtab %}
{% endtabs %}

Since TapTalk.io use uses **`git-lfs`** (Git Large Files Storage) you will need to install **GIT LFS** to clone/install TapTalk.io SDK through **Cocoapods**.

{% hint style="warning" %}
**Note**: Make sure to install **`git-lfs`**&#x62;efore pod install, otherwise the pod install / pod update will return an error
{% endhint %}

Easiest way to install [git-lfs](https://git-lfs.github.com) is using [brew](https://brew.sh):

{% tabs %}
{% tab title="Terminal" %}

```
brew install git-lfs
git lfs install
```

{% endtab %}
{% endtabs %}

Next, after the **`git-lfs`** is installed, install the MeetTalk SDK through CocoaPods.

{% tabs %}
{% tab title="Terminal" %}

```
$ pod install
```

{% endtab %}
{% endtabs %}

#### Step 3: Grant permission in your application project

To make sure TapTalk.io has all permission to access the user's media, file, location, and contact, the application needs to ask for permission. Go to your **info.plist**, and add the following key-value pairs.

<table data-header-hidden><thead><tr><th width="339">Information Property Key</th><th>Information Property Value</th></tr></thead><tbody><tr><td><strong>Information Property Key</strong></td><td><strong>Information Property Value</strong></td></tr><tr><td>Privacy - Camera Usage Description</td><td>$(PRODUCT_NAME) needs to request access to your camera to take profile picture and to send image chat.</td></tr><tr><td>Privacy - Contacts Usage Description</td><td>$(PRODUCT_NAME) need your permission to access your contact, we will sync your contact to our server and automatically find your friend so it is easier for you to find your friends.</td></tr><tr><td>Privacy - Photo Library Additions Usage Description</td><td>$(PRODUCT_NAME) needs to request access to your photo library to save photo.</td></tr><tr><td>Privacy - Photo Library Usage Description</td><td>$(PRODUCT_NAME) needs to request access to your photo library to take profile picture and to send image chat.</td></tr><tr><td>Privacy - Location When In Use Usage Description</td><td>$(PRODUCT_NAME) needs to request access to your location to send location chat.</td></tr><tr><td>Privacy - Microphone Usage Description</td><td>$(PRODUCT_NAME) needs to request access to your microphone to record audio and send voice chat</td></tr><tr><td>Privacy - Calendars Usage Description</td><td>$(PRODUCT_NAME) needs to request access to your calendar</td></tr></tbody></table>

{% hint style="info" %}
**Note:** You can change **Information Property Value** with your preferred words, the string value will be displayed when the application requests the permission.
{% endhint %}

![](https://4266585843-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LfVupFSqh_qZAY9OiCO%2Fuploads%2FMufWm05SzeQvOEAWIhtW%2FMeetTalk%20Setup%20info%20plist%20%20.png?alt=media\&token=02f691a0-9f3f-4754-b160-0783f6d9ee82)

#### Step 4: Enable background modes

Background modes is required to handle background process in TapTalk.io. It is used to run some processes in the background before the app is killed. For more information about the processes, check out the [background process section](https://docs.taptalk.io/powertalk-chat-sdk-documentation/powertalk-ios/background-process-in-taptalk.io).\
To enable **background modes**, go to **Target** -> **Capabilities**, then turn **Background Modes** toggle to **ON**, next select **Background fetch**, **Remote notifications**, and **Voice over IP**.

![](https://4266585843-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LfVupFSqh_qZAY9OiCO%2Fuploads%2F3E9meehW5MJRfbMl8Uxr%2FMeetTalk%20Setup%20info%20plist%20background%20modes%202.png?alt=media\&token=d83876b1-bf17-4abe-85d2-4b376b6a0e44)

#### Step 5: Disable Bitcode for your Project Target

MeetTalk iOS SDK currently requires bitcode to be disabled in the project target's Build Settings.

To disable bitcode, go to your Project in the project navigator on the left panel of the Xcode screen, select your Target, then select Build Settings and search for "bitcode", then set the value to **No**.

![](https://4266585843-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LfVupFSqh_qZAY9OiCO%2Fuploads%2FXixe7xHDyfun4MYefXSa%2FMeetTalk%20Setup%20Bitcode.png?alt=media\&token=624a0e9e-2c0d-4d51-82f9-140441077194)

#### Step 6: Initialize MeetTalk in your Application class

In order to use MeetTalk, you must first initialize a MeetTalk instance by passing the `APP_KEY_ID`, `APP_KEY_SECRET`, `APP_BASE_URL`, and `IMPLEMENTATION_TYPE` assigned to your application to the `initWithAppKeyID:appKeySecret:apiURLString:implementationType:` method as a parameter. Generally, initialization is implemented in the **appDelegate** `application:didFinishLaunchingWithOptions:` method.

{% hint style="warning" %}
**Note:** To get **BASE\_URL** you can follow our documentation on [how to get Base URL](https://docs.taptalk.io/powertalk-chat-sdk-documentation/powertalk-server-api/base-url) on TapTalk.io.
{% endhint %}

{% tabs %}
{% tab title="Objective-C" %}
{% code title="AppDelegate.m" %}

```objectivec
// import MeetTalk
#import <MeetTalk/MeetTalk.h>

@interface AppDelegate() <MeetTalkDelegate, ...>

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
 
  //Initialize TapTalk.io
  [[MeetTalk sharedInstance] initWithAppKeyID:APP_KEY_ID appKeySecret:APP_KEY_SECRET apiURLString:APP_BASE_URL implementationType:IMPLEMENTATION_TYPE];
  [[MeetTalk sharedInstance] setDelegate:self];
}
```

{% endcode %}
{% endtab %}
{% endtabs %}

{% hint style="info" %}
**Parameters**\
**APP\_KEY\_ID**: (String) application key ID\
**APP\_KEY\_SECRET**: (String) application key Secret\
**APP\_BASE\_URL**: (String) base API URL\
**IMPLEMENTATION\_TYPE**: (enum) found in TapTalkImplentationType, more detailed information below
{% endhint %}

{% hint style="info" %}
**IMPLEMENTATION\_TYPE**\
TapTalkImplementationType consists of 3 types which are:\
\&#xNAN;**`TapTalkImplementationTypeUI`**: used for implementation with only TapUI\
\&#xNAN;**`TapTalkImplementationTypeCore`**: used for implementation with only TapCore\
\&#xNAN;**`TapTalkImplementationTypeCombine`**: used for implementation with both of TapCore and TapUI combined
{% endhint %}

{% hint style="info" %}
**Note**: In the [Event Delegate](https://docs.taptalk.io/powertalk-chat-sdk-documentation/powertalk-ios/event-delegate) page, you can find detailed information on the usages of TapTalk iOS SDK's delegates and callbacks.
{% endhint %}

You may also call `initWithAppKeyID:appKeySecret:apiURLString:implementationType:success:` to obtain callback once the initialization is finished.

{% tabs %}
{% tab title="Objective-C" %}
{% code title="AppDelegate.m" %}

```objectivec
// import MeetTalk
#import <MeetTalk/MeetTalk.h>

@interface AppDelegate() <MeetTalkDelegate, ...>

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
 
  //Initialize MeetTalk
  [[MeetTalk sharedInstance] initWithAppKeyID:APP_KEY_ID 
                                 appKeySecret:APP_KEY_SECRET 
                                 apiURLString:APP_BASE_URL 
                           implementationType:IMPLEMENTATION_TYPE
                                      success:^{
        // Initialization finished
  }];
  [[MeetTalk sharedInstance] setDelegate:self];
}
```

{% endcode %}
{% endtab %}
{% endtabs %}

{% hint style="warning" %}
**Note**: `MeetTalk initWithAppKeyID:` will also initialize a TapTalk instance, so If you have previously used PowerTalk in your application, **replace `TapTalk initWithAppKeyID:` with `MeetTalk initWithAppKeyID:`**
{% endhint %}

#### Step 7: Implement application delegate

To allow the iOS SDK to respond to the connection and state changes in your iOS client app, you have to implement all of our application delegate methods in your UIApplicationDelegate methods in appDelegate file. You can follow the instructions in [Implement Application Delegate page](https://docs.taptalk.io/meettalk-sdk-documentation/meettalk-ios/implement-application-delegate).

#### Step 8: Authenticate to TapTalk.io

In order to use the abilities of the iOS SDK in your client app, a TapTalk instance must be initiated in each client app through user authentication with TapTalk.io server. An authenticated user account allows the instance to communicate and interact with the server. To authenticate your user with the server, follow the instructions in [Authentication page](https://docs.taptalk.io/powertalk-chat-sdk-documentation/powertalk-ios/authentication).

### Initialize Google Places API Key (Optional)

To enable location search result preview while sending location message, a Google Places API Key is required. To obtain the API key for your application, you can check [the documentation](https://developers.google.com/places/web-service/get-api-key) provided by Google. To initialize, insert your obtained key using the `initializeGooglePlacesApiKey()` method.

{% tabs %}
{% tab title="Objective-C" %}

```objectivec
#import <TapTalk/TapTalk.h>
  
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
  
    //Initialize Google Places API Key
    [[TapTalk sharedInstance] initializeGooglePlacesAPIKey:GOOGLE_PLACES_API_KEY]; 
}
```

{% endtab %}
{% endtabs %}

{% hint style="info" %}
**Parameters**\
**GOOGLE\_PLACES\_API\_KEY**: (String) Google Places API Key
{% endhint %}

### Initiate New Call

Initiating a call in MeetTalk requires data from **TAPRoomModel**. which will then be used to construct a conference data for the call. To initiate a call, use the `initiateNewConferenceCall` method from **MeetTalk** class.

You may also customize the outgoing call using the provided parameters.

{% tabs %}
{% tab title="Objective-C" %}

```java
// Initiate a voice call (participants will enter call with video muted)
[[MeetTalk sharedInstance] initiateNewConferenceCallWithRoom:ROOM];

// Initiate a call with custom audio/video state
[[MeetTalk sharedInstance] initiateNewConferenceCallWithRoom:ROOM 
                                         startWithAudioMuted:START_WITH_AUDIO_MUTED 
                                         startWithVideoMuted:START_WITH_VIDEO_MUTED];

// Initiate a call with custom audio/video state and recipient display name
[[MeetTalk sharedInstance] initiateNewConferenceCallWithRoom:ROOM 
                                        recipientDisplayName:RECIPIENT_DISPLAY_NAME
                                         startWithAudioMuted:START_WITH_AUDIO_MUTED 
                                         startWithVideoMuted:START_WITH_VIDEO_MUTED];
```

{% endtab %}
{% endtabs %}

{% hint style="info" %}
**Parameters**\
**ROOM**: (TAPRoomModel) the chat room where the call will be initiated\
**START\_WITH\_AUDIO\_MUTED**: (BOOL) initial state of the participants' microphone\
**START\_WITH\_VIDEO\_MUTED**: (BOOL) initial state of the participants' front camera\
**RECIPIENT\_DISPLAY\_NAME**: (NSString) custom display name/nickname for the recipient that will be displayed during the call
{% endhint %}

When this method is called in personal chat room, the active user will start and enter the voice call, and send a notification to the recipient, which will then receive an incoming call. The recipient will join the voice call once the incoming call is answered.

Participants will still be able to mute/unmute their microphone/camera during the call regardless of the **START\_WITH\_AUDIO\_MUTED** and **START\_WITH\_VIDEO\_MUTED** parameter.

{% hint style="warning" %}
**Note**: Initiating a call is currently only available in **personal** chat rooms.
{% endhint %}

{% hint style="info" %}
**Note**: You can check a more complete implementation guide in the [PowerTalk iOS](https://docs.taptalk.io/powertalk-chat-sdk-documentation/powertalk-ios) section.
{% endhint %}
