# Authentication

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. The following explains how to authenticate your user with the server.

![TapTalk.io's Authentication Flow](/files/-MHLTpHao9rfmA05gZO6)

When the user logs in to your application, your backend server will have to request an **Authentication Ticket** from TapTalk.io server. TapTalk.io server will return the requested **Authentication Ticket** and **user ID** to your backend server. The client application (iOS or Android) can then retrieve the ticket from your backend server to implement TapTalk.io's SDK by initializing the SDK using the obtained **Authentication Ticket**.

You can see the documentation on how to obtain Authentication Ticket from TapTalk.io's Server on the [Authentication in TapTalk.io's Server API page](/powertalk-chat-sdk-documentation/powertalk-server-api/authentication.md).

### Authenticate to TapTalk.io server with an Authentication Ticket

{% hint style="warning" %}
**Note:** authentication should only be called once before the user is logged in or when the callback tapTalkRefreshTokenExpired is triggered in [TapTalkDelegate](/powertalk-chat-sdk-documentation/powertalk-ios/event-delegate.md#taptalkdelegate)
{% endhint %}

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

```csharp
#import <TapTalk/TapTalk.h>
  
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    //Other Code
    ...
    
    [[TapTalk sharedInstance] authenticateWithAuthTicket:AUTH_TICKET connectWhenSuccess:CONNECT_WHEN_SUCCESS success:^{
        //Success connect to TapTalk.io server
    }
    failure:^(NSError *error) {
        //Failed connect to TapTalk.io server
    }];
}

```

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

{% hint style="info" %}
**Parameters**\
`AUTH_TICKET` : (String) an authentication ticket is required for this method\
`CONNECT_WHEN_SUCCESS`: (boolean) if set to true, application will connect to TapTalk.io server after authentication is successfully completed
{% endhint %}

### Check Authentication Status

You can check authentication status by calling **`isAuthenticated`** method

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

```csharp
#import <TapTalk/TapTalk.h>

BOOL isAuthenticated = [[TapTalk sharedInstance] isAuthenticated];
```

{% endtab %}
{% endtabs %}

### Logout and Clear TapTalk.io Data

Call this method when you need to logout and clear all local cached data from TapTalk.io.

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

```csharp
#import <TapTalk/TapTalk.h>

// Call to logout and clear all local data from TapTalk.io
[[TapTalk sharedInstance] logoutAndClearAllTapTalkData];
```

{% endtab %}
{% endtabs %}

### Clear TapTalk.io Data

Call this method when you need to logout and clear all local cached data from TapTalk.io.

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

```csharp
#import <TapTalk/TapTalk.h>

[[TapTalk sharedInstance] clearAllTapTalkData];
```

{% endtab %}
{% endtabs %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.taptalk.io/powertalk-chat-sdk-documentation/powertalk-ios/authentication.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
