# 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 `onTapTalkRefreshTokenExpired()` is triggered in TapListener
{% endhint %}

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

```java
import io.taptalk.TapTalk.Helper.TapTalk;
import io.taptalk.TapTalk.Listener.TapCommonListener;

...

TapTalk.authenticateWithAuthTicket(AUTH_TICKET, CONNECT_ON_SUCCESS, new TapCommonListener() {
    @Override
    public void onSuccess(String successMessage) {
        // Authentication successful
    }

    @Override
    public void onError(String errorCode, String errorMessage) {

    }
});
```

{% endtab %}

{% tab title="Kotlin" %}

```kotlin
import io.taptalk.TapTalk.Helper.TapTalk
import io.taptalk.TapTalk.Listener.TapCommonListener

...

TapTalk.authenticateWithAuthTicket(AUTH_TICKET, CONNECT_ON_SUCCESS, object : TapCommonListener() {
    override fun onSuccess(successMessage: String?) {
        // Authentication successful
    }

    override fun onError(errorCode: String?, errorMessage: String?) {

    }
})
```

{% endtab %}
{% endtabs %}

{% hint style="info" %}
**Parameters**\
`AUTH_TICKET` : (String) an authentication ticket is required for this method\
`CONNECT_WHEN_SUCCESS`: (BOOL) if set to YES, 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="Java" %}

```java
import io.taptalk.TapTalk.Helper.TapTalk;

...

boolean isAuthenticated = TapTalk.isAuthenticated();
```

{% endtab %}

{% tab title="Kotlin" %}

```kotlin
import io.taptalk.TapTalk.Helper.TapTalk

...

var isAuthenticated = TapTalk.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="Java" %}

```java
import io.taptalk.TapTalk.Helper.TapTalk;

...

// Logout from TapTalk.io
TapTalk.logoutAndClearAllTapTalkData();
```

{% endtab %}

{% tab title="Kotlin" %}

```kotlin
import io.taptalk.TapTalk.Helper.TapTalk;

...

// Logout from TapTalk.io
TapTalk.logoutAndClearAllTapTalkData()
```

{% endtab %}
{% endtabs %}

### Clear TapTalk.io Data

You can clear all TapTalk.io local cached data by calling `clearAllTapTalkData()` method.

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

```java
import io.taptalk.TapTalk.Helper.TapTalk;

...

TapTalk.clearAllTapTalkData();
```

{% endtab %}

{% tab title="Kotlin" %}

```kotlin
import io.taptalk.TapTalk.Helper.TapTalk

...

TapTalk.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-android/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.
