风大不出门 發表於 2019-6-20 15:54:00

iOS开发基础98-跳转淘宝案例

<p>在iOS应用开发中,实现点击广告跳转至淘宝商品详情页的需求,要求能在WebView中加载淘宝商品页面,并允许用户在淘宝客户端中查看商品详情和评论。为了解决这一需求,我们可以通过拦截特定URL并利用淘宝的URL Scheme来跳转至淘宝客户端。本文将详细介绍实现过程,并分析其中的细节与底层逻辑。</p>
<h2 id="实现目标">实现目标</h2>
<ol>
<li>在应用内WebView中加载淘宝商品详情页。</li>
<li>用户操作如点击评论时,能跳转至淘宝客户端查看详细信息。</li>
</ol>
<h2 id="解决方案">解决方案</h2>
<p>通过分析淘宝的网页请求,发现淘宝在跳转操作中会使用特定的URL Scheme(tbopen开头的地址)。利用这个特性,我们可以拦截这些URL,实现从WebView跳转至淘宝客户端。</p>
<h3 id="第一步在infoplist添加白名单">第一步:在Info.plist添加白名单</h3>
<p>苹果的应用安全机制要求在Info.plist文件中声明需要使用的URL Scheme白名单。需要添加<code>tbopen</code>到白名单中,以便我们能够使用淘宝的URL Scheme进行跳转。</p>
<pre><code class="language-xml">&lt;key&gt;LSApplicationQueriesSchemes&lt;/key&gt;
&lt;array&gt;
    &lt;string&gt;tbopen&lt;/string&gt;
    &lt;string&gt;taobao&lt;/string&gt; &lt;!-- 可选,如果需要手动拼接URL --&gt;
&lt;/array&gt;
</code></pre>
<h3 id="第二步拦截tbopen关键字处理对应的业务逻辑">第二步:拦截tbopen关键字,处理对应的业务逻辑</h3>
<p>在应用中使用<code>WKWebView</code>加载网页,并在打开淘宝页面时拦截URL跳转至淘宝客户端。实现方法如下:</p>
<pre><code class="language-objective-c">- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler {
   
    NSURL *requestUrl = navigationAction.request.URL;

    if () { // 拦截tbopen开头的URL
      if ([ canOpenURL:requestUrl]) { // 检查是否能打开淘宝客户端
            [ openURL:requestUrl]; // 打开淘宝客户端
      }
    } else {
      decisionHandler(WKNavigationActionPolicyAllow); // 允许WebView继续加载
    }
}
</code></pre>
<h3 id="详细分析">详细分析</h3>
<ol>
<li>
<p><strong>URL Scheme白名单</strong>:</p>
<ul>
<li><code>LSApplicationQueriesSchemes</code> 是一个plist键,用于声明应用查询到其他应用URL Scheme的权限。将<code>tbopen</code>添加进去后,应用可以使用淘宝自定义的URL Scheme进行跳转。</li>
<li>通过添加<code>taobao</code>可以更灵活地拼接URL,但需要了解并规范操作URL格式以确保跳转成功。</li>
</ul>
</li>
<li>
<p><strong>拦截URL并跳转</strong>:</p>
<ul>
<li><code>WKNavigationAction</code> 提供了关于导航动作的信息。在其中可以获取请求的URL。</li>
<li><code>if ()</code> 判断URL是否使用tbopen协议。</li>
<li><code>canOpenURL:</code> 方法用于检查当前设备是否可以处理指定的URL。</li>
<li><code>openURL:</code> 方法实现打开淘宝客户端。</li>
</ul>
</li>
<li>
<p><strong>注意事项</strong>:</p>
<ul>
<li>并非每次打开<code>WebView</code>都会立即调用tbopen开头的URL,但在第一次加载时通常会出现。拦截这些URL并跳转即可满足大部分需求。</li>
<li>确保应用的配置文件和代码符合苹果安全机制及审核要求。</li>
</ul>
</li>
</ol>
<h3 id="实际效果">实际效果</h3>
<p>经过配置和实现拦截代码后,可以确保在WebView中点击操作如跳转评论时,通过<code>tbopen</code> Scheme跳转至淘宝客户端,实现流畅的用户体验。</p>
<h2 id="代码示例补充">代码示例补充</h2>
<p>完整的ViewController示例代码:</p>
<pre><code class="language-objective-c">#import "ViewController.h"
#import &lt;WebKit/WebKit.h&gt;

@interface ViewController () &lt;WKNavigationDelegate&gt;
@property (nonatomic, strong) WKWebView *webView;
@end

@implementation ViewController

- (void)viewDidLoad {
    ;
   
    self.webView = [ initWithFrame:self.view.frame];
    self.webView.navigationDelegate = self;
    ;
   
    NSURL *url = ; // 替换为实际的淘宝商品详情页URL
    NSURLRequest *request = ;
    ;
}

- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler {
   
    NSURL *requestUrl = navigationAction.request.URL;

    if () { // 拦截tbopen开头的URL
      if ([ canOpenURL:requestUrl]) { // 检查是否能打开淘宝客户端
            [ openURL:requestUrl]; // 打开淘宝客户端
      }
    } else {
      decisionHandler(WKNavigationActionPolicyAllow); // 允许WebView继续加载
    }
}

@end
</code></pre>
<p>这个示例显示了如何在ViewController中实现拦截并处理tbopen URL Scheme,实现应用内WebView和淘宝客户端的无缝跳转。</p>
<h2 id="总结">总结</h2>
<p>通过拦截并处理特定URL来实现应用内WebView与淘宝客户端的页面跳转,是一个利用URL Scheme优化用户体验的有效方法。通过在Info.plist中配置白名单和实现URL拦截逻辑,确保了WebView的内容加载和淘宝客户端的顺利跳转,使得广告点击操作更加流畅和交互性更强。</p>
<p>这种技术思路不仅适用于淘宝,也适用于其他支持URL Scheme跳转的第三方应用,具有广泛的应用价值与实际上手操作性。</p>


</div>
<div id="MySignature" role="contentinfo">
    将来的你会感谢今天如此努力的你!
版权声明:本文为博主原创文章,未经博主允许不得转载。<br><br>
来源:https://www.cnblogs.com/chglog/p/11059234.html
頁: [1]
查看完整版本: iOS开发基础98-跳转淘宝案例