fix: порядок логина при хэндшейке + регистрация FCM-токена (pushOptions)
This commit is contained in:
+14
-7
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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
@@ -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();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user