📌

android12(?) DynamicLinksのバグまとめ(追記更新)

2022/05/19に公開

こちらに最新版を書き直しました。

https://zenn.dev/apple_nktn/articles/38ba20a8b2d69a

発生条件がよくわかっていないものの

恐ろしいバグに遭遇したので備忘録として残しておきます。

マニフェストにちゃんと記載しているにダイナミックリンクがエラーになる

そもそもダイナミックリンクがエラーってどういうこと?????

って感じなのですが結論から話してしまうと、

ダイナミックリンクをタップした後

アプリを開く際に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=のような形で登録できないので

どうやったの??????という感じです。

https://stackoverflow.com/questions/72070307/trying-to-get-the-dynamic-link-that-opened-the-app-on-android-12-gives-incomplet

不安点

マニフェストに下記のようなスキームとホストを記述していないのに

中身のDeepLinkにクエリパラメータを付けたもの

なぜかアプリが立ち上がる点(ほんとどうして????)


中身のDeepLinkで対応してしまうと

両方OS対応している場合にiOS側が

中身のDeepLinkではアプリを立ち上げることができない。

色々と試行錯誤運用面でカバーできるかもしれないが非常に辛い........

発生端末

docomo Xperia1Ⅲ android12

Pixel 4a android12

参考資料

https://stackoverflow.com/questions/61681756/deep-linking-sometimes-opens-wrong-activity

https://github.com/firebase/firebase-android-sdk/issues/3482

https://github.com/firebase/firebase-android-sdk/issues/3642

https://developer.android.google.cn/about/versions/12/behavior-changes-12?hl=ja#android-app-links-verification-changes

Discussion