🐷

android12 DynamicLinksのやばいバグの件について。

2022/06/29に公開

https://zenn.dev/apple_nktn/articles/042f870bd48ab6

以前こちらを記憶の限りで書いたのですが、

挙動的に記事の内容とはちょっと違っていたので正確に書き直したいと思います。


恐らく端末固有バグで且つアプリによって

発生するアプリがあったり発生しないアプリがあるっぽいので

状況としてはかなり複雑っぽいです。


ダイナミックリンクをタップしても一瞬アプリが入ってないかのような動作になった後、通常導線でアプリが開いてしまう

上記タイトルままで、

ダイナミックリンクをタップすると一瞬アプリが入っていない時の

ローディングインジケーターが表示され、

その後アプリが通常導線で開かれるような動きになります。


解決方法

マニフェストに特別な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で動的に付けたり、様々なユースケースで付けるパラメータを変えたい場合に

抜け落ちてしまうということですね(非常に困る)


解決方法

ダイナミックリンクの短縮URLではなく

中身のDeepLinkにクエリパラメータを付けたものを使って押下すると

無事にアプリが起動した上でちゃんとクエリパラメータを取得することができました。

画像の例で言うと

https://hogehoge?ageage=012345

というような感じです!


因みにですがこちらの対応は

ダイナミックリンクをタップしても一瞬アプリが入ってないかのような動作になった後、通常導線でアプリが開いてしまう

こちらで追加したマニフェストに記述を消すと

このようなエラーとなって遷移することができなくなります。


注意

ただこちらの対応を取ると、

iOS側で受け取ることができないので

中身のDeepLinkを短縮URLと同一にして

iOS側でも受け取れるようにするなどの一工夫が必要になってきそうです.......


他に全く情報がないバグなので他にも何か情報をお持ちの方がいらっしゃれば

是非コメント欄に書いて欲しいです。

よろしくお願い致します。

関係あるかも記事

https://doordash.engineering/2022/01/25/your-deep-links-might-be-broken-web-intents-and-android-12/

Discussion