Skip to content

Commit efe46ad

Browse files
Merge pull request #27 from jubril-paystack/fix/webview
Updates deprecated UIWebView class to WKWebView
2 parents 8f4c6cb + 1a9bc3d commit efe46ad

2 files changed

Lines changed: 30 additions & 22 deletions

File tree

Paystack/UI/PSTCKAuthViewController.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
//
88

99
#import <UIKit/UIKit.h>
10+
#import <WebKit/WebKit.h>
1011

1112
typedef void(^PSTCKAuthCallback)(void);
1213

Paystack/UI/PSTCKAuthViewController.m

Lines changed: 29 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,13 @@
1010

1111
@interface PSTCKAuthViewController ()
1212

13-
@property(nonatomic, strong) UIWebView *authenticationWebView;
13+
@property(nonatomic, strong) WKWebView *authenticationWebView;
1414
@property(nonatomic, copy) PSTCKAuthCallback completion;
1515
@property(nonatomic, strong) NSURL *authURL;
1616

1717
@end
1818

19-
@interface PSTCKAuthViewController (UIWebViewDelegate) <UIWebViewDelegate>
19+
@interface PSTCKAuthViewController (WKNavigationDelegate) <WKNavigationDelegate, WKUIDelegate>
2020

2121
@end
2222

@@ -42,10 +42,17 @@ - (void)viewDidLoad {
4242

4343
UIBarButtonItem *cancelButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(tappedCancelButton:)];
4444
self.navigationItem.leftBarButtonItem = cancelButton;
45+
// Adds javascript to make content width the device width.
46+
NSString *jScript = @"var meta = document.createElement('meta'); meta.setAttribute('name', 'viewport'); meta.setAttribute('content', 'width=device-width'); document.getElementsByTagName('head')[0].appendChild(meta);";
47+
WKUserScript *wkUScript = [[WKUserScript alloc] initWithSource:jScript injectionTime:WKUserScriptInjectionTimeAtDocumentEnd forMainFrameOnly:YES];
48+
WKUserContentController *wkUController = [[WKUserContentController alloc] init];
49+
[wkUController addUserScript:wkUScript];
50+
WKWebViewConfiguration *wkWebConfig = [[WKWebViewConfiguration alloc] init];
51+
wkWebConfig.userContentController = wkUController;
4552

46-
self.authenticationWebView = [[UIWebView alloc] init];
47-
self.authenticationWebView.delegate = self;
48-
self.authenticationWebView.scalesPageToFit = NO;
53+
self.authenticationWebView = [[WKWebView alloc] initWithFrame:self.view.frame configuration:wkWebConfig];
54+
self.authenticationWebView.UIDelegate = self;
55+
self.authenticationWebView.navigationDelegate = self;
4956
[self.view addSubview:self.authenticationWebView];
5057
[self.navigationController setNavigationBarHidden:NO animated:YES];
5158
self.navigationController.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
@@ -71,11 +78,12 @@ - (void)tappedCancelButton:(id)cancelButton {
7178

7279
@end
7380

74-
@implementation PSTCKAuthViewController (UIWebViewDelegate)
81+
@implementation PSTCKAuthViewController (WKNavigationDelegate)
7582

76-
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
77-
#pragma unused(webView, navigationType)
78-
NSString *url = [[request URL] absoluteString];
83+
- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler {
84+
#pragma unused(webView, navigationAction)
85+
NSURLRequest *request = navigationAction.request;
86+
NSString *url = [[request URL]absoluteString];
7987

8088
// Prevent loading URL if it is the redirectURL
8189
// The intention is to only requery 3DS auths
@@ -84,14 +92,21 @@ - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)
8492
// Processing has finished?
8593
if (handlingRedirectURL) {
8694
self.completion();
95+
return decisionHandler(WKNavigationActionPolicyCancel);
96+
97+
}
98+
else {
99+
return decisionHandler(WKNavigationActionPolicyAllow);
87100
}
88-
89-
return !handlingRedirectURL;
90101
}
91102

92-
- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error {
93-
#pragma unused(webView)
94-
103+
- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation {
104+
#pragma unused(webView, navigation)
105+
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];
106+
}
107+
108+
- (void)webView:(WKWebView *)webView didFailNavigation:(WKNavigation *)navigation withError:(NSError *)error {
109+
#pragma unused(webView, navigation)
95110
// Turn off network activity indicator upon failure to load web view
96111
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];
97112

@@ -106,12 +121,4 @@ - (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error {
106121
}
107122
}
108123

109-
- (void)webViewDidFinishLoad:(UIWebView *)webView {
110-
#pragma unused(webView)
111-
112-
// Turn off network activity indicator upon finishing web view load
113-
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];
114-
115-
}
116-
117124
@end

0 commit comments

Comments
 (0)