Проверка статуса подписки во Flutter SDK
Чтобы решить, может ли пользователь получить доступ к платному контенту или нужно показать ему пейвол, необходимо проверить его уровень доступа в профиле.
В этой статье показано, как получить данные профиля и решить, что показать пользователю — пейвол или платный контент.
Получение статуса подписки
Когда нужно решить, показать пользователю пейвол или платный контент, вы проверяете его уровень доступа в профиле. Есть два варианта:
- Вызвать
getProfile, если нужны актуальные данные прямо сейчас (например, при запуске приложения) или требуется принудительное обновление. - Настроить автоматическое обновление профиля, чтобы хранить локальную копию, которая автоматически обновляется при изменении статуса подписки.
Получение профиля
Самый простой способ узнать статус подписки — вызвать метод getProfile:
try {
final profile = await Adapty().getProfile();
// check the access
} on AdaptyError catch (adaptyError) {
// handle the error
} catch (e) {
}
Подписка на обновления подписки
Чтобы автоматически получать обновления профиля в приложении:
- Используйте
Adapty().didUpdateProfileStream.listen()для отслеживания изменений профиля — Adapty будет автоматически вызывать этот метод при каждом изменении статуса подписки пользователя. - Сохраняйте обновлённые данные профиля при каждом вызове этого метода, чтобы использовать их в приложении без лишних сетевых запросов.
class SubscriptionManager {
AdaptyProfile? _currentProfile;
SubscriptionManager() {
// Listen for profile updates
Adapty().didUpdateProfileStream.listen((profile) {
_currentProfile = profile;
// Update UI, unlock content, etc.
});
}
// Use stored profile instead of calling getProfile()
bool hasAccess() {
return _currentProfile?.accessLevels['premium']?.isActive ?? false;
}
}
Adapty автоматически вызывает слушатель потока обновлений профиля при запуске приложения, предоставляя кешированные данные о подписке даже при отсутствии интернета.
Связь профиля с логикой пейвола
Когда нужно быстро решить, показывать пейвол или открывать доступ к платному контенту, можно напрямую проверить профиль пользователя. Это удобно при запуске приложения, входе в премиум-разделы или перед показом определённого контента.
Future<bool> _checkAccessLevel() async {
try {
final profile = await Adapty().getProfile();
return profile.accessLevels['YOUR_ACCESS_LEVEL']?.isActive ?? false;
} catch (e) {
print('Error checking access level: $e');
return false; // Show paywall if access check fails
}
}
Future<void> _initializePaywall() async {
await _loadPaywall();
final hasAccess = await _checkAccessLevel();
if (!hasAccess) {
// Show paywall if no access
}
}
Следующие шаги
Теперь, когда вы знаете, как отслеживать статус подписки, узнайте, как работать с профилями пользователей, чтобы они всегда имели доступ к тому, за что заплатили.