# User Identification

Identify is how you send information to Freshpaint and your destinations about who your users are. There are two parts to using identify:

* Attaching unique identifiers to users.
* Attaching properties to users.

## Attaching Unique Identifiers

By default, when a user visits your site, Freshpaint and downstream tools will identify the user based on a randomly generated identifier stored in a cookie. Freshpaint refers to this identifier as either the "Anonymous ID" or "Device ID". Because the identifier is stored in a cookie, when a user visits your site on their phone and on their laptop, they will show up as two different users. To remedy this situation, Freshpaint provides identify, a way for you to provide your own identifier so Freshpaint and downstream tools can merge the data across different devices.

To setup identify, you can call the [identify API call](https://documentation.freshpaint.io/developer/freshpaint-sdk-reference#identify). The following example call attaches the identifier `ada.lovelace@example.com` to the current user:

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

```javascript
freshpaint.identify('ada.lovelace@example.com');
```

{% endtab %}

{% tab title="React Native" %}

```javascript
Freshpaint.identify('ada.lovelace@example.com');
```

{% endtab %}

{% tab title="iOS Swift" %}

```swift
Freshpaint.shared().identify("ada.lovelace@example.com");
```

{% endtab %}

{% tab title="iOS Objective-C" %}

```objectivec
[[FPAnalytics sharedAnalytics] identify:@"ada.lovelace@example.com"]
```

{% endtab %}

{% tab title="Android" %}

```java
Freshpaint
    .with(getActivity().getApplicationContext())
    .identify("ada.lovelace@example.com");
```

{% endtab %}
{% endtabs %}

When setting up identify, we recommend calling `freshpaint.identify()` in two different places:

* When a user registers for an account.
* When a user signs in.

As for a unique identifier, if you have internal ids that are unique to a user, we recommend using those. Otherwise, we recommend using either the username or the email of the user.

## Attaching User Properties

The second part of identify is attaching properties to user. This allows you to send information you have about the user into your Freshpaint destinations. To attach properties to a user, you pass in the properties you want to set as the second argument to `freshpaint.identify()`:

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

```javascript
freshpaint.identify({
  email: 'ada.lovelace@example.com',
  name: 'Ada Lovelace',
});
```

{% endtab %}

{% tab title="React Native" %}

```javascript
Freshpaint.identify({
  email: 'ada.lovelace@example.com',
  name: 'Ada Lovelace',
});
```

{% endtab %}

{% tab title="iOS Swift" %}

```swift
Freshpaint.shared().identify(
    nil,
    traits: [
        "email": "ada.lovelace@example.com",
        "name": "Ada Lovelace"
    ]
)
```

{% endtab %}

{% tab title="iOS Objective-C" %}

```objectivec
[[FPAnalytics sharedAnalytics]
              identify:nil
              traits:@{ @"email": @"ada.lovelace@example.com",
                        @"name": @"Ada Lovelace" }]
```

{% endtab %}

{% tab title="Android" %}

```java
Freshpaint
    .with(getActivity().getApplicationContext())
    .identify(new Traits()
        .putValue("email", "ada.lovelace@example.com")
        .putValue("name", "Ada Lovelace")
    );
```

{% endtab %}
{% endtabs %}

You should pass any information you know about your users that you want to use in your downstream tools to `freshpaint.identify()`.

`freshpaint.identify()` can also be called with both an identifier and a JSON object at the same time:

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

```javascript
freshpaint.identify('ada.lovelace@example.com', {
  email: 'ada.lovelace@example.com',
  name: 'Ada Lovelace',
});
```

{% endtab %}

{% tab title="React Native" %}

```javascript
Freshpaint.identify('ada.lovelace@example.com', {
  email: 'ada.lovelace@example.com',
  name: 'Ada Lovelace',
});
```

{% endtab %}

{% tab title="iOS Swift" %}

```swift
Freshpaint.shared().identify(
    "ada.lovelace@example.com",
    traits: [
      "email": "ada.lovelace@example.com",
      "name": "Ada Lovelace"
    ]
);
```

{% endtab %}

{% tab title="iOS Objective-C" %}

```objectivec
[[FPAnalytics sharedAnalytics]
              identify:@"ada.lovelace@example.com"
              traits:@{ @"email": @"ada.lovelace@example.com",
                        @"name": @"Ada Lovelace" }]
```

{% endtab %}

{% tab title="Android" %}

```java
Freshpaint
    .with(getActivity().getApplicationContext())
    .identify("ada.lovelace@example.com", new Traits()
        .putValue("email", "ada.lovelace@example.com")
        .putValue("name", "Ada Lovelace")
    );
```

{% endtab %}
{% endtabs %}

## User Information

To retrieve information about a specific user, you can use the call the method `freshpaint.user().traits()` on the client. This will return an object containing the user’s associated traits.

* The `.user()` method provides access to user-related information, including:
  * User ID
  * Traits
  * Anonymous ID
* The `.traits()` method can be used to:
  * Retrieve existing traits
  * Update or set new ones
