在電子郵件和簡訊中使用及設定深層連結 deeplinks
深層連結可協助您將電子郵件或簡訊訊息的收件者帶至行動應用程式中的特定畫面或內容片段。 它有助於引導人們直接使用預期的應用程式內體驗,而不需透過網頁瀏覽器或應用程式商店路由,讓歷程保持在相關性和品牌上。
當您的收件者按一下深層連結時,就會直接導向至預期的應用程式內內容 — 前提是您已完成此頁面上詳述的設定步驟,其中涵蓋:
- 如何在Journey Optimizer中設定電子郵件的深層連結
- 如何在行動應用程式中為iOS和Android實作深層連結處理
/ee/v1/mclick/*)對iOS和Android進行深層連結,以確保相容性和點選追蹤。製作深層連結 authoring
電子郵件 authoring-email
對於電子郵件訊息,有兩個選項可插入深層連結:
-
電子郵件Designer:確定連結追蹤已啟用。 選取您要連結的元素(文字、按鈕或影像),按一下內容工具列中的[插入連結] ,然後選擇[深層連結]以輸入深層連結URL。 進一步瞭解插入連結
-
Personalization編輯器(程式碼):使用下列程式碼片段,將深層連結直接插入HTML:
code language-html <a class="arc-link" data-nl-type="DEEPLINK" href="<<deeplink_url>>" id="acr-link-7821368" style="text-decoration:underline;" target="_blank" data-tracking-type="DEEPLINK">Click Here</a>將
<<deeplink_url>>取代為您實際的深層連結URL,並為每個區塊使用唯一的id以避免衝突。
簡訊 authoring-sms
對於SMS,深層連結是使用個人化編輯器中的 Url 協助程式功能來撰寫。 在本節中進一步瞭解新增簡訊內容的連結。
若要在SMS內容中插入深層連結,請使用下列語法:
{{url originalUrl='<<url>>' type='DEEPLINK' action='CLICK'}}
將<<url>>取代為您的實際深層連結URL。
Journey Optimizer中的設定 configuration
若要在行動應用程式的電子郵件和簡訊中使用深層連結,請完成下列設定步驟。
/ee/v1/mclick/*下的URL,Adobe會託管並解析。行動應用程式實施 mobile-implementation
本節說明如何使用Adobe Journey Optimizer實作行動深層連結,以便在典型的 HTTPS 設定中(通用連結和應用程式連結),單一URL可以:
- 安裝應用程式時,在行動應用程式內開啟特定畫面,或
- 未安裝應用程式時開啟您的網站作為遞補。
為您的訊息啟用連結追蹤後,Journey Optimizer會繼續追蹤這些點按,將它們納入報告中,而且如果您在訊息上執行這些點按,則可以在內容實驗中使用它們。
本節提供深層連結的常見實作模式。 確切的設定取決於應用程式架構和路由架構。
iOS (通用連結) ios-implementation
-
在Xcode中,透過簽署與功能 > +功能 > 關聯的網域來選取您的目標。
-
為您委派的子網域新增專案,例如:
code language-text applinks:www.mybusiness.com applinks:data.email.mybusiness.com -
在應用程式中處理通用連結,並從回應標題取得原始連結。
accordion 範例:iOS 13+搭配場景 code language-swift class SceneDelegate: UIResponder, UIWindowSceneDelegate { func scene(_ scene: UIScene, continue userActivity: NSUserActivity) { guard userActivity.activityType == NSUserActivityTypeBrowsingWeb, let incomingURL = userActivity.webpageURL else { return } handleUniversalLink(url: incomingURL) } private func handleUniversalLink(url: URL) { // Only handle AJO tracked mobile clicks guard url.host == "data.email.mybusiness.com", url.path.hasPrefix("/ee/v1/mclick") else { // Could also handle direct www.mybusiness.com links here return } resolveTrackedUrlAndRoute(url) } private func resolveTrackedUrlAndRoute(_ trackedUrl: URL) { var request = URLRequest(url: trackedUrl) request.httpMethod = "GET" URLSession.shared.dataTask(with: request) { _, response, error in guard error == nil, let httpResponse = response as? HTTPURLResponse, let locationValue = httpResponse.allHeaderFields["Location"] as? String, let finalUrl = URL(string: locationValue) else { return } DispatchQueue.main.async { self.routeToDestination(finalUrl) } }.resume() } private func routeToDestination(_ url: URL) { // Example: map URL paths to screens // https://www.mybusiness.com/dashboard/offers/coupons // → OffersViewController for Coupons } }
mclick URL上執行 GET 並讀取**Location標題,然後根據最終** URL路由。mclick URL;這會破壞深層連結的目的。Android (應用程式連結) android-implementation
-
在您的Android應用程式中新增應用程式連結意圖篩選器。
code language-xml <activity android:name=".DeepLinkActivity" android:exported="true"> <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="https" android:host="data.email.mybusiness.com" android:pathPrefix="/ee/v1/mclick" /> </intent-filter> </activity> -
實作深層連結處理常式。
accordion 在Kotlin: code language-kotlin class DeepLinkActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val trackedUri = intent?.data if (trackedUri == null || trackedUri.host != "data.email.mybusiness.com" || !trackedUri.path.orEmpty().startsWith("/ee/v1/mclick")) { finish() return } resolveTrackedUrlAndRoute(trackedUri) } private fun resolveTrackedUrlAndRoute(trackedUri: Uri) { lifecycleScope.launch(Dispatchers.IO) { try { val finalUrl = followRedirect(trackedUri.toString()) withContext(Dispatchers.Main) { routeToDestination(finalUrl) finish() } } catch (e: Exception) { // Optionally log error, fallback to browser finish() } } } private fun followRedirect(trackedUrl: String): Uri { val client = OkHttpClient.Builder() .followRedirects(false) // We want to read Location ourselves .build() val request = Request.Builder() .url(trackedUrl) .get() .build() client.newCall(request).execute().use { response -> val location = response.header("Location") ?: throw IllegalStateException("Missing Location header") return Uri.parse(location) } } private fun routeToDestination(finalUri: Uri) { // Example: interpret https://www.mybusiness.com/dashboard/offers/coupons // and open the correct Activity / Fragment } }
mclick URL並使用**Location**標頭來決定最終目的地。followRedirects(false)來控制重新導向處理,並視需要準確地記錄分析。建議作法 deeplink-best-practices
- 使用穩定路徑:偏好可復原應用程式UI變更的路由(例如
/account/orders而非/tab/3/view/2)。 - 將追蹤的路徑列入帳戶:啟用連結追蹤時,點按的連結可能會使用追蹤的路徑模式(例如
/ee/v1/mclick/)。 請確定您的路由器可在解析追蹤的連結後剖析最終URL。 - 讓引數維持可預測:定義一致的引數配置(例如
?orderId=12345)。 - 避免URL中的敏感資料:請勿將機密或個人資料直接放入深層連結URL。
- 測試您的深層連結:傳送校樣,然後按一下已安裝應用程式之裝置上的深層連結。
- 在真實裝置上進行驗證:在實體裝置上進行驗證時,通用連結和追蹤連結解析行為會比在模擬器上更可靠。
- 驗證應用程式端路由:如果深層連結未開啟預期的畫面,請驗證應用程式端路由和URL格式(主機/路徑/查詢和URL編碼)。
- 請記得應用程式初始化:應用程式連結/通用連結行為在安裝及開啟應用程式至少一次後最為可靠。
疑難排解和常見問答( FAQ) troubleshooting-faq
- 驗證URL是否與您的應用程式註冊要處理的主機及路徑模式相符,包括在啟用連結追蹤時追蹤的點選路徑(例如
/ee/v1/mclick/下的路徑)。 - 針對iOS通用連結和Android應用程式連結,請確認網域關聯(AASA /
assetlinks.json)已正確設定且可供存取。 - 在真實裝置上進行測試(模擬器/模擬器對於連結關聯可能會有不同的行為)。
- 確認應用程式端路由器正確剖析URL路徑/查詢。
- 檢查URL編碼:保留的字元應使用URL編碼。
- 驗證引數名稱和值符合路由器的預期。
- 如果您的網站可以提供相同的HTTPS URL,則連結會在應用程式未安裝時開啟網頁作為遞補(相應地設定您的網頁目的地和路由)。
-
使用深層連結建立校訂,在iOS和Android裝置(已安裝或未安裝的情況)上按一下。
-
驗證:
- 最終電子郵件或簡訊連結值(主機/路徑/查詢)
- 作業系統層級的關聯(如果使用通用連結/應用程式連結)
- 應用程式內路由結果
assetlinks.json設定。appname://path)?appname://path),但建議的方法是通用連結或應用程式連結(https://),符合此頁面設定與實作區段中的HTTPS設定。mclick URL上執行GET時,您在Journey Optimizer中設定的UTM引數會包含在Location標頭中傳回的最終URL中,以便您將其用於應用程式內分析。/ee/v1/click/ URL的使用者體驗為何?mclick流程以應用程式深層連結處理。