為 Android 設定應用連結
瞭解如何為使用 Flutter 構建的 Android 應用程式設定應用連結。
深度連結 (Deep linking) 是一種透過 URI 啟動應用的機制。此 URI 包含方案 (scheme)、主機 (host) 和路徑 (path),並將應用開啟到特定頁面。
應用連結 (App link) 是一種使用 http 或 https 的深度連結,專屬於 Android 裝置。
設定應用連結需要擁有一個網站域名。如果沒有,可以考慮使用 Firebase Hosting 或 GitHub Pages 作為臨時解決方案。
設定好深度連結後,可以對其進行驗證。要了解更多資訊,請參閱 驗證深度連結。
1. 自定義 Flutter 應用程式
#編寫一個能夠處理傳入 URL 的 Flutter 應用。本示例使用 go_router 包來處理路由。Flutter 團隊維護著 go_router 包。它提供了一個簡單的 API 來處理複雜的路由場景。
-
要建立新應用程式,請輸入
flutter create <app-name>flutter create deeplink_cookbook -
要將
go_router包包含在您的應用中,請將go_router依賴項新增到專案中要新增
go_router包作為依賴項,請執行flutter pub addflutter pub add go_router -
要處理路由,請在
main.dart檔案中建立一個GoRouter物件main.dartdartimport '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
#使用 VS Code 或 Android Studio 開啟 Flutter 專案。
導航到
android/app/src/main/AndroidManifest.xml檔案。-
在
<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>
3. 託管 assetlinks.json 檔案
#使用擁有域名的 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) 選項卡
使用本地金鑰庫 (keystore)
#如果您在本地儲存金鑰,可以使用以下命令生成 sha256 指紋
keytool -list -v -keystore <path-to-keystore>
assetlinks.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"]
}
}]
將
package_name值設定為您的 Android 應用程式 ID。-
將
sha256_cert_fingerprints設定為您在上一步中獲得的值。 -
將該檔案託管在類似於以下 URL 的位置:
<webdomain>/.well-known/assetlinks.json 驗證您的瀏覽器是否可以訪問此檔案。
測試
#您可以使用真實裝置或模擬器來測試應用連結,但首先請確保您已經在裝置上至少執行過一次 flutter run。這可以確保 Flutter 應用程式已安裝。
要僅測試應用設定,請使用 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 應用程式將啟動並顯示詳細資訊頁面。