Если нужно вручную разблокировать премиум-функции для конкретных пользователей или групп, это можно сделать через Adapty API. Это удобно для промо-кампаний, доступа для инвесторов или решения нестандартных обращений в поддержку.
В этом гайде вы узнаете, как идентифицировать пользователей и программно предоставлять им уровни доступа.
Примеры использования
Промокоды: когда пользователь вводит в приложении действующий промокод, автоматически открывайте ему доступ к премиум-функциям.
Доступ для инвесторов и бета-тестеров: предоставляйте премиум-доступ инвесторам или бета-тестерам, проверяя их пользовательские атрибуты.
Шаг 1. Идентификация пользователей
Adapty использует customer_user_id для идентификации пользователей на разных платформах и устройствах. Это необходимо, чтобы пользователи сохраняли доступ после переустановки приложения или смены устройства.
ID нужно создать один раз. Когда пользователь впервые регистрируется в приложении, можно передать customer_user_id при активации SDK или воспользоваться методом identify, если SDK был активирован до регистрации.
Если вы идентифицируете пользователей после активации SDK, SDK сначала создаст анонимный профиль (без него работа невозможна). Когда вы вызовете identify с customer user ID, будет создан новый профиль.
Это нормальное поведение, которое не влияет на точность аналитики. Подробнее здесь.
// 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 предоставит пользователю уровень доступа, чтобы он мог пользоваться платными функциями без фактической оплаты.
Вы можете управлять доступом пользователей, добавив пользовательский атрибут (например, Beta tester или Investor) в дашборде 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(); // проверяем доступ if (profile.getAccessLevels().get("YOUR_ACCESS_LEVEL_ID") != null && profile.getAccessLevels().get("YOUR_ACCESS_LEVEL_ID").getIsActive()) { // открываем доступ к премиум-функциям } } else if (result instanceof AdaptyResult.Error) { AdaptyError error = ((AdaptyResult.Error) result).getError(); // обрабатываем ошибку }});
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(); // проверьте доступ if (profile.accessLevels["YOUR_ACCESS_LEVEL_ID"]?.isActive ?? false) { // предоставьте доступ к премиум-функциям }} on AdaptyError catch (adaptyError) { // обработайте ошибку} 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}