如何驗證 Android SDK App Links 以確保 App 即時啟動

opoinstall
2026-07-06
5 min read

Android App Links 自動驗證與 Opoinstall SDK 的極簡瑞士工程示意圖。

如何在 manifest 中驗證 Android App Links? 驗證 Android App Links 需要在您網域的 .well-known 目錄下託管 assetlinks.json 檔案,並在您的啟動活動(launcher activity)的 manifest 中加入 android:autoVerify=“true”,同時驗證憑證簽章。這種原生驗證機制可繞過 Chrome 選擇器對話框及傳統 URL Scheme 彈出視窗的阻礙,達到 98.7% 的深度連結穩定性。

在行動增長與 App 開發領域,業界越來越傾向將 Android SDK App Links 視為 Android 裝置上安全、零阻力重新導向的黃金標準。當 Google 更新套件驗證系統時,同步收緊了網域安全性標準。若未能成功驗證,連結將退回至標準網頁渲染,觸發瀏覽器選擇提示,進而影響用戶轉換。

面對現實吧:在深度連結旅程中強迫用戶選擇瀏覽器會降低體驗。您需要一個經過驗證、安全且能原生繞過對話框阻礙的交握流程。


Android 12 重新導向要求:為何未經驗證的網域會退回至選擇器對話框

從 Android 12 開始,Google 針對意圖過濾器(intent filters)強制執行嚴格的自動驗證要求。若您的應用程式在 manifest 中以 HTTPS 協議宣告了自訂網域,作業系統會在安裝期間嘗試驗證每個網域。

真相是?只要單一驗證失敗,整個鏈結就會中斷:

  • 系統選擇器對話框: 若宣告的網域中有任何一個未能通過交握,Android 將停用 manifest 中所有網域的原生路由,並退回至瀏覽器提示。
  • 強制網頁後備(Web Fallbacks): 未經驗證的網域會將用戶直接導向 Chrome,繞過您原本設定的應用程式內深度連結路徑。
  • 轉換循環中斷: 用戶被迫手動瀏覽您的應用程式以尋找目標產品,導致行銷活動大幅流失用戶。

為防止這些重新導向失敗,開發者必須在網域上託管有效的資產驗證檔案。


數位資產連結規範(Digital Asset Links Specification):格式化 assetlinks JSON 清單

安全 Android 深度連結的基礎在於 assetlinks.json 清單。作業系統的套件管理器會在 App 安裝期間透過安全 HTTPS 連線查詢此檔案。

assetlinks JSON 架構:指定套件名稱與 SHA-256 指紋

assetlinks.json 檔案必須位於您網域的 .well-known 目錄中。您的網頁伺服器必須回傳 content-typeapplication/json 的 HTTP 200 直接回應。該檔案宣告了您的網域與應用程式唯一簽章憑證之間的關聯。

請參考下方的結構標準來格式化您的 Android 資產驗證檔案:

[
  {
    "relation": [
      "delegate_permission/common.handle_all_urls"
    ],
    "target": {
      "namespace": "android_app",
      "package_name": "com.opoinstall.travel",
      "sha256_cert_fingerprints": [
        "14:6D:E9:83:C5:30:06:22:98:5B:90:75:EF:C4:22:15:30:19:93:33:F4:6D:E9:83:C5:30:06:22:98:5B:90:75"
      ]
    }
  }
]

Android Manifest XML 宣告:配置意圖過濾器與自動驗證交握

若要指示作業系統啟動驗證交握,您必須更新 AndroidManifest.xml 檔案。目標啟動活動必須包含特定的意圖過濾器(intent filter)。該過濾器需宣告 android.intent.action.VIEW 動作、android.intent.category.DEFAULTandroid.intent.category.BROWSABLE 類別,以及 android:autoVerify="true" 屬性。

請參考下方的標準 XML 結構來配置您的 manifest:

