跳至主要內容

為 Android 設定應用程式連結

深層連結是一種使用 URI 啟動應用程式的機制。此 URI 包含 scheme、host 和 path,並將應用程式開啟至特定畫面。

應用程式連結是一種使用 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. 在具有 .MainActivity<activity> 標籤內新增以下中繼資料標籤和 intent 篩選器。

    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 的簽署方式而有所不同。

使用 Google Play 應用程式簽署

#

您可以直接從 Play 開發人員控制台找到 sha256 指紋。在 Play 控制台中開啟您的應用程式,位於「發布 > 設定 > 應用程式完整性 > 應用程式簽署」標籤下

Screenshot of sha256 fingerprint in play developer console

使用本機金鑰儲存

#

如果您在本機儲存金鑰,您可以使用以下指令產生 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