From ab6239ddf5cb14211b76bced04ec52203919a57a Mon Sep 17 00:00:00 2001 From: Russell Wheatley Date: Tue, 15 Mar 2022 16:27:11 +0000 Subject: [PATCH] fix(firebase_auth): Update APN token once auth plugin has been initialized on `iOS`. (#8201) Co-authored-by: Mike Diarmid --- .../ios/Classes/FLTFirebaseAuthPlugin.m | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/packages/firebase_auth/firebase_auth/ios/Classes/FLTFirebaseAuthPlugin.m b/packages/firebase_auth/firebase_auth/ios/Classes/FLTFirebaseAuthPlugin.m index 4c57d40e590d..7c5360d518a9 100644 --- a/packages/firebase_auth/firebase_auth/ios/Classes/FLTFirebaseAuthPlugin.m +++ b/packages/firebase_auth/firebase_auth/ios/Classes/FLTFirebaseAuthPlugin.m @@ -59,6 +59,7 @@ @implementation FLTFirebaseAuthPlugin { NSObject *_binaryMessenger; NSMutableDictionary *_eventChannels; NSMutableDictionary *> *_streamHandlers; + NSData *_apnsToken; } #pragma mark - FlutterPlugin @@ -155,6 +156,8 @@ - (void)handleMethodCall:(FlutterMethodCall *)call result:(FlutterResult)flutter FLTFirebaseMethodCallResult *methodCallResult = [FLTFirebaseMethodCallResult createWithSuccess:successBlock andErrorBlock:errorBlock]; + [self ensureAPNSTokenSetting]; + if ([@"Auth#registerIdTokenListener" isEqualToString:call.method]) { [self registerIdTokenListener:call.arguments withMethodCallResult:methodCallResult]; } else if ([@"Auth#registerAuthStateListener" isEqualToString:call.method]) { @@ -242,7 +245,7 @@ - (BOOL)application:(UIApplication *)application - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { - [[FIRAuth auth] setAPNSToken:deviceToken type:FIRAuthAPNSTokenTypeUnknown]; + _apnsToken = deviceToken; } - (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary *)options { @@ -1285,4 +1288,16 @@ + (NSMutableDictionary *)getNSDictionaryFromUser:(FIRUser *)user { return userData; } +- (void)ensureAPNSTokenSetting { +#if !TARGET_OS_OSX + FIRApp *defaultApp = [FIRApp defaultApp]; + if (defaultApp) { + if ([FIRAuth auth].APNSToken == nil && _apnsToken != nil) { + [[FIRAuth auth] setAPNSToken:_apnsToken type:FIRAuthAPNSTokenTypeUnknown]; + _apnsToken = nil; + } + } +#endif +} + @end