2021年11月24日 星期三

Android Deeplink || Applink on Android 12

最近同事反應在 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 
等價於
adb shell dumpsys package d

然後可以看到

 com.google.android.apps.youtube.music:
    ID: c919f15b-776b-4f6b-98bd-ac62ab24b05e
    Signatures: [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_configured
      music.youtube: system_configured
      m.music.youtube.com: system_configured
      yt.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

結果會是


大家可以自己試試~

文件




沒有留言:

張貼留言