Skip to content

Commit f841497

Browse files
authored
Migrate Auth from UIWebView to WKWebView (#3549)
1 parent 23e4a63 commit f841497

File tree

8 files changed

+43
-30
lines changed

8 files changed

+43
-30
lines changed

Firebase/Auth/Source/Public/FIRAuth.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -420,10 +420,10 @@ DEPRECATED_MSG_ATTRIBUTE("Please use fetchSignInMethodsForEmail:completion: for
420420
<li>@c FIRAuthErrorCodeUserDisabled - Indicates the user's account is disabled.
421421
</li>
422422
<li>@c FIRAuthErrorCodeWebNetworkRequestFailed - Indicates that a network request within a
423-
SFSafariViewController or UIWebview failed.
423+
SFSafariViewController or WKWebView failed.
424424
</li>
425425
<li>@c FIRAuthErrorCodeWebInternalError - Indicates that an internal error occurred within a
426-
SFSafariViewController or UIWebview.
426+
SFSafariViewController or WKWebView.
427427
</li>
428428
<li>@c FIRAuthErrorCodeWebSignInUserInteractionFailure - Indicates a general failure during
429429
a web sign-in flow.

Firebase/Auth/Source/Public/FIRAuthErrors.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -299,11 +299,11 @@ typedef NS_ENUM(NSInteger, FIRAuthErrorCode) {
299299
*/
300300
FIRAuthErrorCodeInvalidClientID = 17060,
301301

302-
/** Indicates that a network request within a SFSafariViewController or UIWebview failed.
302+
/** Indicates that a network request within a SFSafariViewController or WKWebView failed.
303303
*/
304304
FIRAuthErrorCodeWebNetworkRequestFailed = 17061,
305305

306-
/** Indicates that an internal error occurred within a SFSafariViewController or UIWebview.
306+
/** Indicates that an internal error occurred within a SFSafariViewController or WKWebView.
307307
*/
308308
FIRAuthErrorCodeWebInternalError = 17062,
309309

Firebase/Auth/Source/Utilities/FIRAuthErrorUtils.m

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -52,13 +52,13 @@
5252

5353
/** @var kURLResponseErrorCodeNetworkRequestFailed
5454
@brief Error code that indicates that a network request within the SFSafariViewController or
55-
UIWebView failed.
55+
WKWebView failed.
5656
*/
5757
static NSString *const kURLResponseErrorCodeNetworkRequestFailed = @"auth/network-request-failed";
5858

5959
/** @var kURLResponseErrorCodeInternalError
6060
@brief Error code that indicates that an internal error occurred within the
61-
SFSafariViewController or UIWebView failed.
61+
SFSafariViewController or WKWebView failed.
6262
*/
6363
static NSString *const kURLResponseErrorCodeInternalError = @"auth/internal-error";
6464

@@ -412,7 +412,7 @@
412412
@brief Message for @c FIRAuthErrorCodeWebInternalError error code.
413413
*/
414414
static NSString *const kFIRAuthErrorMessageWebInternalError = @"An internal error has occurred "
415-
"within the SFSafariViewController or UIWebView.";
415+
"within the SFSafariViewController or WKWebView.";
416416

417417
/** @var kFIRAuthErrorMessageAppVerificationUserInteractionFailure
418418
@brief Message for @c FIRAuthErrorCodeInvalidClientID error code.

Firebase/Auth/Source/Utilities/FIRAuthInternalErrors.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -351,17 +351,17 @@ typedef NS_ENUM(NSInteger, FIRAuthInternalErrorCode) {
351351
FIRAuthInternalErrorCodeInvalidClientID =
352352
FIRAuthPublicErrorCodeFlag | FIRAuthErrorCodeInvalidClientID,
353353

354-
/** Indicates that a network request within a SFSafariViewController or UIWebview failed.
354+
/** Indicates that a network request within a SFSafariViewController or WKWebView failed.
355355
*/
356356
FIRAuthInternalErrorCodeWebNetworkRequestFailed =
357357
FIRAuthPublicErrorCodeFlag | FIRAuthErrorCodeWebNetworkRequestFailed,
358358

359-
/** Indicates that an internal error occurred within a SFSafariViewController or UIWebview.
359+
/** Indicates that an internal error occurred within a SFSafariViewController or WKWebView.
360360
*/
361361
FIRAuthInternalErrorCodeWebInternalError =
362362
FIRAuthPublicErrorCodeFlag | FIRAuthErrorCodeWebInternalError,
363363

364-
/** Indicates that an internal error occurred within a SFSafariViewController or UIWebview.
364+
/** Indicates that an internal error occurred within a SFSafariViewController or WKWebView.
365365
*/
366366
FIRAuthInternalErrorCodeWebSignInUserInteractionFailure =
367367
FIRAuthPublicErrorCodeFlag | FIRAuthErrorCodeWebSignInUserInteractionFailure,

Firebase/Auth/Source/Utilities/FIRAuthURLPresenter.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ typedef void (^FIRAuthURLPresentationCompletion)(NSURL *_Nullable callbackURL,
3636
typedef BOOL (^FIRAuthURLCallbackMatcher)(NSURL * _Nullable callbackURL);
3737

3838
/** @class FIRAuthURLPresenter
39-
@brief A Class responsible for presenting URL via SFSafariViewController or UIWebView.
39+
@brief A Class responsible for presenting URL via SFSafariViewController or WKWebView.
4040
*/
4141
@interface FIRAuthURLPresenter : NSObject
4242

Firebase/Auth/Source/Utilities/FIRAuthWebView.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,18 +15,19 @@
1515
*/
1616

1717
#import <UIKit/UIKit.h>
18+
#import <WebKit/WebKit.h>
1819

1920
NS_ASSUME_NONNULL_BEGIN
2021

2122
/** @class FIRAuthWebView
22-
@brief A class reponsible for creating a UIWebview for use within Firebase Auth.
23+
@brief A class reponsible for creating a WKWebView for use within Firebase Auth.
2324
*/
2425
@interface FIRAuthWebView : UIView
2526

2627
/** @property webView
2728
* @brief The web view.
2829
*/
29-
@property(nonatomic, weak) UIWebView *webView;
30+
@property(nonatomic, weak) WKWebView *webView;
3031

3132
/** @property spinner
3233
* @brief The spinner that indicates web view loading.

Firebase/Auth/Source/Utilities/FIRAuthWebView.m

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ - (instancetype)initWithFrame:(CGRect)frame {
3333
@brief Initializes the subviews of this view.
3434
*/
3535
- (void)initializeSubviews {
36-
UIWebView *webView = [self createWebView];
36+
WKWebView *webView = [self createWebView];
3737
UIActivityIndicatorView *spinner = [self createSpinner];
3838

3939
// The order of the following controls z-order.
@@ -56,8 +56,8 @@ - (void)layoutSubviews {
5656
@brief Creates a web view to be used by this view.
5757
@return The newly created web view.
5858
*/
59-
- (UIWebView *)createWebView {
60-
UIWebView *webView = [[UIWebView alloc] initWithFrame:CGRectZero];
59+
- (WKWebView *)createWebView {
60+
WKWebView *webView = [[WKWebView alloc] initWithFrame:CGRectZero];
6161
// Trickery to make the web view not do weird things (like showing a black background when
6262
// the prompt in the navigation bar animates changes.)
6363
webView.opaque = NO;
@@ -75,7 +75,16 @@ - (UIWebView *)createWebView {
7575
@return The newly created spinner.
7676
*/
7777
- (UIActivityIndicatorView *)createSpinner {
78-
UIActivityIndicatorViewStyle spinnerStyle = UIActivityIndicatorViewStyleGray;
78+
UIActivityIndicatorViewStyle spinnerStyle;
79+
#if defined(TARGET_OS_MACCATALYST)
80+
if (@available(iOS 13.0, *)) {
81+
spinnerStyle = UIActivityIndicatorViewStyleMedium;
82+
} else {
83+
spinnerStyle = UIActivityIndicatorViewStyleGray;
84+
}
85+
#else
86+
spinnerStyle = UIActivityIndicatorViewStyleGray;
87+
#endif
7988
UIActivityIndicatorView *spinner =
8089
[[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:spinnerStyle];
8190
return spinner;

Firebase/Auth/Source/Utilities/FIRAuthWebViewController.m

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020

2121
NS_ASSUME_NONNULL_BEGIN
2222

23-
@interface FIRAuthWebViewController () <UIWebViewDelegate>
23+
@interface FIRAuthWebViewController () <WKNavigationDelegate>
2424
@end
2525

2626
@implementation FIRAuthWebViewController {
@@ -54,7 +54,7 @@ - (instancetype)initWithURL:(NSURL *)URL
5454

5555
- (void)loadView {
5656
FIRAuthWebView *webView = [[FIRAuthWebView alloc] initWithFrame:[UIScreen mainScreen].bounds];
57-
webView.webView.delegate = self;
57+
webView.webView.navigationDelegate = self;
5858
self.view = webView;
5959
_webView = webView;
6060
self.navigationItem.leftBarButtonItem =
@@ -76,33 +76,36 @@ - (void)cancel {
7676
[_delegate webViewControllerDidCancel:self];
7777
}
7878

79-
#pragma mark - UIWebViewDelegate
79+
#pragma mark - WKNavigationDelegate
8080

81-
- (BOOL)webView:(UIWebView *)webView
82-
shouldStartLoadWithRequest:(NSURLRequest *)request
83-
navigationType:(UIWebViewNavigationType)navigationType {
84-
return ![_delegate webViewController:self canHandleURL:request.URL];
81+
- (void)webView:(WKWebView *)webView
82+
decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction
83+
decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler {
84+
[_delegate webViewController:self canHandleURL:navigationAction.request.URL];
85+
decisionHandler(WKNavigationActionPolicyAllow);
8586
}
8687

87-
- (void)webViewDidStartLoad:(UIWebView *)webView {
88-
// Show & animate the activity indicator.
88+
- (void)webView:(WKWebView *)webView
89+
didStartProvisionalNavigation:(null_unspecified WKNavigation *)navigation {
8990
_webView.spinner.hidden = NO;
9091
[_webView.spinner startAnimating];
9192
}
9293

93-
- (void)webViewDidFinishLoad:(UIWebView *)webView {
94-
// Hide & stop the activity indicator.
94+
- (void)webView:(WKWebView *)webView
95+
didFinishNavigation:(null_unspecified WKNavigation *)navigation {
9596
_webView.spinner.hidden = YES;
9697
[_webView.spinner stopAnimating];
9798
}
9899

99-
- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error {
100+
- (void)webView:(WKWebView *)webView
101+
didFailNavigation:(null_unspecified WKNavigation *)navigation
102+
withError:(NSError *)error {
100103
if ([error.domain isEqualToString:NSURLErrorDomain] && error.code == NSURLErrorCancelled) {
101104
// It's okay for the page to be redirected before it is completely loaded. See b/32028062 .
102105
return;
103106
}
104107
// Forward notification to our delegate.
105-
[self webViewDidFinishLoad:webView];
108+
[self webView:webView didFinishNavigation:navigation];
106109
[_delegate webViewController:self didFailWithError:error];
107110
}
108111

0 commit comments

Comments
 (0)