美文网首页
2019-10-30

2019-10-30

作者: 上下求索zsh | 来源:发表于2019-10-30 16:38 被阅读0次

    iOS APP内嵌Webview跳转支付宝,完成后跳回APP

    0.4542019.04.24 17:26:59字数 216阅读 624

    遇到的问题:

    由于项目是通过WKWebView内嵌的h5来实现,而且需要进行支付宝支付。

    问题1:点击h5中的支付时,并没有跳转支付宝APP

    问题2:支付完成或取消支付时,支付宝APP没有跳转回原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=[selfchangeURLSchemeStr:urlStr];if(@available(iOS10.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是编码过的,有兴趣的同学可以看下这个在线编码解码工具

    我的方法是:对URL进行解码得到string,取出?之后的字符串,转换成字典,再取出字典中key为fromAppUrlScheme对应的value,再将string中的value替换为自己APP对应的URLSchemes,再将该string进行,URL编码,得到一个新的URL,供跳转。

    -(NSURL*)changeURLSchemeStr:(NSString*)urlStr{NSString*tmpUrlStr=urlStr.copy;if([urlStr containsString:@"fromAppUrlScheme"]){tmpUrlStr=[tmpUrlStr stringByRemovingPercentEncoding];NSDictionary*tmpDic=[selfdictionaryWithUrlString:tmpUrlStr];NSString*tmpValue=[tmpDic valueForKey:@"fromAppUrlScheme"];tmpUrlStr=[[tmpUrlStr stringByReplacingOccurrencesOfString:tmpValue withString:@"你对应的URLSchemes"]mutableCopy];tmpUrlStr=[[tmpUrlStr stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]]mutableCopy];}NSURL*newURl=[NSURL URLWithString:tmpUrlStr];returnnewURl;}-(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];returnresponseDic;}}}returnnil;}

    对应info.plist设置的URLSchemes.png

    相关文章

      网友评论

          本文标题:2019-10-30

          本文链接:https://www.haomeiwen.com/subject/zcxavctx.html