
Synerise Authentication (also known as Registration as a Service) provides customer identity and account management features native to Synerise without any need for third party systems. To use RaaS, implement a set of methods listed below in your application.


<div class="admonition admonition-note"><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="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z" /></svg></div><div class="admonition-body"><div class="admonition-content">

For a full list of available methods, see the [method reference section](/developers/mobile-sdk/method-reference).

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


Additionally, in the Synerise platform (`app.synerise.com`) you can define the following settings:
- [Registration mode](/docs/settings/tool/iam-for-apps/synerise#registration-mode)
- [Assignment of loyalty card](/docs/settings/tool/iam-for-apps/general#loyalty-card-assignment)
- [JWT longevity](/docs/settings/tool/iam-for-apps/general#jwt-lifetime)
- [Custom ID overwriting](/docs/settings/tool/iam-for-apps/general#custom-id-overwriting)
- [External ID overwriting](/docs/settings/tool/iam-for-apps/general#external-id-overwriting)
- [Enabling email address change through a link in the email](/docs/settings/tool/iam-for-apps/general#email-address-change)
- [Templates of email notifications](/docs/settings/tool/iam-for-apps/general#templates) such as account confirmation, email change request, PIN confirmation, and so on.
- [Password policy](/docs/settings/tool/iam-for-apps/synerise#password-policy)

## Registration methods
---

### Register new customers

This method lets you pass all customer information along with any agreements and attributes at once.

The primary unique identifier used by Synerise is the email address. However, you may also define a `customId` as a unique identifier. You can read more [here](/docs/settings/configuration/non-unique-emails).


| OS           | Method                                                                                                                                    |
|--------------|-------------------------------------------------------------------------------------------------------------------------------------------|
| Android      | [Client.registerAccount(registerClient)](/developers/mobile-sdk/method-reference/android/client-authentication#register-customer-account)                |
| iOS          | [Client.registerAccount(context:success:failure:)](/developers/mobile-sdk/method-reference/ios/client-authentication#register-customer-account) |
| React Native | [Synerise.Client.registerAccount(context, onSuccess, onError)](/developers/mobile-sdk/method-reference/react-native/client-authentication#register-customer-account)       |
| Flutter | [Synerise.client.registerAccount(context)](/developers/mobile-sdk/method-reference/flutter/client-authentication#register-customer-account)       |


Depending on backend configuration at Synerise, the registration may or may not require email confirmations/ The following registration behaviors are supported:


| Name                        | Description                                                                                                                                                        |
|-----------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Automatic                   | The account is ready to use right after registration, no confirmations are required. Customer has the attribute `snrs_email_confirmed` set to `false`.         |
| Email Confirmation Required | The account is ready to use right after registration, but the email confirmation is required. The confirmation sets `snrs_email_confirmed` to `true`.          |
| Email Activation Required   | An activation email is sent and the account cannot be used until the address is confirmed. Activation also means that `snrs_email_confirmed` is set to `true`. |
| PIN Activation Required   | An activation email is sent and the account cannot be used until the PIN sent in the email is provided ([Android](/developers/mobile-sdk/method-reference/android/client-authentication#request-customer-account-activation-by-pin), [iOS](/developers/mobile-sdk/method-reference/ios/client-authentication#request-customer-account-activation-by-pin), [React Native](/developers/mobile-sdk/method-reference/react-native/client-authentication#request-customer-account-activation-by-pin)). |

### Request customer account activation by email

This method requests sending an email with a URL that confirms the registration and activates the account.

| OS           | Method                                                                                                                |
|--------------|-----------------------------------------------------------------------------------------------------------------------|
| Android      | [Client.requestAccountActivation(email)](/developers/mobile-sdk/method-reference/android/client-authentication#request-customer-account-activation)               |
| iOS          | [Client.requestAccountActivation(email:success:failure:)](/developers/mobile-sdk/method-reference/ios/client-authentication#request-customer-account-activation)                     |
| React Native | [Synerise.Client.requestAccountActivation(email, onSuccess, onError)](/developers/mobile-sdk/method-reference/react-native/client-authentication#request-customer-account-activation) |
| Flutter      | [Synerise.client.requestAccountActivation(email)](/developers/mobile-sdk/method-reference/flutter/client-authentication#request-customer-account-activation) |

### Confirm customer account activation

This method confirms a customer account with the confirmation token.

| OS           | Method                                                                                                                |
|--------------|-----------------------------------------------------------------------------------------------------------------------|
| Android      | [Client.confirmAccountActivation(token)](/developers/mobile-sdk/method-reference/android/client-authentication#confirm-customer-account-activation)               |
| iOS          | [Client.confirmAccountActivation(token:success:failure:)](/developers/mobile-sdk/method-reference/ios/client-authentication#confirm-customer-account-activation)                     |
| React Native | [Synerise.Client.confirmAccountActivation(token, onSuccess, onError)](/developers/mobile-sdk/method-reference/react-native/client-authentication#confirm-customer-account-activation) |
| Flutter      | [Synerise.client.confirmAccountActivation(token)](/developers/mobile-sdk/method-reference/flutter/client-authentication#confirm-customer-account-activation) |


### Request customer account by pin

This method requests sending an email to a customer with the PIN code needed during account registration process.

| OS           | Method                                                                                                                |
|--------------|-----------------------------------------------------------------------------------------------------------------------|
| Android      | [Client.requestAccountActivationByPin(email)](/developers/mobile-sdk/method-reference/android/client-authentication#request-customer-account-activation-by-pin)               |
| iOS          | [Client.requestAccountActivationByPin(email:success:failure:)](/developers/mobile-sdk/method-reference/ios/client-authentication#request-customer-account-activation-by-pin)                     |
| React Native | [Synerise.Client.requestAccountActivationByPin(email, onSuccess, onError)](/developers/mobile-sdk/method-reference/react-native/client-authentication#request-customer-account-activation-by-pin) |
| Flutter | n/a |


### Confirm customer account activation by pin

This method requires a customer to enter a PIN code during account registration process sent through an email.

| OS           | Method                                                                                                                |
|--------------|-----------------------------------------------------------------------------------------------------------------------|
| Android      | [Client.confirmAccountActivationByPin(pinCode, email)](/developers/mobile-sdk/method-reference/android/client-authentication#confirm-customer-account-activation-by-pin)               |
| iOS          | [Client.confirmAccountActivationByPin(pinCode:success:failure:)](/developers/mobile-sdk/method-reference/ios/client-authentication#confirm-customer-account-activation-by-pin)                     |
| React Native | [Synerise.Client.confirmAccountActivationByPin(pinCode, onSuccess, onError)](/developers/mobile-sdk/method-reference/react-native/client-authentication#confirm-customer-account-activation-by-pin) |
| Flutter | n/a |

## Authentication methods
---
Once a customer is registered, you can let users log in by implementing this method. After a successful log-in, the application receives a JWT token. The SDK refreshes that token while a customer is using the application and events are being sent (auto-refresh occurs only when the token is still valid).


<div class="admonition admonition-note"><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="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z" /></svg></div><div class="admonition-body"><div class="admonition-content">

Token longevity can be changed in the Synerise application. You can learn how to do it in [this article](/docs/settings/tool/iam-for-apps/general#jwt-lifetime).

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


| OS           | Method                                                                                                                                                                                                                                                                                           |
|--------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Android      | - [Client.signIn()](/developers/mobile-sdk/method-reference/android/client-authentication#sign-in-a-customer) <br> - [Client.signInConditionally](/developers/mobile-sdk/method-reference/android/client-authentication#sign-in-a-customer-conditionally) |
| iOS          | - [Client.signIn(email:password:success:failure:)](/developers/mobile-sdk/method-reference/ios/client-authentication#sign-in-a-customer) <br> - [Client.signInConditionally(email:password:success:failure:)](/developers/mobile-sdk/method-reference/ios/client-authentication#sign-in-a-customer-conditionally) |
| React Native | [Synerise.Client.signIn()](/developers/mobile-sdk/method-reference/react-native/client-authentication#sign-in-a-customer) <br> [Synerise.Client.signInConditionally](/developers/mobile-sdk/method-reference/react-native/client-authentication#sign-in-a-customer-conditionally) |
| Flutter | [Synerise.client.signIn()](/developers/mobile-sdk/method-reference/flutter/client-authentication#sign-in-a-customer) |

## Other methods
---

### Check if a customer is signed in

This method checks if a customer is signed in through oAuth, Facebook, Sign in with Apple, or RaaS.


<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">

This method returns `false` if a customer is authenticated through [Simple Profile Authentication](/developers/mobile-sdk/user-identification-and-authorization/simple-authentication).

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


| OS           | Method                                                                                                                                    |
|--------------|-------------------------------------------------------------------------------------------------------------------------------------------|
| Android      | [Client.isSignedIn()](/developers/mobile-sdk/method-reference/android/client-authentication#check-if-a-customer-is-signed-in-via-raas-oauth-facebook-apple)                |
| iOS          | [Client.isSignedIn()](/developers/mobile-sdk/method-reference/ios/client-authentication#check-if-a-customer-is-signed-in-via-raas-oauth-facebook-apple) |
| React Native | [Synerise.Client.isSignedIn()](/developers/mobile-sdk/method-reference/react-native/client-authentication#check-if-a-customer-is-signed-in-via-raas-oauth-facebook-apple)       |
| Flutter | [Synerise.client.isSignedIn()](/developers/mobile-sdk/method-reference/flutter/client-authentication#check-if-a-customer-is-signed-in-via-raas-oauth-facebook-apple)      |

### Customer sign out

This method signs out the customer. The method terminates the JWT token and ends the customer session.

| OS           | Method                                                                                                                |
|--------------|-----------------------------------------------------------------------------------------------------------------------|
| Android      | - [Client.signOut()](/developers/mobile-sdk/method-reference/android/client-authentication#sign-out-customer) <br/> -  [Client.signOut(mode, signOutFromAllDevices)](/developers/mobile-sdk/method-reference/android/client-authentication#sign-out-customer-with-mode-or-from-all-devices) |
| iOS          | - [Client.signOut()](/developers/mobile-sdk/method-reference/ios/client-authentication#sign-out-customer) <br/> - [Client.signOut(mode:fromAllDevices:success:failure:)](/developers/mobile-sdk/method-reference/ios/client-authentication#sign-out-customer-with-mode-or-from-all-devices) |
| React Native | - [Synerise.Client.signOut()](/developers/mobile-sdk/method-reference/react-native/client-authentication#sign-out-a-customer) <br/> - [Synerise.Client.signOutWithMode(mode, fromAllDevices, onSuccess, onError)](/developers/mobile-sdk/method-reference/react-native/client-authentication#sign-out-customer-with-mode-or-from-all-devices) |
| Flutter | [Synerise.client.signOut()](/developers/mobile-sdk/method-reference/flutter/client-authentication#sign-out-a-customer) |



## What's next
---
When the customer's account is registered and/or they are signed in, you can implement [profile management methods](/developers/mobile-sdk/user-identification-and-authorization/identification-and-user-management#profile-management-methods) and [session management methods](/developers/mobile-sdk/user-identification-and-authorization/session-management).