如何在 Apple iOS 上將「通用連結」設定至「深層連結」

Alex Austin

2017-10-30

更新:本篇文章原始刊登日期為 2015 年 7 月 24 日,但已更新最新 iOS 9.2 版的資訊。由於 Apple 已不再支援深層連結的 URI 配置,因此開發人員必須實作「通用連結」才能在 iOS 上正確執行深層連結。若您已使用 URI 配置,請至我們部落格查閱關於轉換至 「通用連結」 的資訊。

在 Branch,一切工作皆仰賴行動深層連結方可順利運作。我們建立了可讓您在任何地方使用的單一連結:適用於所有平台、裝置和應用程式商店,推展並促進使用者選擇使用您的應用程式。其為單一連結,並可獨立於每個通路 (例如 Facebook、Twitter、Gmail 等等) 而完全設定至您的應用程式連結,此外亦會列於所有搜尋入口網站 (Google App Indexing、Bing 搜尋、Apple Spotlight)。

就是這麼簡單。實際上,我們已撰寫了有關「如何設定Google App Indexing」以及「如何在Facebook 執行深層連結」的部落格文章,歡迎您隨時前往參閱。

Slide1

Apple 已在最新的 WWDC 提案會上宣佈推出「通用連結」,而我們已將此一令人振奮的優異功能整合至 Branch 深層連結平台。不過有關「通用連結」運作的複雜性為何,我們目前所知不多。基於我們已耗費太多時間從事「通用連結」相關工作,且相關說明文件亦十分貧乏,因此我們想要與各位分享有關如何執行通用連結的指引,以協助各位節省寶貴時間心力。

「通用連結」在 iOS 9 中如何運作?

在推出「通用連結」之前,有關系統在安裝應用程式後開啟該應用程式的主要機制,即是嘗試在 Safari 中重新導向至應用程式的 URI 配置 (例如登錄於應用程式的 PLIST)。此做法會在 Safari 中置入路由邏輯,但卻無法檢查是否已安裝應用程式。這表示開發人員無時無刻皆會嘗試呼叫 URI 配置 (僅在極罕見狀況下已安裝應用程式),然後在未透過計時器執行時切換回 App Store。

「iOS 9 通用連結」已試圖修正此問題。當點擊連結時,iOS 不會先開啟 Safari,而會檢查是否已針對連結關聯網域登錄「通用連結」,然後再檢查是否已安裝對應的應用程式。若目前已安裝應用程式,則系統會開啟該應用程式。若未開啟應用程式,則會開啟 Safari 並載入 http(s) 連結。

就功能性而言,其可讓您擁有單一連結來開啟您的應用程式,或是開啟您的行動網站。

通用連結整合指引

以下是有關取得適用於您應用程式之「通用連結」的高階步驟:

1. 設定您的應用程式登錄已核准網域

    1. developer.apple.com登錄您的應用程式
    1. 在您的應用程式識別碼上啟用「關聯網域」
    1. 在您的 Xcode 專案上啟用「關聯網域」
    1. 新增適當的網域權利
  1. 確認在組建中已包含所有權利

若您使用 Branch,則無須繼續執行以下動作。否則請繼續參閱第二節所述內容。

2. 設定您的網站來託管 apple-app-site-association 檔案

    1. 購買網域名稱或挑選現有的網域名稱
    1. 取得網域名稱的 SSL 憑證
    1. 建立架構式 apple-app-site-association JSON 檔案
    1. 使用 SSL 憑證簽署 JSON 檔案
  1. 設定檔案伺服器

若您使用 Branch 服務,即可擺脫諸如建立 SSL 憑證以及簽署和託管伺服器 JSON 檔案等繁瑣負擔,您僅須修改應用程式的程式碼即可輕鬆使用。我們會在本文最後為您詳加介紹。

Примечание. Мы также 我們亦建置了專屬工具 ,可檢查您的 apple-app-site-association 檔案是否正確設定。

第 1 節:設定您的應用程式權利

備註: 為了登錄您的 Xcode 專案供「通用連結」用途,您必須在 Apple 開發人員入口網站中建立一個 App ID,並啟用適當的權利。此做法與應用程式內購買的所需設定非常相似。

您無法使用萬用字元應用程式識別碼做為「通用連結」用途

在 developers.apple.com 登錄您的應用程式

請先前往 developer.apple.com 並登入。接著按一下「憑證、識別碼和設定檔」,然後再按一下「識別碼」

Apple Developer Portal for Universal LinksApple Dev Portal for Universal Links

若您尚無已登錄的「應用程式識別碼」,則必須按一下 + 號建立一個應用程式識別碼。若您已有完成登錄的應用程式識別碼,請跳過並前往下一節。

您必須在此處填寫 2 個欄位:名稱與搭售方案 ID。針對名稱欄位,基本上您可輸入任何喜好的名稱。針對搭售方案 ID,請填入搭售方案的值

Explicit App ID for Universal Links

 

您可查看 Xcode 專案的「一般」標籤取得此 ID,以做為正確的組建目標。

Setting up Universal Links in xcode

在 developers.apple.com 上,於您的應用程式識別碼中啟用「關聯網域」

針對先前既有或運作中的「應用程式識別碼」,請向下捲動瀏覽至最後一個區段,然後勾選「關聯網域」服務。

Setting up App ID for Universal Links

 

向下捲動瀏覽,然後按一下「儲存」

在您的 Xcode 專案中啟用「關聯網域」

現在,您想要於 Xcode 專案中啟用「關聯網域」。首先,確認您 Xcode 專案的選取「團隊」,與您剛才登錄「應用程式識別碼」的所在團隊相同。然後前往您專案檔案的「功能」標籤。

