---
title: "Идентификация пользователей в Capacitor SDK"
description: "Быстрый старт по настройке Adapty для управления встроенными подписками в Capacitor."
---

Управление покупками пользователей зависит от модели аутентификации вашего приложения:
- Если приложение не использует бэкенд-аутентификацию и не хранит данные пользователей, см. [раздел об анонимных пользователях](#anonymous-users).
- Если приложение имеет (или будет иметь) бэкенд-аутентификацию, см. [раздел об идентифицированных пользователях](#identified-users).
:::tip
**Ключевые понятия**:
- **Профили** — сущности, необходимые для работы SDK. Adapty создаёт их автоматически. Они могут быть анонимными (без customer user ID) или идентифицированными (с customer user ID).
- **Customer user ID** — необязательные идентификаторы, которые **вы создаёте**, чтобы Adapty мог связать ваших пользователей с их профилями в Adapty.
:::

Вот в чём разница между анонимными и идентифицированными пользователями:
|                         | Анонимные пользователи                                              | Идентифицированные пользователи                                                                          |
|-------------------------|---------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------|
| **Purchase management** | Восстановление покупок на уровне стора                              | История покупок сохраняется на всех устройствах через customer user ID  |
| **Profile management**  | Новый профиль при каждой переустановке                              | Один и тот же профиль во всех сессиях и на всех устройствах             |
| **Data persistence**    | Данные анонимных пользователей привязаны к устройству/установке     | Данные идентифицированных пользователей сохраняются на всех устройствах и сессиях                        |
## Анонимные пользователи \{#anonymous-users\}

Если у вас нет серверной аутентификации, **никакой дополнительной обработки аутентификации в коде приложения не требуется**:
1. Когда SDK активируется при первом запуске приложения, Adapty **создаёт новый профиль для пользователя**.
2. Когда пользователь совершает покупку в приложении, она **привязывается к его профилю Adapty и аккаунту в сторе**.
3. Когда пользователь **переустанавливает** приложение или устанавливает его на **новом устройстве**, Adapty **создаёт новый пустой профиль при активации**.
4. Если пользователь ранее совершал покупки в вашем приложении, по умолчанию они автоматически синхронизируются из App Store при активации SDK.
:::note
Восстановление из резервной копии работает иначе, чем переустановка. По умолчанию при восстановлении из резервной копии SDK сохраняет кешированные данные и не создаёт новый профиль. Вы можете настроить это поведение с помощью параметра `clearDataOnBackup`. [Подробнее](sdk-installation-capacitor#clear-data-on-backup-restore).
:::
## Идентифицированные пользователи \{#identified-users\}

- Если у профиля ещё нет customer user ID (то есть **пользователь не вошёл в систему**), при отправке customer user ID он будет привязан к этому профилю.
- Если это **переустановка, повторный вход или установка на новом устройстве**, и вы уже отправляли customer user ID этого пользователя ранее, новый профиль не создаётся — вместо этого происходит переключение на существующий профиль, связанный с данным customer user ID.

У вас есть два способа идентифицировать пользователей в приложении:
- [**При входе/регистрации:**](#during-loginsignup) Если пользователи входят в систему после запуска приложения, вызовите `identify()` с customer user ID при аутентификации.

- [**При активации SDK:**](#during-the-sdk-activation) Если customer user ID уже сохранён на момент запуска приложения, передайте его при вызове `activate()`.
:::important
По умолчанию, когда Adapty получает покупку от Customer User ID, который в данный момент связан с другим Customer User ID, уровень доступа становится общим — таким образом, оба профиля получают платный доступ. Вы можете настроить это поведение так, чтобы платный доступ передавался от одного профиля другому, или полностью отключить совместный доступ. Подробнее — в [статье](general#6-sharing-paid-access-between-user-accounts).
:::

  <img src="/assets/shared/img/identify-diagram.webp"
  style={{
    border: '1px solid #727272', /* border width and color */
    width: '700px', /* image width */
    display: 'block', /* for alignment */
    margin: '0 auto' /* center alignment */
  }}
/>

### В момент входа или регистрации \{#during-loginsignup\}

Если вы идентифицируете пользователей после запуска приложения (например, после входа в аккаунт или регистрации), используйте метод `identify`, чтобы задать их customer user ID.

- Если вы **раньше не использовали этот customer user ID**, Adapty автоматически привяжет его к текущему профилю.
- Если вы **уже использовали этот customer user ID для идентификации пользователя**, Adapty переключится на работу с профилем, связанным с этим customer user ID.
:::tip
При создании customer user ID сохраните его вместе с данными пользователя, чтобы отправлять тот же ID при входе с новых устройств или переустановке приложения.
:::

Всегда используйте `await` для `identify` перед вызовом других методов SDK. Конкурентные вызовы приводят к ошибке `#3006 profileWasChanged` или обращаются к анонимному профилю. См. [Порядок вызовов в Capacitor SDK](capacitor-sdk-call-order).

```typescript showLineNumbers
try {
  await adapty.identify({ customerUserId: "YOUR_USER_ID" });
  // successfully identified
} catch (error) {
  // handle the error
}
```
### При активации SDK \{#during-the-sdk-activation\}

Если вы уже знаете customer user ID на момент активации SDK, можно передать его сразу в методе `activate` — тогда отдельно вызывать `identify` не нужно.

Если customer user ID известен, но вы задаёте его только после активации, при инициализации Adapty создаст новый пустой профиль и переключится на существующий только после вызова `identify`.
Вы можете передать как существующий customer user ID (тот, что использовался раньше), так и новый. Если передать новый, созданный при активации профиль автоматически привяжется к этому customer user ID.

:::tip
Чтобы исключить созданные пустые профили из аналитики дашборда, перейдите в **App settings** и настройте [**Installs definition for analytics**](general#4-installs-definition-for-analytics).
:::

```typescript showLineNumbers
await adapty.activate({
  apiKey: "YOUR_PUBLIC_SDK_KEY",
  params: {
    customerUserId: "YOUR_USER_ID"
  }
});
```
### Выход пользователей из системы \{#log-users-out\}

Если в приложении есть кнопка выхода, используйте метод `logout`. При этом для пользователя создаётся новый анонимный ID профиля.

```typescript showLineNumbers
try {
  await adapty.logout();
  // successful logout
} catch (error) {
  // handle the error
}
```

:::info
Для повторного входа пользователя в приложение используйте метод `identify`.
:::

### Разрешение покупок без входа в систему \{#allow-purchases-without-login\}

Если пользователи могут совершать покупки как до, так и после входа в приложение, никаких дополнительных настроек не требуется:
Вот как это работает:
1. Когда незалогиненный пользователь совершает покупку, Adapty привязывает её к анонимному идентификатору профиля.
2. Когда пользователь входит в аккаунт, Adapty переключается на работу с его идентифицированным профилем.
    - Если customer user ID уже существует (уже привязан к профилю), Adapty автоматически синхронизирует транзакции.
    - Если customer user ID новый (например, покупка была сделана до регистрации), Adapty присваивает его текущему профилю, сохраняя всю историю покупок.