Google I/O 2022에서 Firebase의 새로운 기능을 확인하세요. 자세히 알아보기

Flutter 앱에서 Firebase 동적 링크 수신

컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요.

생성 한 Firebase 동적 링크를 받으려면 앱에 동적 링크 SDK를 포함하고 앱이 로드될 때 FirebaseDynamicLinks.getDynamicLink() 메서드를 호출하여 동적 링크에 전달된 데이터를 가져와야 합니다.

  1. 아직 수행하지 않은 경우 Flutter용 Firebase SDK를 설치하고 초기화합니다 .

  2. Flutter 프로젝트의 루트 디렉터리에서 다음 명령을 실행하여 동적 링크 플러그인을 설치합니다.

    flutter pub add firebase_dynamic_links
    
  3. Android 앱을 빌드하는 경우 Firebase 콘솔의 프로젝트 설정 페이지를 열고 SHA-1 서명 키를 지정했는지 확인하세요. 앱 링크를 사용하는 경우 SHA-256 키도 지정합니다.

플랫폼 통합

앱을 빌드하는 플랫폼에 대해 다음 플랫폼 통합 단계를 완료하십시오.

기계적 인조 인간

Android에서는 앱이 설치된 경우 동적 링크가 도메인으로 리디렉션되므로 도메인의 딥 링크를 포착하는 새로운 인텐트 필터를 추가해야 합니다. 이것은 앱이 Play 스토어에서 설치/업데이트되고 계속 버튼을 한 번 탭한 후 동적 링크 데이터를 수신하는 데 필요합니다. 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>

사용자가 지정한 스킴 및 호스트에 대한 딥 링크가 있는 동적 링크를 열면 앱이 링크를 처리하기 위해 이 인텐트 필터로 활동을 시작합니다.

다음 단계는 서명 인증서의 SHA-256 지문이 앱의 Firebase 콘솔에 등록되었는지 확인하는 것입니다. 클라이언트 인증 페이지에서 SHA-256 지문을 검색하는 방법에 대한 자세한 내용을 확인할 수 있습니다.

애플 플랫폼

  1. 아직 없는 경우 Apple 개발자 계정을 만듭니다 .

  2. Firebase 콘솔의 프로젝트 설정 페이지에서 iOS 앱이 App Store ID 및 팀 ID로 올바르게 구성되었는지 확인하십시오.

  3. Apple 개발자 사이트에서 연결된 도메인 기능이 활성화된 상태에서 앱에 대한 프로비저닝 프로필을 만듭니다.

  4. Xcode에서 다음을 수행합니다.

    1. TARGETS 헤더 아래에서 앱을 엽니다.

    2. 서명 및 기능 페이지에서 팀이 등록되어 있고 프로비저닝 프로필이 설정되어 있는지 확인하십시오.

    3. Signing & Capabilities 페이지에서 Associated Domains 를 활성화하고 Associated Domains 목록에 다음을 추가합니다(example을 해당 도메인으로 교체).

      applinks:example.page.link
      
    4. 정보 페이지에서 프로젝트에 URL 유형을 추가합니다. URL 체계 필드를 앱의 번들 ID로 설정합니다. (식별자는 Bundle ID 또는 원하는 것이 될 수 있습니다.)

    5. Firebase 프로젝트에 맞춤 도메인을 설정한 경우 FirebaseDynamicLinksCustomDomains 키를 사용하여 iOS 프로젝트의 Info.plist 파일에 동적 링크 URL 프리픽스를 추가합니다.

      <?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>FirebaseDynamicLinksCustomDomains</key>
      <array>
          <string>https://custom.domain.io/path1</string>
          <string>https://custom.domain.io/path2</string>
      </array>
      
      ...other settings
      
      </dict>
      </plist>
      
    6. 선택 사항: Dynamic Links SDK의 iOS 페이스트보드 사용을 비활성화합니다.

      기본적으로 동적 링크 SDK는 설치 후 딥 링크의 안정성을 개선하기 위해 페이스트보드를 사용합니다. 동적 링크는 페이스트보드를 사용하여 사용자가 동적 링크를 열었지만 먼저 앱을 설치해야 하는 경우 설치 후 처음으로 앱을 열 때 원래 링크된 콘텐츠로 즉시 이동할 수 있도록 할 수 있습니다.

      이것의 단점은 페이스트보드를 사용하면 iOS 14 이상에서 알림이 트리거된다는 것입니다. 따라서 사용자가 앱을 처음 열 때 페이스트보드에 동적 링크 URL이 포함되어 있으면 앱이 페이스트보드에 액세스했다는 알림이 표시되어 혼동을 일으킬 수 있습니다.

      이 동작을 비활성화하려면 Xcode 프로젝트의 Info.plist 파일을 편집하고 FirebaseDeepLinkPasteboardRetrievalEnabled 키를 NO 로 설정하세요.

애플리케이션에서 동적 링크를 처리하려면 두 가지 시나리오를 구현해야 합니다.

종료된 상태

애플리케이션이 종료되면 FirebaseDynamicLinks.getInitialLink 메서드를 사용하여 애플리케이션을 연 동적 링크를 검색할 수 있습니다.

이것은 비동기식 요청이므로 네비게이터와 같은 애플리케이션 로직을 렌더링하기 전에 링크를 처리하는 것이 좋습니다. 예를 들어 다음과 같이 main 함수에서 이를 처리할 수 있습니다.

Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp(options: DefaultFirebaseConfig.platformOptions);

  // Get any initial links
  final PendingDynamicLinkData? initialLink = await FirebaseDynamicLinks.instance.getInitialLink();

  runApp(MyApp(initialLink));
}

애플리케이션 로직 내에서 링크가 처리되었는지 여부를 확인하고 다음과 같은 작업을 수행할 수 있습니다.

if (initialLink != null) {
  final Uri deepLink = initialLink.link;
  // Example of using the dynamic link to push the user to a different screen
  Navigator.pushNamed(context, deepLink.path);
}

또는 애플리케이션을 여는 데 정확한 동적 링크가 사용되었는지 확인하려면 대신 getDynamicLink 메서드에 전달합니다.

String link = 'https://dynamic-link-domain/ke2Qa';

final PendingDynamicLinkData? initialLink = await FirebaseDynamicLinks.instance.getDynamicLink(Uri.parse(link));

배경/전경 상태

애플리케이션이 열려 있거나 백그라운드에 있는 동안 스트림 핸들러를 사용하여 동적 링크 이벤트를 수신할 수 있습니다. FirebaseDynamicLinks.onLink getter는 PendingDynamicLinkData 가 포함된 Stream 을 반환합니다.

FirebaseDynamicLinks.instance.onLink.listen((dynamicLinkData) {
  Navigator.pushNamed(context, dynamicLinkData.link.path);
}).onError((error) {
  // Handle errors
});

iOS에서 동적 링크를 테스트하려면 실제 장치를 사용해야 합니다. 종료된 상태에서 동적 링크를 테스트하는 경우(예: 앱이 스와이프되어 닫힘) 앱을 릴리스 모드(예: flutter run --release .)에서 실행해야 합니다.