> ## Documentation Index
> Fetch the complete documentation index at: https://moengage.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Setting Unique ID for SDK versions below 6.0.0

> Set the user attribute unique ID and manage login and logout states using the legacy setUniqueId() API in Capacitor SDK versions below 6.0.0.

## Implementing Login/Logout

* It's important to set the User Attribute Unique ID when a user logs into your app.
* This merges the new user with the existing user, if any exists, and will help prevent the creation of unnecessary/stale users.
* Setting the Unique ID is a critical piece to tie a user across devices and installs/uninstalls as well across all platforms (i.e. iOS, Android, Windows, The Web). Set the **USER\_ATTRIBUTE\_UNIQUE\_ID** attribute as soon as the user is **logged in**. Unique ID can be something like an email ID, a username (unique), or a database ID or any Backend generated ID.
* Do not set this for the user who not logged in.

### Login

<CodeGroup>
  ```javascript TypeScript theme={null}
  import { MoECapacitorCore } from 'capacitor-moengage-core'
  MoECapacitorCore.setUniqueId({ uniqueId: "abc@xyz.com", appId: "YOUR_WORKSPACE_ID"});
  ```
</CodeGroup>

**Note:** The following values are not allowed in the UniqueID field: "unknown", "guest", "null", "0", "1", "true", "false", "user\_attribute\_unique\_id", "(empty)", "na", "n/a", "", "dummy\_seller\_code", "user\_id", "id", "customer\_id", "uid", "userid", "none", "-2", "-1", "2"

### Logout

The application needs to notify the MoEngage SDK whenever the user is logged out of the application. To notify the SDK, call the API whenever the user is logged out of the application.

<CodeGroup>
  ```javascript TypeScript theme={null}
  import { MoECapacitorCore } from 'capacitor-moengage-core'
  MoECapacitorCore.logoutUser({ appId: "YOUR_WORKSPACE_ID"});
  ```
</CodeGroup>

In case the application is registering for push token it should pass the new push token to MoEngage SDK after user logout. For more information about passing push tokens, refer to [Push Configuration for Android SDK](/docs/developer-guide/android-sdk/push/basic/push-configuration).

### Updating User Attribute Unique Id

Use the method *setAlias()* to update the user attribute unique id instead of *setUniqueId()* with a different value. Using the method *setUniqueId()* with a new value creates unintended users in MoEngage. 

<Info>
  You can not use "moe\_" as a prefix while naming events, event attributes, or user attributes. It is a system prefix and using it might result in periodic blacklisting without prior communication.
</Info>

Use the following helper methods to set User attributes like Name, Email, Mobile, Gender, etc.

<CodeGroup>
  ```javascript TypeScript theme={null}
  import { MoECapacitorCore, MoEProperties, MoEUserGender, MoEAppStatus } from 'capacitor-moengage-core'
        
  MoECapacitorCore.setUserName({ userName: "John Doe", appId: "YOUR_WORKSPACE_ID" });
        
  MoECapacitorCore.setFirstName({ firstName: "John", appId: "YOUR_WORKSPACE_ID" });
        
  MoECapacitorCore.setLastName({ lastName: "Doe", appId: "YOUR_WORKSPACE_ID" });
        
  MoECapacitorCore.setEmailId({ emailId: "johndoef@xyz.com", appId: "YOUR_WORKSPACE_ID" });
        
  MoECapacitorCore.setMobileNumber({ mobileNumber: "1234567890", appId: "YOUR_WORKSPACE_ID" });
        
  MoECapacitorCore.setGender({ gender: MoEUserGender.FEMALE, appId: "YOUR_WORKSPACE_ID" });
        
  MoECapacitorCore.setBirthDate({ birthdate: "1970-01-01T12:00:00Z", appId: "YOUR_WORKSPACE_ID" });
        
  MoECapacitorCore.setUserLocation({ location: { latitude: 25.2311, longitude: 73.1023 }, appId: "YOUR_WORKSPACE_ID" });
  ```
</CodeGroup>

For setting other User Attributes you can use the generic method **setUserAttribute(key, value)**

To set custom user attributes, you will have to provide the attribute name as shown below:

 

<CodeGroup>
  ```javascript TypeScript theme={null}
  import { MoECapacitorCore } from 'capacitor-moengage-core'
  // For generic user attributes
  MoECapacitorCore.setUserAttribute({ name: "Attribute Name", value: "AttributeValue", appId: "YOUR_WORKSPACE_ID" });
  // For Time attribute use ISO-8601 format
  MoECapacitorCore.setUserAttributeDate({ name: "Date Attribute Name", value: "1970-01-01T12:00:00Z", appId: "YOUR_WORKSPACE_ID" });
  // For Location, use MoEGeoLocation instance
  MoECapacitorCore.setUserAttributeLocation({ name: "Location Attribute Name", location: { latitude: 25.23, longitude: 73.23 }, appId: "YOUR_WORKSPACE_ID" });
  ```
</CodeGroup>
