링크를 누르면 앱내의 특정페이지로 가게끔 작업하자
다이나믹링크 패키지 설치
https://pub.dev/packages/firebase_dynamic_links
링크 만드는방법중 파이어베이스 내에서 만드는방법과 코드로 따로만드는방법이있는데
코드로 만들어야 유동적인 파라미터값을 넣을수 있어서 코드로 만드는방법을 사용한다.
링크생성부분
final dynamicLinkParams = DynamicLinkParameters(
link: Uri.parse("https://www.example.com/?name='hoho'&age='30' "), //이름과 나이를 파라미터로
uriPrefix: "https://example.page.link",//파베에있는 https://page.link로 끝나는 메인링크
androidParameters: const AndroidParameters(packageName: "com.example.app"),
iosParameters: const IOSParameters(bundleId: "com.example.app"),
);
final dynamicLink =
await FirebaseDynamicLinks.instance.buildShortLink(dynamicLinkParams);
링크생성 완료
앱 링크받을 셋팅
링크를 열기위한 셋팅을 먼저 해줘야한다.
android
android-app-src-main-AndroidManifest.xml로 들어가서
<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="example.com"
android:scheme="https"/>
</intent-filter>
를
application-activity안에 넣는다
<application
android:name="${applicationName}"
android:icon="@mipmap/launcher_icon"
android:usesCleartextTraffic="true">
<activity
android:name=".MainActivity"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
android:exported="true"
android:hardwareAccelerated="true"
android:launchMode="singleTop"
android:theme="@style/LaunchTheme"
android:windowSoftInputMode="adjustResize">
<meta-data
android:name="io.flutter.embedding.android.NormalTheme"
android:resource="@style/NormalTheme" />
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<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="example.page.link" //파베에있는메인주소
android:scheme="https"/>
</intent-filter>
</activity>
ios
xcode로 들어가서
Runner - Singning & Capabilities - +Capability클릭하여 Associated Domains를 추가한다
domains에 applinks:파베에있는메인주소
ex)applinks:example.page.link을 추가한다
링크받는부분
이제 main에서 꺼진상태에서 값받는부분과 포,백그라운드 상태서 값받는부분을 넣고
//앱꺼졌을시
final PendingDynamicLinkData? initialLink = await FirebaseDynamicLinks.instance.getInitialLink();
handleLinkData(initialLink);
//포그라운드,백그라운드용
FirebaseDynamicLinks.instance.onLink.listen((dynamicLinkData) {
handleLinkData(dynamicLinkData);
}).onError((error) {
print("@@dynamic link listen error=${error}");
});
void handleLinkData(PendingDynamicLinkData? data) {
final Uri? uri = data?.link;
if (uri != null) {
final queryParams = uri.queryParameters;
if (queryParams.isNotEmpty) {
String? name = queryParams["name"];
String? age = queryParams["age"];
if (name != null) {
//name with 이동처리
}
if (age != null) {
//age with 이동처리
}
// verify the username is parsed correctly
print("@@My name is: $name / age is $age");
}
}
}
만약 셋팅이 잘못되었다면
앱이 깔려있어도 앱에 접속이안되고 다운받는 스토어로 갈것이다.
참고:
https://firebase.google.com/docs/dynamic-links/flutter/create?hl=ko
https://firebase.google.com/docs/dynamic-links/flutter/receive?hl=ko