android12(?) DynamicLinksのバグまとめ(追記更新)
こちらに最新版を書き直しました。
発生条件がよくわかっていないものの
恐ろしいバグに遭遇したので備忘録として残しておきます。
マニフェストにちゃんと記載しているにダイナミックリンクがエラーになる
そもそもダイナミックリンクがエラーってどういうこと?????
って感じなのですが結論から話してしまうと、
ダイナミックリンクをタップした後
アプリを開く際にURLが改変されてしまう
みたいです;;;;;;;;
こちらも発生原因はよくわかっておらず、
android12だからなのか一部の機種依存バグなのかも
よくわかっていません。
解決方法
マニフェストに特別なURLスキームを追加することで解決できます。
befor
<activity
android:name="DeepLinkActivity"
android:launchMode="singleInstance"
android:screenOrientation="portrait"
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:host="@string/dynamic_link_host"
android:scheme="https" />
<!-- webViewからダイナミックリンクをハンドルするとschemeがintent://になるので対応 -->
<data
android:host="@string/dynamic_link_host"
android:scheme="intent"/>
</intent-filter>
</activity>
after
<activity
android:name="DeepLinkActivity"
android:launchMode="singleInstance"
android:screenOrientation="portrait"
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:host="@string/dynamic_link_host"
android:scheme="https" />
<!-- これ↓を追加 -->
<data
android:host="{your-project}.firebaseapp.com"
android:scheme="https"
tools:ignore="AppLinkUrlError" />
<!-- webViewからダイナミックリンクをハンドルするとschemeがintent://になるので対応 -->
<data
android:host="@string/dynamic_link_host"
android:scheme="intent"/>
</intent-filter>
</activity>
{your-project}にはFirebaseのプロジェクト名を入れてください。
- 例
プロジェクト名がHogeHoge-Prodであれば
HogeHoge-Prod.firebaseapp.com
になるということです。
ダイナミックリンクに動的にクエリパラメータを付けても抜け落ちてしまう
内容はもうタイトル通りです.......
ダイナミックリンクの元DeepLinkにクエリパラメータを
初期値として設定しておくみたいな形であれば取得できるのですが、
APIで動的に付けたり、様々なユースケースで付けるパラメータを変えたい場合に
抜け落ちてしまうということですね(非常に困る)
こちらも上記同様に
android12だからなのか一部の機種依存バグなのかも
よくわかっていません.........
解決方法
私の場合は(全プロジェクトに適用できる気がしないのでこのような言い方をしています)
ダイナミックリンクの短縮URLではなく
中身のDeepLinkにクエリパラメータを付けたものを使って押下すると
無事にアプリが起動した上でちゃんとクエリパラメータを取得することができました。
また、
私はできなかったのですがこの記事のような方法でも
取得できるかもしれないとのことです。
しかしFirebase側に
&apn=&afl=&ofl=のような形で登録できないので
どうやったの??????という感じです。
不安点
マニフェストに下記のようなスキームとホストを記述していないのに
中身のDeepLinkにクエリパラメータを付けたもの
なぜかアプリが立ち上がる点(ほんとどうして????)
中身のDeepLinkで対応してしまうと
両方OS対応している場合にiOS側が
中身のDeepLinkではアプリを立ち上げることができない。
色々と試行錯誤運用面でカバーできるかもしれないが非常に辛い........
発生端末
docomo Xperia1Ⅲ android12
Pixel 4a android12
参考資料
Discussion