跳到主內容

為 Android 設定應用連結

瞭解如何為使用 Flutter 構建的 Android 應用程式設定應用連結。

深度連結 (Deep linking) 是一種透過 URI 啟動應用的機制。此 URI 包含方案 (scheme)、主機 (host) 和路徑 (path),並將應用開啟到特定頁面。

應用連結 (App link) 是一種使用 httphttps 的深度連結,專屬於 Android 裝置。

設定應用連結需要擁有一個網站域名。如果沒有,可以考慮使用 Firebase HostingGitHub Pages 作為臨時解決方案。

設定好深度連結後,可以對其進行驗證。要了解更多資訊,請參閱 驗證深度連結

1. 自定義 Flutter 應用程式

#

編寫一個能夠處理傳入 URL 的 Flutter 應用。本示例使用 go_router 包來處理路由。Flutter 團隊維護著 go_router 包。它提供了一個簡單的 API 來處理複雜的路由場景。

  1. 要建立新應用程式,請輸入 flutter create <app-name>

    flutter create deeplink_cookbook
    
  2. 要將 go_router 包包含在您的應用中,請將 go_router 依賴項新增到專案中

    要新增 go_router 包作為依賴項,請執行 flutter pub add

    flutter pub add go_router
    
  3. 要處理路由,請在 main.dart 檔案中建立一個 GoRouter 物件

    main.dart
    dart
    import 'package:flutter/material.dart';
    import 'package:go_router/go_router.dart';
    
    void main() => runApp(MaterialApp.router(routerConfig: router));
    
    /// This handles '/' and '/details'.
    final router = GoRouter(
      routes: [
        GoRoute(
          path: '/',
          builder: (_, _) => Scaffold(
            appBar: AppBar(title: const Text('Home Screen')),
          ),
          routes: [
            GoRoute(
              path: 'details',
              builder: (_, _) => Scaffold(
                appBar: AppBar(title: const Text('Details Screen')),
              ),
            ),
          ],
        ),
      ],
    );
    

2. 修改 AndroidManifest.xml

#
  1. 使用 VS Code 或 Android Studio 開啟 Flutter 專案。

  2. 導航到 android/app/src/main/AndroidManifest.xml 檔案。

  3. <activity> 標籤(即 .MainActivity 所在的標籤)內新增以下元資料 (metadata) 標籤和意圖過濾器 (intent filter)。

    example.com 替換為您自己的網站域名。

    xml
    <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" android:host="example.com" />
        <data android:scheme="https" />
    </intent-filter>
    
#

使用擁有域名的 Web 伺服器託管 assetlinks.json 檔案。此檔案告知移動瀏覽器開啟特定的 Android 應用程式,而不是開啟瀏覽器。要建立該檔案,請獲取您在上一步中建立的 Flutter 應用的包名,以及您構建 APK 時將使用的簽名金鑰的 sha256 指紋。

包名

#

AndroidManifest.xml 中找到包名,即 <manifest> 標籤下的 package 屬性。包名通常格式為 com.example.*

sha256 指紋

#

根據 APK 簽名方式的不同,獲取 sha256 指紋的過程可能會有所差異。

使用 Google Play 應用簽名

#

您可以直接從 Play 管理中心找到 sha256 指紋。在 Play 管理中心開啟您的應用,進入 釋出 (Release) > 設定 (Setup) > 應用完整性 (App Integrity) > 應用簽名 (App Signing) 選項卡

Screenshot of sha256 fingerprint in play developer console

使用本地金鑰庫 (keystore)

#

如果您在本地儲存金鑰,可以使用以下命令生成 sha256 指紋

keytool -list -v -keystore <path-to-keystore>
#

託管的檔案應類似於以下內容

json
[{
  "relation": ["delegate_permission/common.handle_all_urls"],
  "target": {
    "namespace": "android_app",
    "package_name": "com.example.deeplink_cookbook",
    "sha256_cert_fingerprints":
    ["FF:2A:CF:7B:DD:CC:F1:03:3E:E8:B2:27:7C:A2:E3:3C:DE:13:DB:AC:8E:EB:3A:B9:72:A1:0E:26:8A:F5:EC:AF"]
  }
}]
  1. package_name 值設定為您的 Android 應用程式 ID。

  2. sha256_cert_fingerprints 設定為您在上一步中獲得的值。

  3. 將該檔案託管在類似於以下 URL 的位置:<webdomain>/.well-known/assetlinks.json

  4. 驗證您的瀏覽器是否可以訪問此檔案。

測試

#

您可以使用真實裝置或模擬器來測試應用連結,但首先請確保您已經在裝置上至少執行過一次 flutter run。這可以確保 Flutter 應用程式已安裝。

Emulator screenshot

測試應用設定,請使用 adb 命令

adb shell 'am start -a android.intent.action.VIEW \
    -c android.intent.category.BROWSABLE \
    -d "http://<web-domain>/details"' \
    <package name>

同時測試 Web 和應用設定,您必須直接透過 Web 瀏覽器或另一個應用點選連結。一種方法是建立一個 Google 文件,新增該連結,然後點選它。

如果一切設定正確,Flutter 應用程式將啟動並顯示詳細資訊頁面。

Deeplinked Emulator screenshot

附錄

#

原始碼:deeplink_cookbook