Universal Links in xcode

向下捲動並啟用「關聯網域」,以展開 Accordion。

setting up associated domain for Universal Links

若您看見類似此處的錯誤,請檢查以下事項:

    1. 您已選取正確的團隊
  1. 您 Xcode 專案的「搭售方案識別碼」,與用於登錄「應用程式識別碼」的識別碼相符

新增網域權利

在網域區段,新增適當的網域標籤。您必須加上 applinks: 做為其前置詞。此時,您會看見我們已新增 applinks:yourdomain.com。

App Links and your domain

確認組建已包含權利檔案

最後由於某些原因,Xcode 7 未包含位於組建中的權利檔案。在專案瀏覽器中,確認已選取新權利檔案做為右方的目標成員資格,以完成其建置。

Configuring xcode for universal links

若您使用 Branch,則無須繼續執行以下動作!若否,請繼續閱讀以下內容,或是使用下方的按鈕開始整合。

若您想要省去曠日廢時的繁瑣作業流程,可避免執行所有的 JSON 託管與 SSL 憑證工作,僅需交由 Branch 連結為您代勞。
https://dev.branch.io/recipes/branch_universal_links
不過,若您喜愛掌控一切親力親為,當然大可繼續操作。

第 2 節:設定 apple-app-site-association 檔案

「通用連結」可將您的網站 URL 轉換成應用程式連結,因此您必須執行網頁伺服器以使用這些連結。為協助執行此程序,請使用我們的 「通用連結驗證器」 ,檢查您的 apple-app-site-association 檔案是否正確設定。apple-app-site-association

選擇網域

請先找出您要做為「通用連結」用途的網域。您可註冊一個新網域,或是使用現有的網域。若您選擇註冊新網域,建議您使用非具垃圾郵件性質的正派註冊機構,例如gandi.net.

取得 SSL 憑證

針對您要用來託管「通用連結」的網域,您必須取得 SSL 憑證檔案。若要執行此動作,您必須使用第三方服務註冊 SSL 網域,並建立需要的檔案。我們在經過一番精心嚴選後,決定由 Digicert 負責處理 branch.io 和相關子網域。

以下說明有關建立 SSL 憑證的步驟:

    1. 造訪https://www.digicert.com/easy-csr/openssl.htm然後填寫位於頂端的表單以產生 openSSL 命令。將此視窗保持開啟
    1. 登入您的遠端伺服器
    1. 執行 openSSL 命令,以產生憑證簽署要求 (.csr) 與憑證檔案 (.cert)
    1. 透過以下網址付款取得您的 SSL 憑證:https://www.digicert.com/welcome/ssl-plus.htm.
    1. 靜待通過 Digicert 核准和傳送最終檔案
  1. 最後再將 yourdomain.com.cert、yourdomain.com.key 和 digicertintermediate.cert,移至您遠端伺服器上的相同目錄中

建立 apple-app-site-association JSON

此 JSON 檔案具有完美標準架構,因此基本上您僅需複製此版本並加以編輯,即可符合您的需求。在以下內容部分將會詳述有關如何取得正確值的資訊。

{
  "applinks": {
    "apps": [],
    "details": [
      {
        "appID": "T5TQ36Q2SQ.com.branch.sdk.TestBed",
        "paths": ["*"]
      }
    ]
  }
}

您唯一需要變更的欄位,與以下項目有關聯:T5TQ36Q2SQ.com.branch.sdk.TestBed。實際上,此項目是由兩個以點號連結的值所組成。您可在 developers.apple.com 上的「識別碼」->「App ID」區段,找到這兩個值。如下所示,請按一下對應的已註冊 App ID。

Configuring Apple ID for Universal Links

在此範例中,「前置詞」與 ID 是以點號連結在一起,看起來會類似這樣:T5TQ36Q2SQ.com.branch.sdk.TestBed。

將此 JSON 檔案另存為 apple-app-site-association-unsigned。

使用您的 SSL 憑證簽署 JSON 檔案

備註: 若您已將網域認證為 HTTPS,則可略過此步驟,並以純文字格式傳送 JSON。 Apple’s updated requirements:

將 apple-app-site-association-unsigned 檔案,上傳至您伺服器中的目錄,該目錄與先前步驟中的認證和金鑰檔案目錄相同。使用命令列,將目錄變更至該資料夾,然後發出下列命令:

cat apple-app-site-association-unsigned | openssl smime -sign -inkey yourdomain.com.key -signer yourdomain.com.cert -certfile digicertintermediate.cert -noattr -nodetach -outform DER > apple-app-site-association

這會產生 apple-app-site-association 檔案關聯

設定您的檔案伺服器

好的!您已簽署 apple-app-site-association 檔案。現在您僅需設定由檔案伺服器來託管此檔案。請注意以下幾項警示:.

    1. 傳送時必須附上標頭 application/pkcs7-mime
    1. 必須從端點 youdomain.com/apple-app-site-association 傳送
  1. 必須傳回 200 http 程式碼。

我們已使用 Node+Express 連結伺服器,為所有的 Branch 整合應用程式設定一個檔案伺服器。以下是我們針對此案例所用的實用程式碼:

var aasa = fs.readFileSync(__dirname + '/static/apple-app-site-association');
app.get('/apple-app-site-association', function(req, res, next) {
     res.set('Content-Type', 'application/json');
     res.status(200).send(aasa);
});

Branch 與 iOS 9 通用連結整合指引

再次強調,您可省卻所有繁瑣的 JSON 託管與 SSL 憑證工作,只要使用 Branch 連結即可為您託管。
願您享受美好的連結使用體驗!

现在订阅每周博客摘要,其中包含移动增长技巧,行业更新和产品公告!
shares