菜鸟教程小白 发表于 2022-12-12 13:36:43

ios - 如何在 Swift 3 中使用自定义 URL 方案打开我的 iOS 应用程序?


                                            <p><p>当在 Safari 浏览器上单击以下链接时,我需要打开我的特定 UIViewController:</p>

<p> <a href="http://my.sampledomain.com/en/customer/account/resetpassword/?id=24&amp;token=8fbf662617d14c10f4a11f716c1b2285" rel="noreferrer noopener nofollow">http://my.sampledomain.com/en/customer/account/resetpassword/?id=24&amp;token=8fbf662617d14c10f4a11f716c1b2285</a> </p>

<p>当在浏览器上单击此链接时,我需要在特定屏幕上打开我的应用程序并从该 URL 检索数据。例如:</p>

<pre><code>id = 24
token = 8fbf662617d14c10f4a11f716c1b2285
</code></pre>

<p>...并将其传递给特定的 UIViewController。</p>

<p>我该怎么做?</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>您所描述的称为<strong>深度链接</strong>。这是一个非常常见的应用程序功能——大多数应用程序都有它——从概念上讲,它似乎是一件容易构建的事情。但是,要正确处理很复杂,并且有很多边缘情况。</p>

<p>你基本上需要完成两件事:</p>

<ol>
<li><strong>如果已安装应用:</strong>打开应用并将用户引导至其中的正确内容。</li>
<li><strong>如果未安装该应用:</strong>将用户转至 App Store,以便他们下载。理想情况下,在下载后<em></em>将用户路由到应用内的正确内容(这称为“延迟深度链接”)。</li>
</ol>

<p>虽然不是<em>必需的,</em>您可能还想跟踪所有这些事件,以便了解哪些事件正在发挥作用。</p>

<h2>如果应用已安装</h2>

<p>您现有的自定义 URI 方案属于此类别。然而,Apple 认为自定义 URI 方案不是一项好的技术,并在 iOS 9 中弃用了它们,转而支持 <a href="https://developer.apple.com/library/ios/documentation/General/Conceptual/AppSearch/UniversalLinks.html" rel="noreferrer noopener nofollow">Universal Links</a>。 .</p>

<p>Apple 在这点上是对的。自定义 URI 方案有很多问题,但这些是最大的问题:</p>

<ul>
<li>如果未安装该应用,则没有后备方案。实际上,您会遇到错误。</li>
<li>它们通常不被识别为用户可以点击的链接。</li>
</ul>

<p>为了解决这些问题,过去可以使用常规 <code>http://</code> 链接,然后在目标页面上插入重定向以将用户转发到您的自定义 URI 方案,从而打开应用程序。如果该重定向失败,您可以将用户无缝地重定向到 App Store。这是 Apple 在 iOS 9 中打破的部分,旨在插入通用链接的采用。</p>

<p>通用链接是更好的用户体验,因为默认情况下它们是 <code>http://</code> 链接并避免严重错误。但是,它们很难设置,<a href="https://dev.branch.io/getting-started/universal-app-links/support/ios/#appsbrowsers-that-support-universal-links" rel="noreferrer noopener nofollow">still don&#39;t work everywhere</a> .</p>

<p>为确保您的用户在安装应用程序后最终进入应用程序,您需要同时支持通用链接和自定义 URI 方案,即使这样也有很多边缘情况,例如 <a href="https://blog.branch.io/deep-linking-from-facebook-in-2017/" rel="noreferrer noopener nofollow">Facebook</a>和 <a href="https://blog.branch.io/what-the-twitter-update-means-for-deep-linking/" rel="noreferrer noopener nofollow">Twitter</a>需要特殊处理。</p>

<h2>如果应用没有安装</h2>

<p>在这种情况下,用户最终会访问您的 <code>http://</code> 后备 URL。此时,您有两种选择:</p>

<ol>
<li>立即将用户直接转到 App Store。</li>
<li>将用户引导至您的移动网站(然后使用 <a href="https://blog.branch.io/how-to-setup-an-ios-and-android-smart-app-banner-with-deep-linking-and-download-tracking/" rel="noreferrer noopener nofollow">smart banner</a> 之类的方式为他们提供访问 App Store 的<em>选项</em>)。</li>
</ol>

<p>大多数大品牌更喜欢第二种选择。较小的应用程序通常采用第一种方法,尤其是在它们没有网站的情况下。</p>

<p>要将用户转发到 App Store,您可以使用 Javascript 重定向,如下所示:</p>

<pre><code>&lt;script type=&#34;text/javascript&#34;&gt;
window.onload = function() {
    window.location = &#34;https://itunes.apple.com/app/id1121012049&#34;;
};
&lt;/script&gt;
</code></pre>

<p>直到最近,还可以使用 HTTP 重定向来提高速度,但是 <a href="https://blog.branch.io/the-ios-10-3-security-alert-is-killing-app-store-downloads/" rel="noreferrer noopener nofollow">Apple changed some behavior in Safari with iOS 10.3</a> ,所以这不再有效。</p>

<h2>延迟深层链接</h2>

<p>不幸的是,在 iOS 或 Android 上都没有本地方法可以完成最后一个任务。要完成这项工作,您需要一个远程服务器来关闭循环。您可以<a href="https://blog.branch.io/how-to-build-a-linking-solution-for-every-device" rel="noreferrer noopener nofollow">build this yourself</a> ,但你真的不应该有很多原因,尤其是你有更重要的事情要做。 </p>

<h1>底线</h1>

<p>深度链接非常复杂。今天的大多数应用程序都不会尝试通过构建内部系统来设置它。免费托管的深层链接服务,例如 <a href="https://branch.io" rel="noreferrer noopener nofollow">Branch.io</a> (全面披露:我和他们一起工作真是太棒了)Firebase 动态链接可以为您处理所有这些,并确保您始终了解最新的标准和边缘案例。</p>

<p>见 <a href="https://video.branch.io/an-overview-of-mobile-deep-link-standards" rel="noreferrer noopener nofollow">here</a>对于视频概述,Branch 的员工制作了您需要了解的所有内容。 </p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 如何在 Swift 3 中使用自定义 URL 方案打开我的 iOS 应用程序?,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/45344487/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/45344487/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 如何在 Swift 3 中使用自定义 URL 方案打开我的 iOS 应用程序?