pubspec.yaml 에 의존성 추가
firebase_dynamic_links: ^5.3.7
android 설정
androidmanifest.xml
<!-- [] for dynamic link start--> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:host="https://eusample.page.link(여기에 파이어베이스에서 설정한 링크 입력)" android:scheme="https"/> </intent-filter> <!-- [] for dynamic link end-->
ios 설정
Universal Link 등록
ios/Runner/Runner.entitlements 파일에 아래내용 추가<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>com.apple.developer.associated-domains</key> <array> <string>applinks:파이어베이스에서 설정한 링크 입력</string> </array> </dict> </plist>
커스텀 도메인 등록
앞서 무료 제공된 도메인이 아니라 커스텀된 도메인을 등록했다면 ios/Runner/Info.plist 파일에 아래와 같이 추가해줘야 한다.<key>FirebaseDynamicLinksCustomDomains</key> <array> <string>https://커스텀 도메인 입력</string> </array>
코드 구현
Future<String> createDynamicLink(
{bool short = true,
required String path,
required String queryParam}) async {
FirebaseDynamicLinks dynamicLinks = FirebaseDynamicLinks.instance;
final DynamicLinkParameters parameters = DynamicLinkParameters(
uriPrefix: "https://eusample.page.link",
link: Uri.parse('https://eusample.page.link/$path?$queryParam'),
androidParameters: const AndroidParameters(
packageName: 'contact.eu.sample.eu_sample',
minimumVersion: 0,
),
iosParameters: const IOSParameters(
bundleId: 'contact.eu.sample.eu_sample',
minimumVersion: '1.0.0',
),
);
//print(parameters);
Uri? url;
if (short) {
final ShortDynamicLink shortLink = await dynamicLinks.buildShortLink(
parameters,
);
url = shortLink.shortUrl;
} else {
url = await dynamicLinks.buildLink(parameters);
}
return url.toString();
}
Future<void> initDynamicLinks() async {
FirebaseDynamicLinks dynamicLinks = FirebaseDynamicLinks.instance;
/// 다이나믹 링크 콜백 등록
dynamicLinks.onLink.listen((dynamicLinkData) {
Uri deepLink = dynamicLinkData.link;
_handleDynamicLink(deepLink);
}).onError((error) {});
final PendingDynamicLinkData? data =
await FirebaseDynamicLinks.instance.getInitialLink();
final Uri? deepLink = data?.link;
if (deepLink != null) {
_handleDynamicLink(deepLink);
}
}
핸들링 구현부
/// 딥링크 path 에 따라 개별 동작 실행
void _handleDynamicLink(Uri deepLink) {
switch (deepLink.path) {
case "/경로":
Map<String, dynamic> queryParam = deepLink.queryParameters;
필요한 기능 구현
break;
default:
break;
}
}
main.dart
///init firebase await Firebase.initializeApp(); 이후 다이나믹 링크 초기화 메서드 호출 await initDynamicLinks();