🍣
【Flutter】DynamicLink.getInitialLinkでURLパラメータが取得できない
firebase_dynamic_links: 5.0.11
ではgetInitialLinkが動作しないIssueが報告されています。
(Issue名はAppStoreインストールについてだが、スレッド内でインストール済みについても触れています)
DynamicLink.getInitialLink をつかっても null が返ってきてしまうのですが、
app_linksを使うと、アプリ起動に利用された DeepLinks が取得できます。
ただし、ここで取得されるURLは、iOSの場合、ダイナミックリンクの解釈前です。
ダイナミックリンクからURLを取り出すgetDynamicLink
を利用することでこのバグに対するパッチ処理となります。
まとめると次のコードで動作しました。
init
// リスナーを貼ります
Future<void> init() async {
final AppLinks _appLinks = AppLinks();
// Check initial link if app was in cold state (terminated)
final appLink = await _appLinks.getInitialAppLink();
if (appLink != null) {
final Uri? _initialLink = await _patchDynamicLink(appLink);
_openAppLink(_initialLink!);
}
// Handle link when app is in warm state (front or background)
_appLinks.uriLinkStream.listen((uri) async {
final Uri? _uri = await _patchDynamicLink(uri);
if (_uri != null) {
_openAppLink(_uri);
}
});
}
_patchDynamicLink
Future<Uri?> _patchDynamicLink(Uri appLink) async {
if (Platform.isIOS) {
try {
final PendingDynamicLinkData? dynamicLink =
await FirebaseDynamicLinks.instance.getDynamicLink(appLink);
return dynamicLink?.link;
} catch (e) {
log(e);
}
}
return appLink;
}
_openAppLink
void _openAppLink(Uri url) {
// do anything
}
参考になれば、幸いです!
Discussion