<activity
    android:name=".MainActivity"
    android:exported="true"
    android:launchMode="singleTask">
    
    <!-- Enable automatic domain verification for Android App Links -->
    <intent-filter android:autoVerify="true">
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        
        <data android:scheme="http" />
        <data android:scheme="https" />
        <data android:host="travel.opwakeup.com" />
        <data android:host="travel-alternate.opwakeup.com" />
    </intent-filter>
</activity>
assetlinks.json 獲取與 SHA-256 憑證指紋驗證的極簡瑞士工程架構圖。

Android App Links 與自訂 URL Schemes:主機級驗證與安全範圍

若要評估已驗證的網域關聯如何與 Android 現代安全限制下的未驗證自訂協定進行比較,請參考下表分析:

架構指標 Android App Links (原生) 自訂 URL Schemes (舊式) iOS Universal Links
驗證清單 assetlinks.json (JSON 格式) 無。無需伺服器端驗證檔案。 apple-app-site-association (原始 JSON)
重新導向阻礙 零。繞過瀏覽器提示;立即啟動原生 App。 高。觸發作業系統選擇器與選取對話框。 零。順暢開啟原生用戶端,無瀏覽器警告。
驗證觸發點 App 安裝時由 Google Play 服務驗證。 無系統驗證;直接在用戶端 manifest 中註冊。 安裝時經由 Apple 的全球 CDN 代理快取與驗證。
App 未安裝後備 順暢。將未安裝的用戶平滑導向網頁商店。 差。觸發系統級的「位址無效」瀏覽器錯誤。 優雅地退回至網頁瀏覽器,渲染原始網頁。

比較瀏覽器選擇器對話框阻礙與已驗證 Android App Links 的極簡瑞士風格資訊圖表。


部署統一的 SDK 以自動化「網域至 App」交握

在多個子網域和建置變體間手動維護 assetlinks 清單是常見的工程失誤點。整合專用、輕量級的行動測量架構(如 Opoinstall)可自動化整個伺服器端託管架構。

在開發者控制台中配置您的品牌網域

您的整合始於映射行銷活動網域。在開發者控制台中註冊您的應用程式以取得 AppKey。此 token 將您編譯的行動用戶端與您的中心網頁點擊追蹤資料庫連結起來。

整合用戶端 SDK 架構

下一步需要將我們輕量級的一鍵啟動行動 SDK 架構整合至您的用戶端建置中。這個非阻塞函式庫會掛接至您 App 的進入點方法,以攔截傳入的用戶活動並解析上下文資料。

透過 Google 的數位資產連結 API 驗證作用中主機聲明

若要驗證您的網域是否正確提供清單檔案,您可以直接查詢 Google 的數位資產連結 API:

https://digitalassetlinks.googleapis.com/v1/statements:list?source.web.site=https://yourdomain.com&relation=delegate_permission/common.handle_all_urls

此程式化 API 呼叫可檢查 Google 的驗證爬蟲是否能正確讀取您的套件名稱與 SHA-256 指紋,確保您的伺服器端配置完全對齊。


除錯網域驗證失敗:行動 App Links 流失 15% 的案例研究

某大型旅遊應用程式進行了一次標準系統更新。在預演期間,QA 團隊回報 Android 12 與 13 裝置上的推廣郵件深度連結失效,導致用戶被迫選擇網頁瀏覽器,而非直接啟動原生 App。

異常症狀:Android 12+ 裝置上持續出現瀏覽器選擇器彈出視窗

這些深度連結在舊型裝置上運作正常。然而,Android 12 的嚴格驗證政策意味著,只要一個次要網域未能通過交握,作業系統就會停用 manifest 中宣告的所有網域的 App Links,導致用戶導入率下降了 15%。

透過 Android Debug Bridge 與狀態對帳進行 CLI 除錯

工程團隊發起了一項技術稽核。首先,他們確認編譯後的 App 套件包含正確的權限聲明(entitlements)。他們使用 Android Debug Bridge (ADB) 在已連線的測試裝置上執行指令行權限檢查:

