@@ -229,28 +229,36 @@ - (BOOL)handleOpenURL:(NSURL *)URL sourceApplication:(nullable NSString *)source
229229 }
230230 // Retrieve parameters from local storage
231231 NSMutableDictionary *localParameterDict = [NSMutableDictionary dictionary ];
232- localParameterDict[kEmailLinkSignInEmailKey ] = [GULUserDefaults.standardUserDefaults stringForKey: kEmailLinkSignInEmailKey ];
232+ localParameterDict[kEmailLinkSignInEmailKey ] = [GULUserDefaults.standardUserDefaults
233+ stringForKey: kEmailLinkSignInEmailKey ];
233234 localParameterDict[@" ui_sid" ] = [GULUserDefaults.standardUserDefaults stringForKey: @" ui_sid" ];
234235
235236 // Handling flows
236237 NSString *urlSessionID = urlParameterDict[@" ui_sid" ];
237238 NSString *localSessionID = localParameterDict[@" ui_sid" ];
238239 BOOL sameDevice = urlSessionID && localSessionID && [urlSessionID isEqualToString: localSessionID];
239240
240- if (sameDevice) { // Same device
241- if (urlParameterDict[@" ui_pid" ] != nil ) { // Unverified provider linking
241+ if (sameDevice) {
242+ // Same device
243+ if (urlParameterDict[@" ui_pid" ]) {
244+ // Unverified provider linking
242245 [self handleUnverifiedProviderLinking: urlParameterDict[@" ui_pid" ]
243246 email: localParameterDict[kEmailLinkSignInEmailKey ]];
244- } else if (urlParameterDict[@" ui_auid" ] != nil ) { // Anonymous upgrade
247+ } else if (urlParameterDict[@" ui_auid" ]) {
248+ // Anonymous upgrade
245249 [self handleAnonymousUpgrade: urlParameterDict[@" ui_auid" ]
246250 email: localParameterDict[kEmailLinkSignInEmailKey ]];
247- } else { // Normal email link sign in
251+ } else {
252+ // Normal email link sign in
248253 [self handleEmaiLinkSignIn: localParameterDict[kEmailLinkSignInEmailKey ]];
249254 }
250- } else { // Different device
251- if ([urlParameterDict[@" ui_sd" ] isEqualToString: @" 1" ]) { // Force same device enabled
255+ } else {
256+ // Different device
257+ if ([urlParameterDict[@" ui_sd" ] isEqualToString: @" 1" ]) {
258+ // Force same device enabled
252259 [self handleDifferentDevice ];
253- } else { // Force same device not enabled
260+ } else {
261+ // Force same device not enabled
254262 [self handleConfirmEmail ];
255263 }
256264 }
@@ -261,8 +269,10 @@ - (BOOL)handleOpenURL:(NSURL *)URL sourceApplication:(nullable NSString *)source
261269- (void )handleUnverifiedProviderLinking : (NSString *)providerID
262270 email : (NSString *)email {
263271 if ([providerID isEqualToString: FIRFacebookAuthProviderID]) {
264- NSData *unverifiedProviderCredentialData = [GULUserDefaults.standardUserDefaults objectForKey: kEmailLinkSignInLinkingCredentialKey ];
265- FIRAuthCredential *unverifiedProviderCredential = [NSKeyedUnarchiver unarchiveObjectWithData: unverifiedProviderCredentialData];
272+ NSData *unverifiedProviderCredentialData = [GULUserDefaults.standardUserDefaults
273+ objectForKey: kEmailLinkSignInLinkingCredentialKey ];
274+ FIRAuthCredential *unverifiedProviderCredential =
275+ [NSKeyedUnarchiver unarchiveObjectWithData: unverifiedProviderCredentialData];
266276
267277 FIRAuthCredential *emailLinkCredential =
268278 [FIREmailAuthProvider credentialWithEmail: email link: self .emailLink];
@@ -663,34 +673,36 @@ - (void)handleAccountLinkingForEmail:(NSString *)email
663673 " link below. \n \n For this flow to successfully connect your "
664674 " account with this email, you have to open the link on the same "
665675 " device or browser." , email, providerName, email];
676+ void (^actionHandler)(void ) = ^() {
677+ [self generateURLParametersAndLocalCache: email
678+ linkingProvider: newCredential.provider];
679+
680+ NSData *data = [NSKeyedArchiver archivedDataWithRootObject: newCredential];
681+ [GULUserDefaults.standardUserDefaults setObject: data forKey: kEmailLinkSignInLinkingCredentialKey ];
682+
683+ void (^completion)(NSError * _Nullable error) = ^(NSError * _Nullable error){
684+ if (error) {
685+ [FUIAuthBaseViewController showAlertWithMessage: error.description];
686+ } else {
687+ NSString *signInMessage = [NSString stringWithFormat:
688+ @" A sign-in email with additional instrucitons was sent to %@ . Check your "
689+ " email to complete sign-in." , email];
690+ [FUIAuthBaseViewController
691+ showAlertWithTitle: @" Sign-in email sent"
692+ message: signInMessage
693+ presentingViewController: nil ];
694+ }
695+ };
696+ [self .authUI.auth sendSignInLinkToEmail: email
697+ actionCodeSettings: self .actionCodeSettings
698+ completion: completion];
699+ };
700+
666701 [FUIAuthBaseViewController
667702 showAlertWithTitle: @" Sign in"
668703 message: message
669704 actionTitle: @" Sign in"
670- actionHandler: ^{
671- [self generateURLParametersAndLocalCache: email
672- linkingProvider: newCredential.provider];
673-
674- NSData *data = [NSKeyedArchiver archivedDataWithRootObject: newCredential];
675- [GULUserDefaults.standardUserDefaults setObject: data forKey: kEmailLinkSignInLinkingCredentialKey ];
676-
677- void (^completion)(NSError * _Nullable error) = ^(NSError * _Nullable error){
678- if (error) {
679- [FUIAuthBaseViewController showAlertWithMessage: error.description];
680- } else {
681- NSString *signInMessage = [NSString stringWithFormat:
682- @" A sign-in email with additional instrucitons was sent to %@ . Check your "
683- " email to complete sign-in." , email];
684- [FUIAuthBaseViewController
685- showAlertWithTitle: @" Sign-in email sent"
686- message: signInMessage
687- presentingViewController: nil ];
688- }
689- };
690- [self .authUI.auth sendSignInLinkToEmail: email
691- actionCodeSettings: self .actionCodeSettings
692- completion: completion];
693- }
705+ actionHandler: actionHandler
694706 dismissTitle: nil
695707 dismissHandler: nil
696708 presentingViewController: nil ];
@@ -769,10 +781,8 @@ - (void)generateURLParametersAndLocalCache:(NSString *)email linkingProvider:(NS
769781 NSURLComponents *urlComponents = [NSURLComponents componentsWithString: url.absoluteString];
770782 NSMutableArray <NSURLQueryItem *> *urlQuertItems = [NSMutableArray array ];
771783
772- // kEmailLinkSignInEmailKey
773784 [GULUserDefaults.standardUserDefaults setObject: email forKey: kEmailLinkSignInEmailKey ];
774785
775- // ui_auid
776786 if (self.authUI .auth .currentUser .isAnonymous && self.authUI .shouldAutoUpgradeAnonymousUsers ) {
777787 NSString *auid = self.authUI .auth .currentUser .uid ;
778788
@@ -781,7 +791,6 @@ - (void)generateURLParametersAndLocalCache:(NSString *)email linkingProvider:(NS
781791 [urlQuertItems addObject: anonymousUserIDQueryItem];
782792 }
783793
784- // ui_sid
785794 NSInteger ui_sid = arc4random_uniform (999999999 );
786795 NSString *sidString = [NSString stringWithFormat: @" %ld " , (long )ui_sid];
787796 [GULUserDefaults.standardUserDefaults setObject: sidString forKey: @" ui_sid" ];
@@ -790,7 +799,6 @@ - (void)generateURLParametersAndLocalCache:(NSString *)email linkingProvider:(NS
790799 [NSURLQueryItem queryItemWithName: @" ui_sid" value: sidString];
791800 [urlQuertItems addObject: sessionIDQueryItem];
792801
793- // ui_sd
794802 NSString *sameDeviceValueString;
795803 if (self.forceSameDevice ) {
796804 sameDeviceValueString = @" 1" ;
@@ -800,7 +808,6 @@ - (void)generateURLParametersAndLocalCache:(NSString *)email linkingProvider:(NS
800808 NSURLQueryItem *sameDeviceQueryItem = [NSURLQueryItem queryItemWithName: @" ui_sd" value: sameDeviceValueString];
801809 [urlQuertItems addObject: sameDeviceQueryItem];
802810
803- // ui_pid
804811 if (linkingProvider) {
805812 NSURLQueryItem *providerIDQueryItem = [NSURLQueryItem queryItemWithName: @" ui_pid" value: linkingProvider];
806813 [urlQuertItems addObject: providerIDQueryItem];
0 commit comments