Skip to content

Commit dc3b311

Browse files
authored
Merge pull request #339 from firebase/callback
Adding temporary workaround to call FirebaseAuth completion block in …
2 parents 51ae68f + 3b4e669 commit dc3b311

File tree

3 files changed

+54
-38
lines changed

3 files changed

+54
-38
lines changed

FirebasePhoneAuthUI/FUIPhoneEntryViewController.m

Lines changed: 27 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -168,28 +168,36 @@ - (void)onNext:(NSString *)phoneNumber {
168168
[provider verifyPhoneNumber:phoneNumberWithCountryCode
169169
UIDelegate:self
170170
completion:^(NSString *_Nullable verificationID, NSError *_Nullable error) {
171+
// Temporary fix to guarantee execution of the completion block on the main thread.
172+
// TODO: Remove temporary workaround when the issue is fixed in FirebaseAuth.
173+
dispatch_block_t completionBlock = ^() {
174+
[self decrementActivity];
175+
self.navigationItem.rightBarButtonItem.enabled = YES;
176+
177+
if (error) {
178+
[_phoneNumberField becomeFirstResponder];
179+
180+
UIAlertController *alertController = [FUIPhoneAuth alertControllerForError:error
181+
actionHandler:nil];
182+
[self presentViewController:alertController animated:YES completion:nil];
183+
184+
FUIPhoneAuth *delegate = [self.authUI providerWithID:FIRPhoneAuthProviderID];
185+
[delegate callbackWithCredential:nil error:error result:nil];
186+
return;
187+
}
171188

172-
[self decrementActivity];
173-
self.navigationItem.rightBarButtonItem.enabled = YES;
174-
175-
if (error) {
176-
[_phoneNumberField becomeFirstResponder];
189+
UIViewController *controller =
190+
[[FUIPhoneVerificationViewController alloc] initWithAuthUI:self.authUI
191+
verificationID:verificationID
192+
phoneNumber:phoneNumberWithCountryCode];
177193

178-
UIAlertController *alertController = [FUIPhoneAuth alertControllerForError:error
179-
actionHandler:nil];
180-
[self presentViewController:alertController animated:YES completion:nil];
181-
182-
FUIPhoneAuth *delegate = [self.authUI providerWithID:FIRPhoneAuthProviderID];
183-
[delegate callbackWithCredential:nil error:error result:nil];
184-
return;
194+
[self pushViewController:controller];
195+
};
196+
if ([NSThread isMainThread]) {
197+
completionBlock();
198+
} else {
199+
dispatch_sync(dispatch_get_main_queue(), completionBlock);
185200
}
186-
187-
UIViewController *controller =
188-
[[FUIPhoneVerificationViewController alloc] initWithAuthUI:self.authUI
189-
verificationID:verificationID
190-
phoneNumber:phoneNumberWithCountryCode];
191-
192-
[self pushViewController:controller];
193201
}];
194202
}
195203

FirebasePhoneAuthUI/FUIPhoneVerificationViewController.m

Lines changed: 26 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -138,25 +138,33 @@ - (IBAction)onResendCode:(id)sender {
138138
[provider verifyPhoneNumber:_phoneNumber
139139
UIDelegate:self
140140
completion:^(NSString *_Nullable verificationID, NSError *_Nullable error) {
141-
142-
[self decrementActivity];
143-
_verificationID = verificationID;
144-
[_codeField becomeFirstResponder];
145-
146-
if (error) {
147-
UIAlertController *alertController = [FUIPhoneAuth alertControllerForError:error
148-
actionHandler:^{
149-
[_codeField clearCodeInput];
150-
[_codeField becomeFirstResponder];
151-
}];
152-
[self presentViewController:alertController animated:YES completion:nil];
153-
return;
141+
// Temporary fix to guarantee execution of the completion block on the main thread.
142+
// TODO: Remove temporary workaround when the issue is fixed in FirebaseAuth.
143+
dispatch_block_t completionBlock = ^() {
144+
[self decrementActivity];
145+
_verificationID = verificationID;
146+
[_codeField becomeFirstResponder];
147+
148+
if (error) {
149+
UIAlertController *alertController = [FUIPhoneAuth alertControllerForError:error
150+
actionHandler:^{
151+
[_codeField clearCodeInput];
152+
[_codeField becomeFirstResponder];
153+
}];
154+
[self presentViewController:alertController animated:YES completion:nil];
155+
return;
156+
}
157+
158+
NSString *resultMessage =
159+
[NSString stringWithFormat:FUIPhoneAuthLocalizedString(kPAStr_ResendCodeResult),
160+
_phoneNumber];
161+
[self showAlertWithMessage:resultMessage];
162+
};
163+
if ([NSThread isMainThread]) {
164+
completionBlock();
165+
} else {
166+
dispatch_sync(dispatch_get_main_queue(), completionBlock);
154167
}
155-
156-
NSString *resultMessage =
157-
[NSString stringWithFormat:FUIPhoneAuthLocalizedString(kPAStr_ResendCodeResult),
158-
_phoneNumber];
159-
[self showAlertWithMessage:resultMessage];
160168
}];
161169
}
162170
- (IBAction)onPhoneNumberSelected:(id)sender {

FirebaseUI_dev_auth.podspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ Pod::Spec.new do |s|
2020
'FirebaseAuthUI/**/*.xib']
2121
}
2222
authbase.dependency 'Firebase/Analytics'
23-
authbase.dependency 'FirebaseAuth'
23+
authbase.dependency 'FirebaseAuth', '~> 4.2'
2424
end
2525

2626
end

0 commit comments

Comments
 (0)