Если вам нужно вручную открыть премиум-функции для конкретных пользователей или групп, это можно сделать через Adapty API. Это удобно для промокампаний, доступа для инвесторов или особых случаев в поддержке.
В этом гайде вы узнаете, как идентифицировать пользователей и предоставлять им уровни доступа программно.
Примеры использования
Промокоды: когда пользователь вводит действующий промокод в приложении, автоматически предоставляйте ему доступ к премиум-функциям.
Доступ для инвесторов/бета-тестеров: открывайте премиум-доступ инвесторам или бета-тестерам, проверяя их пользовательские атрибуты.
Шаг 1. Идентифицируйте пользователей
Adapty использует customer_user_id для идентификации пользователей на всех платформах и устройствах. Это важно для того, чтобы пользователи сохраняли доступ после переустановки приложения или смены устройства.
Этот ID нужно создать один раз. Когда пользователь впервые регистрируется через приложение, можно передать его customer_user_id при активации SDK или воспользоваться методом identify, если SDK был активирован до регистрации.
Если вы идентифицируете новых пользователей после активации SDK, SDK сначала создаст анонимный профиль (без него он не может работать). При вызове identify с customer_user_id будет создан новый профиль.
Это нормальное поведение и не влияет на точность аналитики. Подробнее — здесь.
do { try await Adapty.identify("YOUR_USER_ID") // Unique for each user} catch { // handle the error}
// User IDs must be unique for each userAdapty.identify("YOUR_USER_ID") { error in if let error { // handle the error }}
Adapty.identify("YOUR_USER_ID") { error -> // Unique for each user if (error == null) { // successful identify }}
// User IDs must be unique for each userAdapty.identify("YOUR_USER_ID", error -> { if (error == null) { // successful identify }});
try { await adapty.identify("YOUR_USER_ID"); // Unique for each user // successfully identified} catch (error) { // handle the error}
try { await Adapty().identify(customerUserId); // Unique for each user} on AdaptyError catch (adaptyError) { // handle the error} catch (e) {}
Adapty.Identify("YOUR_USER_ID", (error) => { // Unique for each user if(error == null) { // successful identify }});
Adapty.identify("YOUR_USER_ID") // Unique for each user .onSuccess { // successful identify } .onError { error -> // handle the error }
После того как пользователь идентифицирован через customer_user_id, вы можете предоставить ему уровни доступа с помощью серверного API. Этот вызов API откроет пользователю уровень доступа, чтобы он мог использовать платные функции без оплаты.
Вы можете управлять доступом пользователей, добавив пользовательский атрибут (например, «Бета-тестер» или «Инвестор») в дашборде Adapty.
При запуске приложения проверяйте этот атрибут в профиле пользователя, чтобы автоматически предоставлять доступ.
Чтобы изменить доступ, просто обновите атрибут в дашборде.
После предоставления доступа через API профиль пользователя обновится автоматически. Запросите профиль, чтобы проверить статус подписки и разблокировать премиум-функции.
do { let profile = try await Adapty.getProfile() if profile.accessLevels["YOUR_ACCESS_LEVEL_ID"]?.isActive ?? false { // grant access to premium features }} catch {// handle the error}
Adapty.getProfile { result in if let profile = try? result.get() { // check the access if profile.accessLevels["YOUR_ACCESS_LEVEL_ID"]?.isActive ?? false { // grant access to premium features } }}
Adapty.getProfile { result -> when (result) { is AdaptyResult.Success -> { val profile = result.value // check the access if (profile.accessLevels["YOUR_ACCESS_LEVEL_ID"]?.isActive == true) { // grant access to premium features } } is AdaptyResult.Error -> { val error = result.error // handle the error } }}
Adapty.getProfile(result -> { if (result instanceof AdaptyResult.Success) { AdaptyProfile profile = ((AdaptyResult.Success<AdaptyProfile>) result).getValue(); // check the access if (profile.getAccessLevels().get("YOUR_ACCESS_LEVEL_ID") != null && profile.getAccessLevels().get("YOUR_ACCESS_LEVEL_ID").getIsActive()) { // grant access to premium features } } else if (result instanceof AdaptyResult.Error) { AdaptyError error = ((AdaptyResult.Error) result).getError(); // handle the error }});
try { const profile = await adapty.getProfile(); // check the access if (profile.accessLevels["YOUR_ACCESS_LEVEL_ID"]?.isActive) { // grant access to premium features }} catch (error) { // handle the error}
try { final profile = await Adapty().getProfile(); // check the access if (profile.accessLevels["YOUR_ACCESS_LEVEL_ID"]?.isActive ?? false) { // grant access to premium features }} on AdaptyError catch (adaptyError) { // handle the error} catch (e) {}
Adapty.GetProfile((profile, error) => { if (error != null) { // handle the error return; } // check the access if (profile.AccessLevels["YOUR_ACCESS_LEVEL_ID"]?.IsActive ?? false) { // grant access to premium features }});
Adapty.getProfile() .onSuccess { profile -> // check the access if (profile.accessLevels["YOUR_ACCESS_LEVEL_ID"]?.isActive == true) { // grant access to premium features } } .onError { error -> // handle the error }
try { const profile = await adapty.getProfile(); // check the access if (profile.accessLevels["YOUR_ACCESS_LEVEL_ID"]?.isActive) { // grant access to premium features }} catch (error) { // handle the error}