TF-439 Implement handle register new token when expired
This commit is contained in:
@@ -16,6 +16,7 @@ class FirebaseSubscriptionSetMethod extends SetMethodNoNeedAccountId<FirebaseSub
|
|||||||
@override
|
@override
|
||||||
Set<CapabilityIdentifier> get requiredCapabilities => {
|
Set<CapabilityIdentifier> get requiredCapabilities => {
|
||||||
CapabilityIdentifier.jmapCore,
|
CapabilityIdentifier.jmapCore,
|
||||||
|
CapabilityIdentifier.jmapMail,
|
||||||
FirebaseCapability.fcmIdentifier
|
FirebaseCapability.fcmIdentifier
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -48,6 +48,7 @@ void main() {
|
|||||||
data: {
|
data: {
|
||||||
"using": [
|
"using": [
|
||||||
"urn:ietf:params:jmap:core",
|
"urn:ietf:params:jmap:core",
|
||||||
|
"urn:ietf:params:jmap:mail",
|
||||||
"com:linagora:params:jmap:firebase:push"
|
"com:linagora:params:jmap:firebase:push"
|
||||||
],
|
],
|
||||||
"methodCalls": [
|
"methodCalls": [
|
||||||
@@ -69,7 +70,7 @@ void main() {
|
|||||||
headers: {
|
headers: {
|
||||||
"accept": "application/json;jmapVersion=rfc-8621",
|
"accept": "application/json;jmapVersion=rfc-8621",
|
||||||
"content-type": "application/json; charset=utf-8",
|
"content-type": "application/json; charset=utf-8",
|
||||||
"content-length": 225
|
"content-length": 253
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import 'package:jmap_dart_client/jmap/core/state.dart' as jmap;
|
|||||||
import 'package:model/fcm/fcm_token_dto.dart';
|
import 'package:model/fcm/fcm_token_dto.dart';
|
||||||
import 'package:tmail_ui_user/features/push_notification/data/datasource/fcm_datasource.dart';
|
import 'package:tmail_ui_user/features/push_notification/data/datasource/fcm_datasource.dart';
|
||||||
import 'package:tmail_ui_user/features/push_notification/data/network/fcm_api.dart';
|
import 'package:tmail_ui_user/features/push_notification/data/network/fcm_api.dart';
|
||||||
|
import 'package:tmail_ui_user/features/push_notification/domain/model/register_new_token_request.dart';
|
||||||
import 'package:tmail_ui_user/main/exceptions/exception_thrower.dart';
|
import 'package:tmail_ui_user/main/exceptions/exception_thrower.dart';
|
||||||
|
|
||||||
class FcmDatasourceImpl extends FCMDatasource {
|
class FcmDatasourceImpl extends FCMDatasource {
|
||||||
@@ -56,4 +57,13 @@ class FcmDatasourceImpl extends FCMDatasource {
|
|||||||
Future<bool> storeStateToRefresh(TypeName typeName, jmap.State newState) {
|
Future<bool> storeStateToRefresh(TypeName typeName, jmap.State newState) {
|
||||||
throw UnimplementedError();
|
throw UnimplementedError();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<FirebaseSubscription> registerNewToken(RegisterNewTokenRequest newTokenRequest) {
|
||||||
|
return Future.sync(() async {
|
||||||
|
return await _fcmApi.registerNewToken(newTokenRequest);
|
||||||
|
}).catchError((error) {
|
||||||
|
_exceptionThrower.throwException(error);
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -4,6 +4,7 @@ import 'package:jmap_dart_client/jmap/core/state.dart' as jmap;
|
|||||||
import 'package:model/fcm/fcm_token_dto.dart';
|
import 'package:model/fcm/fcm_token_dto.dart';
|
||||||
import 'package:tmail_ui_user/features/push_notification/data/datasource/fcm_datasource.dart';
|
import 'package:tmail_ui_user/features/push_notification/data/datasource/fcm_datasource.dart';
|
||||||
import 'package:tmail_ui_user/features/push_notification/data/local/fcm_cache_manager.dart';
|
import 'package:tmail_ui_user/features/push_notification/data/local/fcm_cache_manager.dart';
|
||||||
|
import 'package:tmail_ui_user/features/push_notification/domain/model/register_new_token_request.dart';
|
||||||
import 'package:tmail_ui_user/main/exceptions/exception_thrower.dart';
|
import 'package:tmail_ui_user/main/exceptions/exception_thrower.dart';
|
||||||
|
|
||||||
class HiveFCMDatasourceImpl extends FCMDatasource {
|
class HiveFCMDatasourceImpl extends FCMDatasource {
|
||||||
@@ -80,4 +81,9 @@ class HiveFCMDatasourceImpl extends FCMDatasource {
|
|||||||
Future<FirebaseSubscription> getFirebaseSubscriptionByDeviceId(String deviceId) {
|
Future<FirebaseSubscription> getFirebaseSubscriptionByDeviceId(String deviceId) {
|
||||||
throw UnimplementedError();
|
throw UnimplementedError();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<FirebaseSubscription> registerNewToken(RegisterNewTokenRequest registerNewTokenRequest) {
|
||||||
|
throw UnimplementedError();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -1,10 +1,13 @@
|
|||||||
|
|
||||||
|
import 'package:fcm/method/set/firebase_subscription_set_method.dart';
|
||||||
|
import 'package:fcm/method/set/firebase_subscription_set_response.dart';
|
||||||
import 'package:fcm/method/get/firebase_subscription_get_method.dart';
|
import 'package:fcm/method/get/firebase_subscription_get_method.dart';
|
||||||
import 'package:fcm/method/get/firebase_subscription_get_response.dart';
|
import 'package:fcm/method/get/firebase_subscription_get_response.dart';
|
||||||
import 'package:fcm/model/firebase_subscription.dart';
|
import 'package:fcm/model/firebase_subscription.dart';
|
||||||
import 'package:jmap_dart_client/http/http_client.dart';
|
import 'package:jmap_dart_client/http/http_client.dart';
|
||||||
import 'package:jmap_dart_client/jmap/jmap_request.dart';
|
import 'package:jmap_dart_client/jmap/jmap_request.dart';
|
||||||
import 'package:tmail_ui_user/features/push_notification/domain/exceptions/fcm_exception.dart';
|
import 'package:tmail_ui_user/features/push_notification/domain/exceptions/fcm_exception.dart';
|
||||||
|
import 'package:tmail_ui_user/features/push_notification/domain/model/register_new_token_request.dart';
|
||||||
|
|
||||||
class FcmApi {
|
class FcmApi {
|
||||||
|
|
||||||
@@ -37,4 +40,26 @@ class FcmApi {
|
|||||||
throw NotFoundFirebaseSubscriptionException();
|
throw NotFoundFirebaseSubscriptionException();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Future<FirebaseSubscription> registerNewToken(RegisterNewTokenRequest newTokenRequest) async {
|
||||||
|
final processingInvocation = ProcessingInvocation();
|
||||||
|
final requestBuilder = JmapRequestBuilder(_httpClient, processingInvocation);
|
||||||
|
|
||||||
|
final firebaseSubscriptionSetMethod = FirebaseSubscriptionSetMethod()
|
||||||
|
..addCreate(
|
||||||
|
newTokenRequest.createRequestId,
|
||||||
|
newTokenRequest.firebaseSubscription
|
||||||
|
);
|
||||||
|
final firebaseSubscriptionSetInvocation = requestBuilder.invocation(firebaseSubscriptionSetMethod);
|
||||||
|
final response = await (requestBuilder
|
||||||
|
..usings(firebaseSubscriptionSetMethod.requiredCapabilities))
|
||||||
|
.build()
|
||||||
|
.execute();
|
||||||
|
|
||||||
|
final firebaseSubscriptionSetResponse = response.parse<FirebaseSubscriptionSetResponse>(
|
||||||
|
firebaseSubscriptionSetInvocation.methodCallId,
|
||||||
|
FirebaseSubscriptionSetResponse.deserialize);
|
||||||
|
|
||||||
|
return firebaseSubscriptionSetResponse!.created![newTokenRequest.createRequestId]!;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -5,6 +5,7 @@ import 'package:jmap_dart_client/jmap/account_id.dart';
|
|||||||
import 'package:jmap_dart_client/jmap/core/properties/properties.dart';
|
import 'package:jmap_dart_client/jmap/core/properties/properties.dart';
|
||||||
import 'package:model/fcm/fcm_token_dto.dart';
|
import 'package:model/fcm/fcm_token_dto.dart';
|
||||||
import 'package:tmail_ui_user/features/push_notification/data/datasource/fcm_datasource.dart';
|
import 'package:tmail_ui_user/features/push_notification/data/datasource/fcm_datasource.dart';
|
||||||
|
import 'package:tmail_ui_user/features/push_notification/domain/model/register_new_token_request.dart';
|
||||||
import 'package:tmail_ui_user/features/push_notification/domain/repository/fcm_repository.dart';
|
import 'package:tmail_ui_user/features/push_notification/domain/repository/fcm_repository.dart';
|
||||||
import 'package:tmail_ui_user/features/thread/data/datasource/thread_datasource.dart';
|
import 'package:tmail_ui_user/features/thread/data/datasource/thread_datasource.dart';
|
||||||
import 'package:tmail_ui_user/features/thread/data/model/email_change_response.dart';
|
import 'package:tmail_ui_user/features/thread/data/model/email_change_response.dart';
|
||||||
@@ -98,4 +99,9 @@ class FCMRepositoryImpl extends FCMRepository {
|
|||||||
Future<FirebaseSubscription> getFirebaseSubscriptionByDeviceId(String deviceId) {
|
Future<FirebaseSubscription> getFirebaseSubscriptionByDeviceId(String deviceId) {
|
||||||
return _fcmDatasource[DataSourceType.network]!.getFirebaseSubscriptionByDeviceId(deviceId);
|
return _fcmDatasource[DataSourceType.network]!.getFirebaseSubscriptionByDeviceId(deviceId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<FirebaseSubscription> registerNewToken(RegisterNewTokenRequest newTokenRequest) {
|
||||||
|
return _fcmDatasource[DataSourceType.network]!.registerNewToken(newTokenRequest);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
|
||||||
|
import 'package:core/presentation/state/failure.dart';
|
||||||
|
import 'package:core/presentation/state/success.dart';
|
||||||
|
import 'package:fcm/model/firebase_subscription.dart';
|
||||||
|
|
||||||
|
class RegisterNewTokenLoading extends UIState {}
|
||||||
|
|
||||||
|
class RegisterNewTokenSuccess extends UIState {
|
||||||
|
|
||||||
|
final FirebaseSubscription firebaseSubscription;
|
||||||
|
|
||||||
|
RegisterNewTokenSuccess(this.firebaseSubscription);
|
||||||
|
|
||||||
|
@override
|
||||||
|
List<Object> get props => [firebaseSubscription];
|
||||||
|
}
|
||||||
|
|
||||||
|
class RegisterNewTokenFailure extends FeatureFailure {
|
||||||
|
final dynamic exception;
|
||||||
|
|
||||||
|
RegisterNewTokenFailure(this.exception);
|
||||||
|
|
||||||
|
@override
|
||||||
|
List<Object> get props => [exception];
|
||||||
|
}
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
|
||||||
|
import 'package:core/presentation/state/failure.dart';
|
||||||
|
import 'package:core/presentation/state/success.dart';
|
||||||
|
import 'package:dartz/dartz.dart';
|
||||||
|
import 'package:tmail_ui_user/features/push_notification/domain/model/register_new_token_request.dart';
|
||||||
|
import 'package:tmail_ui_user/features/push_notification/domain/repository/fcm_repository.dart';
|
||||||
|
import 'package:tmail_ui_user/features/push_notification/domain/state/register_new_token_state.dart';
|
||||||
|
|
||||||
|
class RegisterNewTokenInteractor {
|
||||||
|
|
||||||
|
final FCMRepository _fcmRepository;
|
||||||
|
|
||||||
|
RegisterNewTokenInteractor(this._fcmRepository);
|
||||||
|
|
||||||
|
Stream<Either<Failure, Success>> execute(RegisterNewTokenRequest newTokenRequest) async* {
|
||||||
|
try {
|
||||||
|
yield Right<Failure, Success>(RegisterNewTokenLoading());
|
||||||
|
final firebaseSubscription = await _fcmRepository.registerNewToken(newTokenRequest);
|
||||||
|
yield Right<Failure, Success>(RegisterNewTokenSuccess(firebaseSubscription));
|
||||||
|
} catch (e) {
|
||||||
|
yield Left<Failure, Success>(RegisterNewTokenFailure(e));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -15,6 +15,7 @@ import 'package:tmail_ui_user/features/push_notification/domain/usecases/get_ema
|
|||||||
import 'package:tmail_ui_user/features/push_notification/domain/usecases/get_fcm_token_cache_interactor.dart';
|
import 'package:tmail_ui_user/features/push_notification/domain/usecases/get_fcm_token_cache_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/push_notification/domain/usecases/get_firebase_subscription_interactor.dart';
|
import 'package:tmail_ui_user/features/push_notification/domain/usecases/get_firebase_subscription_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/push_notification/domain/usecases/get_stored_email_delivery_state_interactor.dart';
|
import 'package:tmail_ui_user/features/push_notification/domain/usecases/get_stored_email_delivery_state_interactor.dart';
|
||||||
|
import 'package:tmail_ui_user/features/push_notification/domain/usecases/register_new_token_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/push_notification/domain/usecases/save_fcm_token_cache_interactor.dart';
|
import 'package:tmail_ui_user/features/push_notification/domain/usecases/save_fcm_token_cache_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/push_notification/domain/usecases/store_device_id_interactor.dart';
|
import 'package:tmail_ui_user/features/push_notification/domain/usecases/store_device_id_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/push_notification/domain/usecases/store_email_delivery_state_interactor.dart';
|
import 'package:tmail_ui_user/features/push_notification/domain/usecases/store_email_delivery_state_interactor.dart';
|
||||||
@@ -64,6 +65,7 @@ class FcmInteractorBindings extends InteractorsBindings {
|
|||||||
Get.lazyPut(() => DeleteEmailStateToRefreshInteractor(Get.find<FCMRepositoryImpl>()));
|
Get.lazyPut(() => DeleteEmailStateToRefreshInteractor(Get.find<FCMRepositoryImpl>()));
|
||||||
Get.lazyPut(() => StoreDeviceIdInteractor(Get.find<FCMRepositoryImpl>()));
|
Get.lazyPut(() => StoreDeviceIdInteractor(Get.find<FCMRepositoryImpl>()));
|
||||||
Get.lazyPut(() => GetFirebaseSubscriptionInteractor(Get.find<FCMRepositoryImpl>()));
|
Get.lazyPut(() => GetFirebaseSubscriptionInteractor(Get.find<FCMRepositoryImpl>()));
|
||||||
|
Get.lazyPut(() => RegisterNewTokenInteractor(Get.find<FCMRepositoryImpl>()));
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
|
|||||||
@@ -1,14 +1,24 @@
|
|||||||
|
|
||||||
|
import 'package:core/domain/extensions/datetime_extension.dart';
|
||||||
import 'package:core/presentation/state/failure.dart';
|
import 'package:core/presentation/state/failure.dart';
|
||||||
import 'package:core/presentation/state/success.dart';
|
import 'package:core/presentation/state/success.dart';
|
||||||
import 'package:core/utils/app_logger.dart';
|
import 'package:core/utils/app_logger.dart';
|
||||||
import 'package:dartz/dartz.dart';
|
import 'package:dartz/dartz.dart';
|
||||||
|
import 'package:fcm/model/device_client_id.dart';
|
||||||
|
import 'package:fcm/model/firebase_expired_time.dart';
|
||||||
|
import 'package:fcm/model/firebase_subscription.dart';
|
||||||
import 'package:fcm/model/firebase_token.dart';
|
import 'package:fcm/model/firebase_token.dart';
|
||||||
|
import 'package:fcm/model/type_name.dart';
|
||||||
|
import 'package:jmap_dart_client/jmap/core/id.dart';
|
||||||
|
import 'package:tmail_ui_user/features/manage_account/presentation/extensions/datetime_extension.dart';
|
||||||
|
import 'package:tmail_ui_user/features/push_notification/domain/model/register_new_token_request.dart';
|
||||||
import 'package:tmail_ui_user/features/push_notification/domain/state/get_firebase_subscription_state.dart';
|
import 'package:tmail_ui_user/features/push_notification/domain/state/get_firebase_subscription_state.dart';
|
||||||
import 'package:tmail_ui_user/features/push_notification/domain/usecases/get_firebase_subscription_interactor.dart';
|
import 'package:tmail_ui_user/features/push_notification/domain/usecases/get_firebase_subscription_interactor.dart';
|
||||||
|
import 'package:tmail_ui_user/features/push_notification/domain/usecases/register_new_token_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/push_notification/domain/usecases/store_device_id_interactor.dart';
|
import 'package:tmail_ui_user/features/push_notification/domain/usecases/store_device_id_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/push_notification/presentation/utils/fcm_utils.dart';
|
import 'package:tmail_ui_user/features/push_notification/presentation/utils/fcm_utils.dart';
|
||||||
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
|
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
|
||||||
|
import 'package:uuid/uuid.dart';
|
||||||
|
|
||||||
class FcmTokenHandler {
|
class FcmTokenHandler {
|
||||||
|
|
||||||
@@ -20,14 +30,16 @@ class FcmTokenHandler {
|
|||||||
|
|
||||||
StoreDeviceIdInteractor? _storeDeviceIdInteractor;
|
StoreDeviceIdInteractor? _storeDeviceIdInteractor;
|
||||||
GetFirebaseSubscriptionInteractor? _getFirebaseSubscriptionInteractor;
|
GetFirebaseSubscriptionInteractor? _getFirebaseSubscriptionInteractor;
|
||||||
|
RegisterNewTokenInteractor? _registerNewTokenInteractor;
|
||||||
|
|
||||||
FirebaseToken? _fcmToken;
|
FirebaseToken? _fcmToken;
|
||||||
String? _deviceId;
|
DeviceClientId? _deviceClientId;
|
||||||
|
|
||||||
void initialize() {
|
void initialize() {
|
||||||
try {
|
try {
|
||||||
_storeDeviceIdInteractor = getBinding<StoreDeviceIdInteractor>();
|
_storeDeviceIdInteractor = getBinding<StoreDeviceIdInteractor>();
|
||||||
_getFirebaseSubscriptionInteractor = getBinding<GetFirebaseSubscriptionInteractor>();
|
_getFirebaseSubscriptionInteractor = getBinding<GetFirebaseSubscriptionInteractor>();
|
||||||
|
_registerNewTokenInteractor = getBinding<RegisterNewTokenInteractor>();
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
logError('FcmTokenHandler::initialize(): ${e.toString()}');
|
logError('FcmTokenHandler::initialize(): ${e.toString()}');
|
||||||
}
|
}
|
||||||
@@ -37,10 +49,11 @@ class FcmTokenHandler {
|
|||||||
log('FcmTokenHandler::handle():token: $token');
|
log('FcmTokenHandler::handle():token: $token');
|
||||||
if (token != null) {
|
if (token != null) {
|
||||||
_fcmToken = FirebaseToken(token);
|
_fcmToken = FirebaseToken(token);
|
||||||
_deviceId = FcmUtils.instance.hashTokenToDeviceId(token);
|
final deviceId = FcmUtils.instance.hashTokenToDeviceId(token);
|
||||||
|
_deviceClientId = DeviceClientId(deviceId);
|
||||||
log('FcmTokenHandler::handle(): fcmToken: $_fcmToken');
|
log('FcmTokenHandler::handle(): fcmToken: $_fcmToken');
|
||||||
log('FcmTokenHandler::handle(): deviceId: $_deviceId');
|
log('FcmTokenHandler::handle(): deviceId: $deviceId');
|
||||||
_getFcmTokenFromBackend(_deviceId!);
|
_getFcmTokenFromBackend(deviceId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -80,8 +93,54 @@ class FcmTokenHandler {
|
|||||||
void _handleSuccessViewState(Success success) {
|
void _handleSuccessViewState(Success success) {
|
||||||
log('FcmTokenHandler::_handleSuccessViewState(): $success');
|
log('FcmTokenHandler::_handleSuccessViewState(): $success');
|
||||||
if (success is GetFirebaseSubscriptionSuccess) {
|
if (success is GetFirebaseSubscriptionSuccess) {
|
||||||
final token = success.firebaseSubscription.token;
|
_fcmToken = success.firebaseSubscription.token;
|
||||||
log('FcmTokenHandler::_handleSuccessViewState():token: $token');
|
_deviceClientId = success.firebaseSubscription.deviceClientId;
|
||||||
|
final expireTime = success.firebaseSubscription.expires;
|
||||||
|
log('FcmTokenHandler::_handleSuccessViewState():_fcmToken: $_fcmToken');
|
||||||
|
if (_isTokenExpired(expireTime)) {
|
||||||
|
_handleWhenTokenExpired(_fcmToken!, _deviceClientId!);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool _isTokenExpired(FirebaseExpiredTime? expireTime) {
|
||||||
|
log('FcmTokenHandler::_isTokenExpired():expireTime: $expireTime');
|
||||||
|
if (expireTime != null) {
|
||||||
|
final expireTimeLocal = expireTime.value.value.toLocal();
|
||||||
|
final currentTime = DateTime.now();
|
||||||
|
|
||||||
|
log('FcmTokenHandler::_isTokenExpired():expireTimeLocal: $expireTimeLocal');
|
||||||
|
log('FcmTokenHandler::_isTokenExpired():currentTime: $currentTime');
|
||||||
|
|
||||||
|
return currentTime.isBefore(expireTimeLocal) &&
|
||||||
|
expireTimeLocal.daysBetween(currentTime) == 3;
|
||||||
|
} else {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void _handleWhenTokenExpired(FirebaseToken fcmToken, DeviceClientId deviceClientId) {
|
||||||
|
final generateCreationId = Id(const Uuid().v4());
|
||||||
|
final newExpireTime = DateTime.now().add(const Duration(days: 7));
|
||||||
|
|
||||||
|
log('FcmTokenHandler::_handleSuccessViewState():newExpireTime: $newExpireTime');
|
||||||
|
final firebaseSubscription = FirebaseSubscription(
|
||||||
|
token: fcmToken,
|
||||||
|
expires: FirebaseExpiredTime(newExpireTime.toUTCDate()!),
|
||||||
|
deviceClientId: deviceClientId,
|
||||||
|
types: [TypeName.emailType, TypeName.mailboxType, TypeName.emailDelivery]
|
||||||
|
);
|
||||||
|
|
||||||
|
log('FcmTokenHandler::_handleSuccessViewState():firebaseSubscription: $firebaseSubscription');
|
||||||
|
_registerNewTokenAction(RegisterNewTokenRequest(
|
||||||
|
generateCreationId,
|
||||||
|
firebaseSubscription
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
void _registerNewTokenAction(RegisterNewTokenRequest newTokenRequest) {
|
||||||
|
if (_registerNewTokenInteractor != null) {
|
||||||
|
_consumeState(_registerNewTokenInteractor!.execute(newTokenRequest));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user