# User & Attributes

### Managing User Data

The `NetmeraUser` class allows you to send structured information about your application's users to Netmera. The ideal time to update user attributes is **right after the user logs into your application.**

{% hint style="warning" %}
**User ID Management**

For optimal performance and data integrity:

* **Update user information at login**: It’s crucial to update the user information as soon as the user logs in.
* **Unique userId**: Ensure that each user has a unique `userId`. Assigning the same `userId` to multiple users leads to data inconsistencies and is not recommended.
  {% endhint %}

### Updating User Information

After login, create a `NetmeraUser` object, set the attributes, and call `Netmera.updateUser()`

```javascript
import { Netmera, NetmeraUser } from "react-native-netmera"

const user = new NetmeraUser()

user.userId = "the_greatest"
user.email = "clay@champion.com"
user.msisdn = "001XXXXXXXXX"
user.name = "Netmera"
user.surname = "Notification"
user.gender = NetmeraUser.GENDER_MALE
user.externalSegments = ["sports", "box"]
user.dateOfBirth = 743069748000 // Unix timestamp
user.maritalStatus = NetmeraUser.MARITAL_STATUS_SINGLE
user.country = "USA"
user.state = "Arizona"
user.city = "Scottsdale"
user.district = "Old Town Scottsdale"
user.favoriteTeam = "My Team"
user.language = "English"
user.industry = "Sports"
user.occupation = "Professional Boxer"

// Update user profile in Netmera
Netmera.updateUser(user)
```

{% hint style="warning" %}
**Important:**

* `userId` **cannot** be removed.
* You should send a **single** user update request at a time.
  {% endhint %}

{% hint style="info" %} <mark style="color:purple;">**After React Native 1.5.0 Update:**</mark>

With the React Native version 1.5.0 update, the `NetmeraUser` gender information is now accessed through the `NMUserGender` enum:

<pre class="language-javascript"><code class="lang-javascript">import {NMUserGender} from "react-native-netmera";

<strong>NetmeraUser.GENDER_NOT_SPECIFIED --> No longer needed
</strong>NMUserGender.NOT_SPECIFIED
</code></pre>

{% endhint %}

### Using Netmera.updateUser() after v1.6.4

With **SDK v1.6.4+**, you can handle user updates with success and error messages like so:

```javascript
Netmera.updateUser(user)
  .then(() => {
    console.log('User updated successfully!');
    Toast.show({
      type: 'success',
      text1: 'User updated successfully!',
    });
  })
  .catch(error => {
    console.log(error.code, error.message);
    Toast.show({
      type: 'error',
      text1: error.message,
    });
  });
```

### Creating Custom Profile Attributes&#x20;

#### Step 1: Navigate to the Developers section

Custom profile attributes must be created and configured in the Netmera Panel before they can be used in the application.&#x20;

* Go to **Panel** > **Developers > Profile Attributes > Create New Attribute.**

#### Step 2: Fill in Attribute Details

Define the following information:

* **Name**: The unique identifier for the attribute.
* **Label**: A user-friendly name for the attribute.
* **Description**: A brief description of the attribute.
* **Data Type**: Choose the appropriate data type for the attribute.
* **Is Array**: Define whether the attribute can hold multiple values.

#### Step 3: Save the Attribute

After clicking **Save**, the custom attribute will be available for assignment to your users.

#### Step 4: Generated Code for Custom Attributes

Once the attribute is defined in the Netmera Panel, the generated code can be found at the bottom of the **Profile Attribute** page, under the **Generate Code** section. This code must be added to your Netmera Panel under **Profile Attributes > User Class**.

{% hint style="info" %}
**Private Information Considerations**

Under the **KVKK** law, the sharing of private user data is prohibited. To ensure compliance:

* **Private Information Flag**: When defining profile attributes or events, the **Private Information** feature must be selected to ensure that these attributes are not sent to the backend by the Netmera SDK.
* **SDK Enforcement**: The SDK checks for the **Private Information** flag during the `(Netmera.update(user))` call. If the flag is set, the request will not be sent to the backend.
  {% endhint %}

<figure><img src="https://2578508252-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F0bOAscrXzPSujyzq8DEz%2Fuploads%2FhdG2lVSfEWWdSab1o1MO%2FScreenshot%202025-02-06%20at%2016.36.38.png?alt=media&#x26;token=cffd0f0a-f89b-49e7-8911-d50640093b3b" alt=""><figcaption></figcaption></figure>

### Fetching Coupons

Retrieve and display user-earned coupons:

```javascript
Netmera.fetchCoupons(0, 2)
      .then(result => {
        console.log(result);
      })
      .catch(error => console.log(error));
```
