最近同事反應在 android 12 上,deeplink 壞掉了,於是展開了一段追查之旅。
總之就是 deeplink 在 android 12 的行為預設為先開啟瀏覽器,如果你的網址在瀏覽器 redirect 後有做處理,那 app 端可以接上照理說沒有什麼問題,但是如果沒有,那就轉不回 app 了,於是這也不是我要的行為,app 這邊已經都直接解析原始網址了,所以在 android 12 基本上就是不能用。
於是查到了在 Manifest 裡的 intent-filter 後面加上 android:autoVerify="true" ,以為這樣就解了,殊不知這個有沒有加的差異只是會不會每次問要使用哪個 app 開啟,選定後就不會再問了,雖然有助於在 12 以下 app 點擊 deeplink 的速度,但不是我要的。
最後就是 applink,原來網址只要驗證過,在 android 12 就會進入 verified links, android:autoVerify="true" 也不用加,真棒。
youtube app |
所以接下來就是用 AS 產出 assetlinks.json ,再丟到這個路徑下
https://<your domain>/.well-known/assetlinks.json
看起來會像
借用一下優秀的 youtube app |
在 sha256 的部分可以放上 release 跟 debug 的,但是!!!我的 debug 版完全沒有作用,哭!
請前端放上這個後,再下載架上的 app,就可以看到在 verified links 裡面多了我們要的東西,大概就是這樣。
要請 AS 產出 assetlinks.json 在 tools 裡
裡面可以幫你直接在 manifest 裡設定 applink,還可以測試這個 applink 是不是可以作用在你的 app 上,很蚌~
然後也可以用 adb 看你的 app applink 有沒有驗證成功
adb shell dumpsys package domain-preferred-apps
等價於
然後可以看到
com.google.android.apps.youtube.music:ID: c919f15b-776b-4f6b-98bd-ac62ab24b05eSignatures: [A2:A1:AD:7B:A7:F4:1D:FC:A4:51:4E:2A:FE:B9:06:91:71:9A:F6:D0:FD:BE:D4:B0:9B:BF:0E:D8:97:70:1C:EB]Domain verification state:music.youtu.be: system_configuredmusic.youtube: system_configuredm.music.youtube.com: system_configuredyt.be: system_configured
可以看到 youtube.music 這個 app 的 applink 是
"The domain was approved automatically by the device configuration.",說明在這邊
if 是我們自己驗證過的網站,狀態會是 "verified"
此外也可以用這個網址來查詢,以 www.youtube.com 為例:
https://digitalassetlinks.googleapis.com/v1/statements:list?source.web.site=https://www.youtube.com&relation=delegate_permission/common.handle_all_urls
結果會是
大家可以自己試試~
文件
沒有留言:
張貼留言