fix: порядок логина при хэндшейке + регистрация FCM-токена (pushOptions)

This commit is contained in:
klockky
2026-06-10 11:35:17 +03:00
parent 3022a207ca
commit 4c0dd48a3a
3 changed files with 22 additions and 13 deletions
+14 -7
View File
@@ -119,14 +119,21 @@ class Api {
if (response.isOk) { if (response.isOk) {
_callsSeed = response.payload['callsSeed'] as int?; _callsSeed = response.payload['callsSeed'] as int?;
_registrationCountries = _parseRegistrationCountries(response.payload); _registrationCountries = _parseRegistrationCountries(response.payload);
_setSessionState(SessionState.online); _sessionState = SessionState.online;
_startPinging(); _startPinging();
logger.i('Сессия онлайн, хэндшейк ок'); logger.i('Сессия онлайн, хэндшейк ок');
_handshakeSuccessController.add(
response.payload['device_name'] as String? ?? 'Unknown',
);
if (_onReconnectCallback != null) { 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 { } else {
logger.e('Хэндшейк отклонён: ${response.payload}'); logger.e('Хэндшейк отклонён: ${response.payload}');
@@ -364,9 +371,9 @@ class Api {
await connect(); await connect();
} }
void Function()? _onReconnectCallback; Future<void> Function()? _onReconnectCallback;
void setReconnectCallback(void Function() callback) { void setReconnectCallback(Future<void> Function() callback) {
_onReconnectCallback = callback; _onReconnectCallback = callback;
} }
+1
View File
@@ -493,6 +493,7 @@ class AccountModule {
_ensureOnline(); _ensureOnline();
final packet = await _api.sendRequest(Opcode.config, <dynamic, dynamic>{ final packet = await _api.sendRequest(Opcode.config, <dynamic, dynamic>{
'pushToken': pushToken, 'pushToken': pushToken,
'pushOptions': 131072,
}); });
if (packet.isError) { if (packet.isError) {
final msg = messageFromErrorPayload(packet.payload).toUpperCase(); final msg = messageFromErrorPayload(packet.payload).toUpperCase();
+7 -6
View File
@@ -56,6 +56,8 @@ final fileUploader = FileUploader(api: api, messages: messagesModule);
final RouteObserver<PageRoute<dynamic>> appRouteObserver = final RouteObserver<PageRoute<dynamic>> appRouteObserver =
RouteObserver<PageRoute<dynamic>>(); RouteObserver<PageRoute<dynamic>>();
bool isOnemeFlavor = false;
Future<Locale> _loadInitialLocale() async { Future<Locale> _loadInitialLocale() async {
final prefs = await SharedPreferences.getInstance(); final prefs = await SharedPreferences.getInstance();
final code = prefs.getString('app_locale'); final code = prefs.getString('app_locale');
@@ -98,9 +100,7 @@ void main() async {
final digitalIdNativeFuture = AppDigitalIdNative.load(); final digitalIdNativeFuture = AppDigitalIdNative.load();
final packageInfo = await packageInfoFuture; final packageInfo = await packageInfoFuture;
if (packageInfo.packageName == 'ru.oneme.app') { isOnemeFlavor = packageInfo.packageName == 'ru.oneme.app';
await PushService.instance.init(api: api, account: accountModule);
}
final initialLocale = await localeFuture; final initialLocale = await localeFuture;
@@ -232,9 +232,10 @@ class KometAppState extends State<KometApp>
} catch (_) {} } catch (_) {}
}); });
_loginStatusSub = accountModule.loginStatusStream.listen((status) { _loginStatusSub = accountModule.loginStatusStream.listen((status) async {
if (status == LoginStatus.success) { if (status == LoginStatus.success && isOnemeFlavor) {
PushService.instance.onLoginSuccess(); await PushService.instance.init(api: api, account: accountModule);
await PushService.instance.onLoginSuccess();
} }
}); });