Как обновить и поделиться токеном доступа из основного и фонового изоляторов

Мое приложение flutter использует токены обновления и доступа для проверки запросов к веб-API C #. Это прекрасно работает. Однако, как только я представил android_alarm_manager для фоновой синхронизации данных (с использованием изолятов), я обнаружил, что мои токены обновления через некоторое время становятся недействительными (я храню свои токены обновления в локальном хранилище).

Это связано с тем, что несколько изоляторов одновременно запрашивают новый токен доступа (поскольку я не могу заблокировать метод из-за того, что изоляторы не разделяют память). Теперь я не уверен, как лучше всего синхронизировать токены.

Я думал, что каждый изолят может иметь свой собственный токен обновления и доступа, но это не кажется хорошей идеей, поскольку мне придется хранить имя пользователя и пароль локально. Еще одна идея, которая у меня была, заключалась в том, чтобы настроить некоторую стратегию синхронизации между изолятами с использованием изолированной связи или локального хранилища, но это кажется излишним.

Спасибо


person Lucien Theron    schedule 23.05.2019    source источник
comment
Я думаю, вам следует найти способ обновить токен только из одного изолята, а затем поделиться результатом. Таким образом можно избежать старых недействительных токенов   -  person Manuel Munoz    schedule 17.07.2019
comment
Как вы решили эту проблему?   -  person Suragch    schedule 09.06.2020


Ответы (1)


Взгляните на пример Flutter Geofencing:

Репо: https://github.com/bkonyi/FlutterGeofencing/tree/master/lib/src Статья: https://medium.com/flutter/executing-dart-in-the-background-with-flutter-plugins-and-geofencing-2b3e40a1a124

Он использует SendPorts для связи между изолятами, что похоже на то, что вам нужно:

https://api.flutter.dev/flutter/dart-ui/IsolateNameServer-class.html

Затем вы можете обновить токен в любом изоляте и отправить его через SendPort всем изолятам, чтобы синхронизировать его.

person athor    schedule 16.07.2019
comment
Спасибо @athor. Но поделиться токеном - не проблема. Дело в том, что разные изоляты могут обновляться одновременно (запрос во внешнем интерфейсе и в фоновой службе одновременно). Это приведет к тому, что один или другой получит старый недопустимый токен. Где один из них будет последним и действительным, но другой продолжит (думая, что он обновлен) свой запрос. Затем 401 неавторизованный, в то время как все, что ему нужно, это заблокировать и дождаться, пока другой изолятор поделится правильным токеном. Это неприятная ситуация. - person Lucien Theron; 16.07.2019