# User Attributes

Attributes are collected by default by the Luciq SDK. These attributes contain information related to the users. You can add custom attributes using these APIs. Attributes can be added, retrieved, and removed.

### Adding

Attach custom attributes to your user by passing two strings to the set attribute API. Much like a dictionary or map, the two strings are the value and key of the attribute.

**Adding Attributes**

{% tabs fullWidth="true" %}
{% tab title="iOS - Swift" %}

```swift
Luciq.setUserAttribute("True", withKey: "Logged in")
Luciq.setUserAttribute("False", withKey: "Completed IAP")
```

{% endtab %}

{% tab title="iOS - ObjC" %}

```objectivec
[Luciq setUserAttribute:@"True" withKey:@"Logged in"];
[Luciq setUserAttribute:@"18" withKey:@"Age"];
```

{% endtab %}

{% tab title="And - Java" %}

```java
Luciq.setUserAttribute("Age", "18");
Luciq.setUserAttribute("LoggedIn", "True");
```

{% endtab %}

{% tab title="And - Kotlin" %}

```kotlin
Luciq.setUserAttribute("Age", "18")
Luciq.setUserAttribute("LoggedIn", "True")
```

{% endtab %}

{% tab title="RN" %}

```javascript
Luciq.setUserAttribute("Age", "18");
Luciq.setUserAttribute("Logged", "True");
```

{% endtab %}

{% tab title="Flutter" %}

```dart
Luciq.setUserAttributeWithKey(String value, String key)

//Examples
Luciq.setUserAttributeWithKey("18", "Age");
Luciq.setUserAttributeWithKey("True", "Logged In");
```

{% endtab %}
{% endtabs %}

### Retrieving

You can retrieve all attributes related to a user using the retrieve API. This API returns an `NSDictionary` for iOS and a `HashMap` for Android.

**Retrieving Attributes**

{% tabs fullWidth="true" %}
{% tab title="iOS - Swift" %}

```swift
//Retrieving
let loggedIn = Luciq.userAttribute(forKey: "Logged in")
//Retrieve all
let allUserAttributes = Luciq.userAttributes()
```

{% endtab %}

{% tab title="iOS - ObjC" %}

```objectivec
//Retrieve one
NSString *loggedIn = [Luciq userAttributeForKey:@"Logged in"];
//Retrieve all
NSDictionary *allUserAttributes = [Luciq userAttributes];
```

{% endtab %}

{% tab title="And - Java" %}

```java
//Get map of all user attributes
HashMap<String, String> userAttrs = Luciq.getAllUserAttributes();
```

{% endtab %}

{% tab title="And - Kotlin" %}

```kotlin
//Get map of all user attributes
val userAttrs = Luciq.getAllUserAttributes()
```

{% endtab %}

{% tab title="RN" %}

```javascript
// Getting attribute
Luciq.getUserAttribute("Logged in", function(attribute) {
  // `attribute` is the return value
});

// Loading all attributes
Luciq.getAllUserAttributes(function (allAttributes) {
  // `allAttributes` Object containing all keys and attributes
});
```

{% endtab %}

{% tab title="Flutter" %}

```dart
// Getting attribute
Luciq.getUserAttributeForKey("Logged in");

// Loading all attributes
Luciq.getUserAttributes();
```

{% endtab %}
{% endtabs %}

### Removing

Attributes can be removed from a user by passing the key of the attribute you'd like to remove to the removal API.

**Removing Attributes**

{% tabs fullWidth="true" %}
{% tab title="iOS - Swift" %}

```swift
Luciq.removeUserAttribute(forKey: "Logged in")
```

{% endtab %}

{% tab title="iOS - ObjC" %}

```objectivec
[Luciq removeUserAttributeForKey:@"Logged in"];
```

{% endtab %}

{% tab title="And - Java" %}

```java
//remove a user attribute
Luciq.removeUserAttribute("KEY");

//remove all user attributes 
Luciq.clearAllUserAttributes();
```

{% endtab %}

{% tab title="And - Kotlin" %}

```kotlin
//remove a user attribute
Luciq.removeUserAttribute("KEY")

//remove all user attributes 
Luciq.clearAllUserAttributes()
```

{% endtab %}

{% tab title="RN" %}

```javascript
Luciq.removeUserAttribute("Completed IAP");
```

{% endtab %}

{% tab title="Flutter" %}

```dart
Luciq.removeUserAttributeForKey("Logged In");
```

{% endtab %}
{% endtabs %}
