遇到的問題:
由于項(xiàng)目是通過WKWebView內(nèi)嵌的h5來實(shí)現(xiàn)茂卦,而且需要進(jìn)行支付寶支付何什。
問題1:點(diǎn)擊h5中的支付時(shí),并沒有跳轉(zhuǎn)支付寶APP
問題2:支付完成或取消支付時(shí)等龙,支付寶APP沒有跳轉(zhuǎn)回原APP
解決方法:
問題1:通過WKWebView的代理攔截請求的URL富俄,捕獲支付寶的鏈接:
-(void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler{
NSString *urlStr = navigationAction.request.URL.absoluteString;
if ([urlStr hasPrefix:@"alipays://"] || [urlStr hasPrefix:@"alipay://"]) {
NSURL* alipayURL = [self changeURLSchemeStr:urlStr];
if (@available(iOS 10.0, *)) {
[[UIApplication sharedApplication] openURL:alipayURL options:@{UIApplicationOpenURLOptionUniversalLinksOnly: @NO} completionHandler:^(BOOL success) {
}];
} else {
// Fallback on earlier versions
[[UIApplication sharedApplication] openURL:alipayURL];
}
}
decisionHandler(WKNavigationActionPolicyAllow);
}
問題2:通過替換攔截的URL中的fromAppUrlScheme值:
攔截到的URL.png
由于攔截到的URL是編碼過的,有興趣的同學(xué)可以看下這個(gè)在線編碼解碼工具而咆。
我的方法是:對URL進(jìn)行解碼得到string霍比,取出?之后的字符串暴备,轉(zhuǎn)換成字典悠瞬,再取出字典中key為fromAppUrlScheme對應(yīng)的value,再將string中的value替換為自己APP對應(yīng)的URLSchemes涯捻,再將該string進(jìn)行浅妆,URL編碼,得到一個(gè)新的URL障癌,供跳轉(zhuǎn)凌外。
-(NSURL*)changeURLSchemeStr:(NSString*)urlStr{
NSString* tmpUrlStr = urlStr.copy;
if([urlStr containsString:@"fromAppUrlScheme"]) {
tmpUrlStr = [tmpUrlStr stringByRemovingPercentEncoding];
NSDictionary* tmpDic = [self dictionaryWithUrlString:tmpUrlStr];
NSString* tmpValue = [tmpDic valueForKey:@"fromAppUrlScheme"];
tmpUrlStr = [[tmpUrlStr stringByReplacingOccurrencesOfString:tmpValue withString:@"你對應(yīng)的URLSchemes"] mutableCopy];
tmpUrlStr = [[tmpUrlStr stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]] mutableCopy];
}
NSURL * newURl = [NSURL URLWithString:tmpUrlStr];
return newURl;
}
-(NSDictionary*)dictionaryWithUrlString:(NSString*)urlStr{
if(urlStr && urlStr.length&& [urlStr rangeOfString:@"?"].length==1) {
NSArray *array = [urlStr componentsSeparatedByString:@"?"];
if(array && array.count==2) {
NSString*paramsStr = array[1];
if(paramsStr.length) {
NSString* paramterStr = [paramsStr stringByRemovingPercentEncoding];
NSData *jsonData = [paramterStr dataUsingEncoding:NSUTF8StringEncoding];
NSDictionary *responseDic = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableLeaves error:nil];
return responseDic;
}
}
}
return nil;
}
對應(yīng)info.plist設(shè)置的URLSchemes.png