diff --git a/lib/backend/api.dart b/lib/backend/api.dart index 43234f8..b732b07 100644 --- a/lib/backend/api.dart +++ b/lib/backend/api.dart @@ -119,14 +119,21 @@ class Api { if (response.isOk) { _callsSeed = response.payload['callsSeed'] as int?; _registrationCountries = _parseRegistrationCountries(response.payload); - _setSessionState(SessionState.online); + _sessionState = SessionState.online; _startPinging(); logger.i('Сессия онлайн, хэндшейк ок'); - _handshakeSuccessController.add( - response.payload['device_name'] as String? ?? 'Unknown', - ); if (_onReconnectCallback != null) { - _onReconnectCallback!(); + try { + await _onReconnectCallback!(); + } catch (e) { + logger.w('Авто-логин при хэндшейке не удался: $e'); + } + } + if (_sessionState == SessionState.online) { + _stateController.add(SessionState.online); + _handshakeSuccessController.add( + response.payload['device_name'] as String? ?? 'Unknown', + ); } } else { logger.e('Хэндшейк отклонён: ${response.payload}'); @@ -364,9 +371,9 @@ class Api { await connect(); } - void Function()? _onReconnectCallback; + Future Function()? _onReconnectCallback; - void setReconnectCallback(void Function() callback) { + void setReconnectCallback(Future Function() callback) { _onReconnectCallback = callback; } diff --git a/lib/backend/modules/account.dart b/lib/backend/modules/account.dart index a71307d..f9beb37 100644 --- a/lib/backend/modules/account.dart +++ b/lib/backend/modules/account.dart @@ -493,6 +493,7 @@ class AccountModule { _ensureOnline(); final packet = await _api.sendRequest(Opcode.config, { 'pushToken': pushToken, + 'pushOptions': 131072, }); if (packet.isError) { final msg = messageFromErrorPayload(packet.payload).toUpperCase(); diff --git a/lib/main.dart b/lib/main.dart index 6734b46..91cf87a 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -56,6 +56,8 @@ final fileUploader = FileUploader(api: api, messages: messagesModule); final RouteObserver> appRouteObserver = RouteObserver>(); +bool isOnemeFlavor = false; + Future _loadInitialLocale() async { final prefs = await SharedPreferences.getInstance(); final code = prefs.getString('app_locale'); @@ -98,9 +100,7 @@ void main() async { final digitalIdNativeFuture = AppDigitalIdNative.load(); final packageInfo = await packageInfoFuture; - if (packageInfo.packageName == 'ru.oneme.app') { - await PushService.instance.init(api: api, account: accountModule); - } + isOnemeFlavor = packageInfo.packageName == 'ru.oneme.app'; final initialLocale = await localeFuture; @@ -232,9 +232,10 @@ class KometAppState extends State } catch (_) {} }); - _loginStatusSub = accountModule.loginStatusStream.listen((status) { - if (status == LoginStatus.success) { - PushService.instance.onLoginSuccess(); + _loginStatusSub = accountModule.loginStatusStream.listen((status) async { + if (status == LoginStatus.success && isOnemeFlavor) { + await PushService.instance.init(api: api, account: accountModule); + await PushService.instance.onLoginSuccess(); } });