---
title: "Проверка статуса подписки в Unity SDK"
description: "Отслеживайте и управляйте статусом подписки пользователей в Adapty для повышения удержания клиентов в вашем Unity-приложении."
---

С Adapty отслеживать статус подписки очень просто. Не нужно вручную прописывать идентификаторы продуктов в коде — достаточно проверить наличие активного [уровня доступа](access-level), чтобы узнать, есть ли у пользователя активная подписка.

<details>
   <summary>Перед тем как проверять статус подписки (нажмите, чтобы раскрыть)</summary>

- Для iOS настройте [App Store Server Notifications](enable-app-store-server-notifications)
- Для Android настройте [Real-time Developer Notifications (RTDN)](enable-real-time-developer-notifications-rtdn)
</details>

## Уровень доступа и объект AdaptyProfile \{#access-level-and-the-adaptyprofile-object\}

Уровни доступа — это свойства объекта [AdaptyProfile](https://unity.adapty.io/class_adapty_s_d_k_1_1_adapty_profile.html). Рекомендуем получать профиль при запуске приложения, например, когда вы [идентифицируете пользователя](unity-identifying-users#setting-customer-user-id-on-configuration), и обновлять его при любых изменениях. Так вы сможете использовать объект профиля, не запрашивая его каждый раз заново.

Чтобы получать уведомления об обновлениях профиля, подпишитесь на изменения профиля, как описано в разделе [Отслеживание обновлений статуса подписки](#listening-for-subscription-status-updates) ниже.

:::tip

Хотите увидеть реальный пример интеграции Adapty SDK в мобильное приложение? Посмотрите наши [примеры приложений](sample-apps) — они демонстрируют полную настройку: отображение пейволов, совершение покупок и другие базовые функции.

:::

## Получение уровня доступа с сервера \{#retrieving-the-access-level-from-the-server\}

Чтобы получить уровень доступа с сервера, используйте метод `.GetProfile()`:

```csharp showLineNumbers
Adapty.GetProfile((profile, error) => {
  if (error != null) {
    // handle the error
    return;
  }

// check the access
});
```

Параметры ответа:

| Параметр | Описание                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| --------- |--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Profile   | <p>Объект [AdaptyProfile](https://unity.adapty.io/class_adapty_s_d_k_1_1_adapty_profile.html). Как правило, для определения доступа к премиум-функциям достаточно проверить статус уровня доступа профиля.</p><p></p><p>Метод `.getProfile` всегда пытается обратиться к API и возвращает наиболее актуальные данные. Если по какой-то причине (например, при отсутствии интернета) Adapty SDK не может получить данные с сервера, возвращаются данные из кэша. Важно учитывать, что Adapty SDK регулярно обновляет кэш `AdaptyProfile`, чтобы поддерживать информацию в актуальном состоянии.</p> |

Метод `.getProfile()` возвращает профиль пользователя, из которого можно получить статус уровня доступа. В приложении может быть несколько уровней доступа. Например, в газетном приложении с независимыми подписками на разные темы можно создать уровни доступа «sports» и «science». Но в большинстве случаев достаточно одного уровня доступа — тогда можно просто использовать уровень доступа "premium" по умолчанию.

Пример проверки уровня доступа "premium" по умолчанию:

```csharp showLineNumbers
Adapty.GetProfile((profile, error) => {
  if (error != null) {
    // handle the error
    return;
  }

// "premium" is an identifier of default access level
var accessLevel = profile.AccessLevels["premium"];
if (accessLevel != null && accessLevel.IsActive) {
// grant access to premium features
}
});
```

### Отслеживание обновлений статуса подписки \{#listening-for-subscription-status-updates\}

При каждом изменении подписки пользователя Adapty генерирует событие.

Чтобы получать сообщения от Adapty, необходимо выполнить дополнительную настройку:

```csharp showLineNumbers
// Extend `AdaptyEventListener ` with `OnLoadLatestProfile ` method:
public class AdaptyListener : MonoBehaviour, AdaptyEventListener {
  public void OnLoadLatestProfile(AdaptyProfile profile) {
    // handle any changes to subscription state
  }
}
```

Adapty также генерирует событие при запуске приложения. В этом случае передаётся кэшированный статус подписки.

### Кэш статуса подписки \{#subscription-status-cache\}

Кэш, реализованный в Adapty SDK, хранит статус подписки профиля. Это означает, что даже при недоступности сервера из кэша можно получить информацию о статусе подписки профиля.

Однако важно учитывать, что напрямую запрашивать данные из кэша невозможно. SDK периодически обращается к серверу каждую минуту, чтобы проверить наличие обновлений профиля. При наличии изменений — например, новых транзакций или других обновлений — они записываются в кэш, чтобы он оставался синхронизированным с сервером.