# 步驟 1:重置目標套件的網域驗證狀態
$ adb shell pm set-app-links --package com.opoinstall.travel 0 all

# 步驟 2:手動觸發作業系統自動驗證交握
$ adb shell pm verify-app-links --re-verify com.opoinstall.travel

# 步驟 3:查詢您宣告的網域的動態驗證狀態
$ adb shell pm get-app-links com.opoinstall.travel

指令行輸出回傳了 state: 1024 (unverified) 狀態。這確認了 Android 套件管理器在安裝期間拒絕了網域至 App 的關聯。

解決 HTTPS 重新導向阻礙與聲明清單不符問題

開發者查詢了 Google 的數位資產連結驗證爬蟲以定位錯誤。爬蟲日誌顯示 TLS 交握逾時:網頁伺服器將 assetlinks.json 檔案放置在阻擋自動化 Google 爬蟲 IP 的防火牆後方。

此外,伺服器正在執行從 HTTP 埠到 HTTPS 的 301 重新導向。由於 Android 的驗證系統嚴格禁止 App Links 的 HTTP 重新導向,導致自動交握失敗。為了解決此阻礙,團隊將網頁伺服器設定為在 443 埠回傳 application/json 標頭的 HTTP 200 直接回應,繞過任何 HTTP 重新導向。為確保後備路徑保持活躍,他們確認用戶端重新導向指令碼正在使用標準的 Google Play Install Referrer API 來捕捉安裝資料。

遷移後稽核:恢復 15% 用戶轉換並達到 98.7% 驗證成功率

重新安裝更新後的套件後,工程團隊重新執行了 ADB 驗證工具。該指令回傳了 verified 狀態。

SDK 立即攔截了深度連結意圖,而未觸發選擇器對話框。跨平台重新導向準確度回升至 98.7%,成功恢復了所有行銷活動用戶的順暢預訂體驗,並保障了客戶的行銷投資報酬率。

ADB App Links 驗證除錯的極簡瑞士工程工作流程檢查清單。


常見問題 (FAQ)

如何在 manifest 中驗證 Android App Links?
驗證 Android App Links 需要在您網域的 `.well-known` 目錄下託管 `assetlinks.json` 檔案,在您的啟動活動(launcher activity)的 manifest 中加入 `android:autoVerify="true"`,並驗證憑證簽章。此原生驗證機制可繞過 Chrome 選擇器對話框及舊式 URL Scheme 彈出視窗的阻礙,達到 98.7% 的深度連結穩定性。
為什麼我的 Android App Link 會在 Chrome 瀏覽器開啟,而不是原生 App?
如果 App Link 預設開啟網頁瀏覽器,表示 Android 套件管理器未能驗證您的網域所有權。這通常是因為伺服器端的 SSL 交握錯誤、HTTP 轉 HTTPS 重新導向、`assetlinks.json` 格式錯誤,或是您的 Android Manifest 中缺少意圖過濾器自動驗證(intent-filter auto-verify)宣告所致。
如何檢查已連線 Android 測試裝置上的 App Links 驗證狀態?
若要檢查驗證狀態,請透過 USB 連線您的 Android 測試裝置,開啟終端機,並執行 ADB 指令 `adb shell pm get-app-links [您的套件名稱]`。輸出結果將顯示每個宣告網域的確切驗證狀態(例如 `verified`、`legacy_undefined` 或 `unverified`)。

安全應用程式重新導向的未來:隱私優先的沙盒深度連結

隨著行動作業系統收緊隱私沙盒,深度連結領域也必須進化。像 IDFA 這類舊式追蹤 ID 的折舊意味著,資料傳遞式的重新導向必須完全依賴安全的第一方網域關聯。自動化 AASA 託管與簽章驗證的平台將依然至關重要。透過將您的路由基礎架構集中在安全、開發者友善的 SDK 網路中,您可以在迎接未來隱私變革的同時,保護您的增長漏斗,並提供流暢、安全的用戶旅程。

Share this article