向春 發表於 2024-7-16 16:33:00

iOS开发基础103-APP之间跳转

<p>iOS提供了多种方式来实现应用之间的相互跳转。其中,URL Schemes和Universal Links是两种主要的方法。下面详细介绍这两种方法,并提供相应的示例代码,同时对它们的优缺点进行分析。</p>
<h3 id="一url-schemes">一、URL Schemes</h3>
<h4 id="1-什么是url-schemes">1. 什么是URL Schemes</h4>
<p>URL Schemes是一种基于URL的通讯方式,允许一个应用通过指定的URL打开另一个应用。每个应用可以注册一个或多个自定义URL Schemes。</p>
<h4 id="2-配置url-schemes">2. 配置URL Schemes</h4>
<p>在应用的Info.plist中添加URL Types,配置自定义URL Schemes:</p>
<pre><code class="language-xml">&lt;key&gt;CFBundleURLTypes&lt;/key&gt;
&lt;array&gt;
    &lt;dict&gt;
      &lt;key&gt;CFBundleTypeRole&lt;/key&gt;
      &lt;string&gt;Editor&lt;/string&gt;
      &lt;key&gt;CFBundleURLName&lt;/key&gt;
      &lt;string&gt;com.example.myapp&lt;/string&gt;
      &lt;key&gt;CFBundleURLSchemes&lt;/key&gt;
      &lt;array&gt;
            &lt;string&gt;myapp&lt;/string&gt;
      &lt;/array&gt;
    &lt;/dict&gt;
&lt;/array&gt;
</code></pre>
<h4 id="3-实现url-schemes的处理">3. 实现URL Schemes的处理</h4>
<p>在AppDelegate中实现<code>application:openURL:options:</code>方法:</p>
<pre><code class="language-objective-c">#import "AppDelegate.h"

@implementation AppDelegate

- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary&lt;NSString *,id&gt; *)options {
    if ([ isEqualToString:@"myapp"]) {
      // 处理打开URL的逻辑
      NSLog(@"URL host: %@", );
      return YES;
    }
    return NO;
}

@end
</code></pre>
<h4 id="4-通过url-schemes跳转到其他应用">4. 通过URL Schemes跳转到其他应用</h4>
<p>在另一个应用中,通过如下代码使用URL Schemes进行跳转:</p>
<pre><code class="language-objective-c">NSURL *url = ; // Replace "myapp" with the actual scheme
if ([ canOpenURL:url]) {
    [ openURL:url options:@{} completionHandler:nil];
}
</code></pre>
<h3 id="二universal-links">二、Universal Links</h3>
<h4 id="1-什么是universal-links">1. 什么是Universal Links</h4>
<p>Universal Links是一种更为现代和安全的方式,用于在应用和Web之间建立链接。通过Universal Links,用户点击链接时,如果已经安装了关联应用,会直接打开应用;如果未安装,则会跳转到对应的网页。</p>
<h4 id="2-配置universal-links">2. 配置Universal Links</h4>
<ol>
<li><strong>设置Associated Domains:</strong></li>
</ol>
<p>在Xcode的Capabilities中开启Associated Domains,并添加关联域名:</p>
<pre><code>applinks:example.com
</code></pre>
<ol start="2">
<li><strong>创建apple-app-site-association文件:</strong></li>
</ol>
<p>在您的域名服务器根目录下创建一个名为<code>apple-app-site-association</code>的JSON文件,内容如下:</p>
<pre><code class="language-json">{
    "applinks": {
      "apps": [],
      "details": [
            {
                "appID": "TEAMID.com.example.myapp",
                "paths": ["/path/*"]
            }
      ]
    }
}
</code></pre>
<p>其中,<code>appID</code>由团队ID和应用包名组成,<code>paths</code>用于指定哪些路径应该跳转到应用。</p>
<ol start="3">
<li><strong>配置Info.plist:</strong></li>
</ol>
<p>在Info.plist中添加如下配置:</p>
<pre><code class="language-xml">&lt;key&gt;com.apple.developer.associated-domains&lt;/key&gt;
&lt;array&gt;
    &lt;string&gt;applinks:example.com&lt;/string&gt;
&lt;/array&gt;
</code></pre>
<h4 id="3-实现universal-links的处理">3. 实现Universal Links的处理</h4>
<p>在AppDelegate中实现处理Universal Links的方法:</p>
<pre><code class="language-objective-c">#import "AppDelegate.h"

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray&lt;id&lt;UIUserActivityRestoring&gt;&gt; * _Nullable))restorationHandler {
    if () {
      NSURL *url = userActivity.webpageURL;
      if ([ isEqualToString:@"example.com"]) {
            // 处理Universal Links的逻辑
            NSLog(@"Universal Link URL: %@", url);
            return YES;
      }
    }
    return NO;
}

@end
</code></pre>
<h4 id="4-使用universal-links跳转">4. 使用Universal Links跳转</h4>
<p>在另一端使用Universal Links可以直接点击或通过发送邮件等方式打开指定的URL,例如<code>https://example.com/path/</code>,即可触发关联应用的打开。</p>
<h3 id="三两者优缺点对比">三、两者优缺点对比</h3>
<h4 id="url-schemes">URL Schemes</h4>
<p><strong>优点:</strong></p>
<ol>
<li>实现简单,不需要服务器配置。</li>
<li>配置灵活,只需在Info.plist中添加相应的配置即可。</li>
</ol>
<p><strong>缺点:</strong></p>
<ol>
<li>由于使用自定义Scheme,容易和其他应用发生冲突。</li>
<li>不安全,容易被其他应用滥用。</li>
<li>用户未安装目标应用时,可能会无响应,用户体验不佳。</li>
</ol>
<h4 id="universal-links">Universal Links</h4>
<p><strong>优点:</strong></p>
<ol>
<li>更为安全和现代,防止滥用。</li>
<li>用户未安装应用时,自动跳转到对应的网页,提升用户体验。</li>
<li>一个链接同时支持Web和应用,更加自然。</li>
</ol>
<p><strong>缺点:</strong></p>
<ol>
<li>需要额外的服务器配置,添加apple-app-site-association文件。</li>
<li>配置相对复杂,需要Xcode和服务器端的配合。</li>
</ol>
<p>开发者可以根据应用的需求选择合适的跳转方式。如果希望实现更现代和安全的跳转,同时提升用户体验,推荐使用Universal Links。如果对实现和配置要求较低,可以选择URL Schemes。</p>


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