Firebase Dynamic Link在Android 版FB WebView開啟無法導向App(問題紀錄)

Randy
5 min readNov 3, 2022

--

近期接到反饋得知Firebase Dynamic Link的短網址, 在App已安裝狀態下透過FB in-app WebView開啟會直接進入到Play Store而不是導向App內.
這樣的問題查找相關資料發現, 似乎蠻多人也都有遇到這樣的問題[1.][2.][3.]

嘗試了一些方法記錄如下:

<1.> 直接問官方
看到Github issue有人反映到直接問了Firebase Support Team, 但會得到其他App的WebView客製化邏輯處理不在他們所掌控中, 通知用戶不要用FB開Dynamic Link[1.]….囧

<2.> 替換其他套件
除了Firebase Dynamic Link之外, 也有其他解決方案如: Branch.io[4.].
但會需要了解服務的收費機制及後續專案處理上的migration.

< 3.> 使用原本的Firebase Dynamic Link搭配中繼頁處理
Firebase Dynamic Link的url不要在App端去產生, 而是使用一中繼頁面進行FDL的產生與導向. 中繼頁存在另一目的主要針對是否為FB in-app webview[3.]進行客製化的導向處理. 然而由於FB貼文連結如若無og tag資訊無法產生連結預覽效果, 因此中繼頁無法為靜態頁須以動態方式生成[5.], 才能依據不同的內容連結提供不同的og tag資訊. 連結是否能順利顯示預覽可使用分享偵錯工具[6.]來進行驗證.

<4.> 驗證AndroidManifest.xml設定
最終, FB in-app WebView會依據是否提供額外的deeplink[7.][8.]設定以識別是否導向App端.

AndroidManifest.xml中寫入要接收的deeplink設定, 由於想要處理任意由FDL導向至App的內容域名, 因此使用wildcard:

// AndroidManifest.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:host="*"
android:scheme="https" />
</intent-filter>
...

由FDL導向至App時, 可以加入Deeplink處理在入口頁面:


...
val fdlDomain = "https://xxxxx.page.link"
val dataString = intent.dataString
if (intentDataString == null || dataString.startsWith(fdlDomain)){
// Firebase Dynamic Link format. In either case let Firebase handle
// it.
Firebase.dynamicLinks.getDynamicLink(intent)...
} else {
// We have received a deep link in non-Firebase dynamic link format. // So far this only happens when launching Dynamic links from
// Facebook app. An what happens is that Facebook resolves the
// Firebase Dynamic link into an actual deep link. For example, it // resolves: <i>https://xxxxx.page.link/XXXX</i> to: deeplink
// <i>https://www.ooooo.com/playlist/34</i>
val deepLink = Uri.parse(dataString)
val intentLocalCopy = intent
intentLocalCopy.data = null
intent = intentLocalCopy
}
...

Reference
[1.] https://github.com/firebase/firebase-android-sdk/issues/916
[2.] https://stackoverflow.com/questions/37487266/dynamic-links-in-facebook-mobile-app-is-not-deep-linked-to-app/41592330#41592330
[3.] https://stackoverflow.com/questions/36402330/how-to-prevent-facebook-in-app-browser-from-opening-my-website-links
[4.] https://branch.io/zh/
[5.] https://gist.github.com/rsevil/377690cef7bde5fe6825e3d248af035d
[6.] https://developers.facebook.com/tools/debug/
[7.] https://firebase.google.com/docs/dynamic-links/android/receive#add-an-intent-filter-for-deep-links
[8.] https://medium.com/@milan.jovic86/we-have-experienced-the-same-issue-in-our-app-i-e-ca4bce0adcc8

--

--