
## UUID regeneration mechanism

The UUID is regenerated when:
* the application is reinstalled and UUID cannot be recovered
* one of the UUID regeneration methods is invoked:
    - [Regenerate customer](#regenerate-customer)
    - [Regenerate customer with identifier](#regenerate-customer-with-identifier)
* the destroy session method is invoked - [Destroy customer session](#destroy-customer-session)
* the SDK is reinitialized by changing the **Profile API Key** with one of these methods:
    - [Change Profile API Key dynamically](/developers/mobile-sdk/method-reference/android/lifecycle#change-profile-api-key-dynamically) for Android SDK
    - [Change Profile API Key dynamically](/developers/mobile-sdk/method-reference/ios/lifecycle#change-profile-api-key-dynamically) for iOS SDK
    - [Change Profile API Key dynamically](/developers/mobile-sdk/method-reference/react-native/lifecycle#change-profile-api-key-dynamically) for React Native SDK
    - [Change Profile API Key dynamically](/developers/mobile-sdk/method-reference/flutter/lifecycle#change-profile-api-key-dynamically) for Flutter SDK
* the customer is authenticated by [Simple Profile Authentication](/developers/mobile-sdk/user-identification-and-authorization/simple-authentication) with your own UUID set
* the customer is authenticated by one of the following options and the **authId/authID** parameter is used:
    - [Simple Profile Authentication](/developers/mobile-sdk/user-identification-and-authorization/simple-authentication#authentication-methods)
    - [Registration as a Service](/developers/mobile-sdk/user-identification-and-authorization/simple-authentication#authentication-methods)
    - [OAuth](/developers/mobile-sdk/user-identification-and-authorization/oauth#authentication-methods)
    - [External Providers](/developers/mobile-sdk/user-identification-and-authorization/authenticate-external-providers)
    
   <div class="admonition admonition-important"><div class="admonition-icon"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2.5"><path stroke-linecap="round" stroke-linejoin="round" d="M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z" /></svg></div><div class="admonition-body"><div class="admonition-content">

   the **authId/authID** parameter is used for decreasing the number of UUID refreshes, so it must be unique for every customer)

   </div></div></div>


* the customer is signed out with **SESSION_DESTROY** mode
* the customer is removed by the [removal methods](/developers/mobile-sdk/user-identification-and-authorization/identification-and-user-management#remove-a-customer)

## Session management methods

### Refresh customer token

This method refreshes the customer’s current token.

| OS           | Method                                                                                                                                                                                                                                                                                                                                                                       |
|--------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Android      | [Client.refreshToken()](/developers/mobile-sdk/method-reference/android/client-session#refresh-customer-token) |
| iOS          | [Client.refreshToken()](/developers/mobile-sdk/method-reference/ios/client-session#refresh-customer-token)               |
| React Native | [Synerise.Client.refreshToken()](/developers/mobile-sdk/method-reference/react-native/client-session#refresh-customer-token)  |
| Flutter | [Synerise.client.refreshToken()](/developers/mobile-sdk/method-reference/flutter/client-session#refresh-customer-token)  |

### Retrieve customer token

This method retrieves the customer’s current, active token. Authentication required.

| OS           | Method                                                                                                                                                                                                                                                                                                                                                                       |
|--------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Android      | [Client.retrieveToken()](/developers/mobile-sdk/method-reference/android/client-session#retrieve-customer-token) |
| iOS          | [Client.retrieveToken()](/developers/mobile-sdk/method-reference/ios/client-session#retrieve-customer-token)               |
| React Native | [Synerise.Client.retrieveToken()](/developers/mobile-sdk/method-reference/react-native/client-session#retrieve-customer-token)  |
| Flutter | [Synerise.client.retrieveToken()](/developers/mobile-sdk/method-reference/flutter/client-session#retrieve-customer-token)  |

### Get current customer UUID

This method retrieves the customer’s current UUID.

| OS           | Method                                                                                                                                                                                                                                                                                                                                                                       |
|--------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Android      | [Client.getUuid()](/developers/mobile-sdk/method-reference/android/client-session#get-current-customer-uuid) |
| iOS          | [Client.getUUID()](/developers/mobile-sdk/method-reference/ios/client-session#get-current-customer-uuid)               |
| React Native | [Synerise.Client.getUUID()](/developers/mobile-sdk/method-reference/react-native/client-session#get-current-customer-uuid)  |
| Flutter | [Synerise.client.getUUID()](/developers/mobile-sdk/method-reference/flutter/client-session#get-current-customer-uuid)  |

### Regenerate customer

This method regenerates the UUID and clears the authentication token, login session, custom email, and custom identifier. This operation works only if the customer is anonymous.

| OS           | Method                                                                                                                                                                                                                                                                                                                                                                       |
|--------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Android      | [Client.regenerateUuid()](/developers/mobile-sdk/method-reference/android/client-session#regenerate-customer) |
| iOS          | [Client.regenerateUUID()](/developers/mobile-sdk/method-reference/ios/client-session#regenerate-customer)               |
| React Native | [Synerise.Client.regenerateUUID()](/developers/mobile-sdk/method-reference/react-native/client-session#regenerate-customer)  |
| Flutter | [Synerise.client.regenerateUUID()](/developers/mobile-sdk/method-reference/flutter/client-session#regenerate-customer)  |


### Regenerate customer with identifier

This method regenerates the UUID and clears the authentication token, login session, custom email, and custom identifier. The optional clientIdentifier parameter is a seed for UUID generation.

| OS           | Method                                                                                                                                                                                                                                                                                                                                                                       |
|--------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Android      | [Client.regenerateUuid(clientIdentifier)](/developers/mobile-sdk/method-reference/android/client-session#regenerate-customer-with-identifier) |
| iOS          | [Client.regenerateUUID](/developers/mobile-sdk/method-reference/ios/client-session#regenerate-customer-with-identifier)               |
| React Native | [Synerise.Client.regenerateUUIDWithClientIdentifier()](/developers/mobile-sdk/method-reference/react-native/client-session#regenerate-customer-with-identifier)  |
| Flutter | n/a |

### Destroy customer session

This method clears all session data and creates a new anonymous session with a new profile UUID.

| OS           | Method                                                                                                                                                                                                                                                                                                                                                                       |
|--------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Android      | [Client.destroySession()](/developers/mobile-sdk/method-reference/android/client-session#destroy-current-session) |
| iOS          | [Client.destroySession()](/developers/mobile-sdk/method-reference/ios/client-session#destroy-current-session)               |
| React Native | [Synerise.Client.destroySession()](/developers/mobile-sdk/method-reference/react-native/client-session#destroy-current-session)  |
| Flutter | [Synerise.client.destroySession()](/developers/mobile-sdk/method-reference/flutter/client-session#destroy-current-session)  |