# SDK Users

> Applivery SDK Users — bound and temporal users, how to bind/unbind them, authentication enforcement, and tracking App usage and feedback.

Source: https://docs.applivery.com/en/app-distribution/sdk/sdk-users/  •  Last updated: 2026-04-01

**Key topics:** SDK user types, Binding and unbinding users, Authentication enforcement, User visibility in Applivery Dashboard, Applivery, SDK, iOS, Android, Swift, Kotlin

---

**TL;DR:** Applivery SDK users are automatically created records for devices running apps with the SDK, allowing developers to track usage and enforce authentication.

The Applivery SDK creates and tracks user records automatically for every Device that runs an App with the SDK integrated. These records appear in the Applivery Dashboard and allow you to get insights into who installs your Apps, who reports feedback, and how Builds are adopted across your user base.

SDK users come in two types depending on how they originate: **SDK users** (bound, named identities) and **Temporal SDK users** (anonymous, device-based). Both count as employees against your Workspace's employee limit.

:::info
Both SDK users and Temporal SDK users count toward your Workspace's **Store Employees** quota.
:::

---

## Types of SDK Users

| | SDK User | Temporal SDK User |
|---|---|---|
| **Origin** | Created programmatically via `bindUser()` | Created automatically by the SDK on first device launch |
| **Duration** | Permanent | Expires after 30 days of inactivity across all Apps in your organization |
| **Identifier** | Email address you provide. E.g. `jane@example.com` | Device ID. E.g. `6effd10a-5b00-45ec-b02d-580b53a5775c` |
| **Description** | Named employees with a known identity, linked to the session via `bindUser()` | Unknown users automatically created to track unique Devices. Unique across your Workspace based on device ID. |

:::info
**Inactivity** is defined as the last time a user opened any App from your organization with the SDK integrated. The 30-day timer resets on each open.
:::

---

## SDK Users (Bound)

When you call `bindUser()` with an email address, Applivery links the current device session to a named identity. This allows you to:

- See who downloaded or installed each Build.
- Attribute feedback reports and bug submissions to a specific person.
- Track update adoption per named user.
- Control app access by user identity when authentication enforcement is enabled.

Bound users appear with their email address in the Applivery Dashboard, making it easy to correlate SDK activity with your own user base.

## Temporal SDK Users (Anonymous)

When a Device runs the SDK for the first time without a `bindUser()` call, Applivery automatically creates a Temporal SDK User record identified by the Device's unique ID. These records allow basic device-level analytics (installations, update adoption) even when no named identity is available.

Temporal SDK users expire after 30 days of inactivity. If the same device opens the App again after expiry, a new Temporal SDK User record is created.

---

## Binding a User

Call `bindUser` after your App's own authentication flow completes, so the identity is known before any Applivery interactions occur.

**iOS (Swift)**

```swift
AppliverySDK.shared.bindUser(
    email: "user@example.com",   // Required
    firstName: "Jane",           // Optional
    lastName: "Doe",             // Optional
    tags: ["beta", "ios-team"]   // Optional — used for filtering in the Dashboard
) {
    // onComplete callback — called when binding is confirmed
}
```

**iOS (Objective-C)**

```objc
[[AppliverySDK shared] bindUserWithEmail:@"user@example.com"
                               firstName:@"Jane"
                                lastName:@"Doe"
                                    tags:@[@"beta", @"ios-team"]
                               onComplete:nil];
```

**Android (Kotlin)**

```kotlin
Applivery.getInstance().bindUser(
    email = "user@example.com",
    firstName = "Jane",
    lastName = "Doe",
    tags = listOf("beta", "android-team")
)
```

#### `bindUser` parameters

| Parameter | Type | Required | Description |
|---|---|---|---|
| `email` | String | Yes | The user's email address. Used as the primary identifier in the Applivery Dashboard. |
| `firstName` | String | No | The user's first name. Displayed alongside the email in reports and feedback. |
| `lastName` | String | No | The user's last name. |
| `tags` | Array of Strings | No | Custom labels for grouping or filtering users in the Dashboard. E.g. `["qa", "ios"]`. |

---

## Unbinding a user

Call `unbindUser` when your App's user logs out, so subsequent SDK interactions are no longer attributed to that identity.

**iOS (Swift)**

```swift
AppliverySDK.shared.unbindUser {
    // onComplete callback
}
```

**iOS (Objective-C)**

```objc
[[AppliverySDK shared] unbindUserWithOnComplete:nil];
```

**Android (Kotlin)**

```kotlin
Applivery.getInstance().unbindUser()
```

:::info
After unbinding, the SDK session returns to anonymous mode until `bindUser` is called again.
:::

---

## Retrieving the current user

You can read back the currently bound user's profile at any point:

**iOS (Swift)**

```swift
AppliverySDK.shared.getUser { userInfo in
    // userInfo is an NSDictionary, or nil if no user is bound
    print(userInfo ?? "No user bound")
}
```

**Android (Kotlin)**

```kotlin
Applivery.getInstance().getUser(object : GetUserCallback {
    override fun onSuccess(user: AppliveryUser?) {
        // user is null if no user is bound
    }
    override fun onError(error: Throwable) { /* handle */ }
})
```

---

## Authentication enforcement

If your Publication requires users to log in before accessing the App, you can enforce this at the SDK level. When `enforceAuthentication` is set to `true` in the SDK configuration, users must authenticate via Applivery (or your Workspace's SSO) before the App becomes usable.

**iOS**

```swift
let config = AppliveryConfiguration(
    enforceAuthentication: true
)
AppliverySDK.shared.start(token: "YOUR_TOKEN", configuration: config)
```

**Android**

```kotlin
val config = Configuration(
    enforceAuthentication = true
)
Applivery.start(APPLIVERY_TOKEN, configuration = config)
```

:::info
When enforcement is enabled, and the user has not authenticated, Applivery will present a login prompt. If `enforceAuthentication` is `false` (the default), users can dismiss the login prompt and continue using the App anonymously.
:::

---

## User visibility in the Dashboard

SDK users are visible per app in the Applivery Dashboard or in the Directory section under the Settings menu. For each user, you can see:

- Email address and display name (for bound users).
- Tags assigned via `bindUser`.
- Devices associated with the user.
- Download history — which Builds were installed.
- Feedback submissions attributed to the user.

Anonymous users appear with a Device identifier rather than an email address.

---

## SDK users vs. other user types

Applivery has several distinct user types. Understanding the differences helps avoid confusion:

| User Type | Who they are | How they authenticate | Where they appear |
|---|---|---|---|
| **Collaborators** | Team members managing the App (developers, QA leads) | Applivery account or SSO | Dashboard → Team |
| **Store Employees** | End users with access to App Store Publications | Applivery account, SSO, password, or OTP | App → Users (Store) |
| **SDK Users** | Users of an App with the SDK integrated | Via `bindUser` in the App code | App → Users (SDK) |
| **OTP Users** | External users with time-limited Publication access | One-time password sent by email | App → Publication → OTP Allowlist |

SDK users are the only type created programmatically from within the App itself. All other types are managed through the Applivery Dashboard or API.
