C++로 동적 링크 만들기

Firebase Dynamic Links API를 사용하여 짧거나 긴 동적 링크를 만들 수 있습니다. 이 API는 여러 개의 선택적 매개변수 구조체를 취하여 링크를 작성합니다. 이전에 생성한 긴 링크로부터 짧은 링크를 만들 수도 있습니다. Firebase 동적 링크에서는 다음과 같은 URL을 생성합니다.

https://example.page.link/WXYZ

C++ SDK는 Android 및 iOS와 연동이 가능하며 플랫폼별로 몇 가지 추가 설정이 필요합니다.

시작하기 전에

Firebase 동적 링크를 사용하려면 먼저 다음 작업을 해야 합니다.

  • C++ 프로젝트를 등록하고 Firebase를 사용하도록 구성합니다.

    C++ 프로젝트에서 현재 Firebase를 사용하고 있다면 이미 등록되어 Firebase용으로 구성된 상태입니다.

  • C++ 프로젝트에 Firebase C++ SDK를 추가합니다.

C++ 프로젝트에 Firebase를 추가할 때 Firebase Console 및 열려 있는 C++ 프로젝트 모두에서 작업을 수행해야 합니다. 예를 들어 Console에서 Firebase 구성 파일을 다운로드한 후 이 파일을 C++ 프로젝트로 옮기는 작업이 필요합니다.

Android

  1. Firebase Console에서 동적 링크 섹션을 엽니다.
  2. 아직 서비스 약관에 동의하지 않았고 동적 링크의 URI 프리픽스도 설정하지 않았다면 관련 메시지가 표시될 때 동의하고 설정합니다.

    동적 링크 URI 프리픽스가 이미 있다면 기록해 둡니다. 프로그래매틱 방식으로 동적 링크를 만들 때 동적 링크 URI 프리픽스를 제공해야 합니다.

  3. 권장: 딥 링크 및 대체 링크에 허용되는 URL 패턴을 지정합니다. 이렇게 하면 승인되지 않은 사용자가 내 도메인에서 내가 제어하지 않는 사이트로 리디렉션되는 동적 링크를 만드는 것을 막을 수 있습니다. URL 패턴 허용을 참조하세요.

iOS

  1. Firebase Console에서 동적 링크 섹션을 엽니다.
  2. 아직 서비스 약관에 동의하지 않았고 동적 링크의 URI 프리픽스도 설정하지 않았다면 관련 메시지가 표시될 때 동의하고 설정합니다.

    동적 링크 URI 프리픽스가 이미 있다면 기록해 둡니다. 프로그래매틱 방식으로 동적 링크를 만들 때 동적 링크 도메인을 제공해야 합니다.

  3. Firebase 동적 링크 C++ 클라이언트 라이브러리는 iOS의 커스텀 URL 스킴을 사용하여 링크를 처리합니다. 동적 링크 수신을 지원하려면 앱에 커스텀 URL 스킴을 추가해야 합니다.
    1. 왼쪽 트리 보기에서 프로젝트 이름을 더블클릭하여 프로젝트 구성을 엽니다. 대상 섹션에서 앱을 선택하고 정보 탭을 선택한 후 URL 유형 섹션을 펼칩니다.
    2. + 버튼을 클릭하고 반전된 클라이언트 ID의 URL 스킴을 추가합니다. 이 값을 찾으려면 GoogleService-Info.plist 구성 파일을 열고 REVERSED_CLIENT_ID 키를 찾습니다. 이 키의 값을 복사하여 구성 페이지의 URL 스킴 상자에 붙여넣습니다. 다른 필드는 비워 둡니다.
    3. + 버튼을 클릭하고 두 번째 URL 스킴을 추가합니다. 이 스킴은 앱의 번들 ID와 동일합니다. 예를 들어 번들 ID가 com.example.ios이면 URL 스킴 상자에 이 값을 입력합니다. 앱의 번들 ID는 프로젝트 구성의 일반 탭에서 찾을 수 있습니다(ID > 번들 식별자).

Firebase Console 사용

테스트에 사용하거나 마케팅팀에서 소셜 미디어 게시물 등에 사용할 수 있는 링크를 쉽게 만들 수 있도록 동적 링크 1개를 생성하려고 할 때 가장 간단한 방법은 Firebase Console로 이동하여 단계별 양식에 따라 직접 만드는 것입니다.

커스텀 도메인

goo.gl 또는 page.link 하위 도메인 대신 자체 도메인을 사용하여 동적 링크 브랜딩을 보다 세부적으로 관리할 수 있습니다. 다음 안내에 따라 프로젝트의 커스텀 도메인을 설정하세요.

Firebase Dynamic Links API 사용

앱 만들기 및 초기화

동적 링크를 만들기 전에 우선 firebase::App 객체를 만들고 초기화해야 합니다.

firebase::App의 헤더 파일을 포함합니다.

#include "firebase/app.h"

다음 단계는 플랫폼에 따라 다릅니다.

Android

자바 액티비티에 JNI 환경과 jobject 참조를 인수로 전달하여 firebase::App을 만듭니다.

app = ::firebase::App::Create(::firebase::AppOptions("APPLICATION NAME"), jni_env, activity);

iOS

firebase::App을 만듭니다.

app = ::firebase::App::Create(::firebase::AppOptions("APPLICATION NAME"));

동적 링크 라이브러리 초기화

동적 링크를 만들기 전에 동적 링크 라이브러리를 초기화해야 합니다.

::firebase::dynamic_links::Initialize(app, null);

매개변수로 긴 동적 링크 만들기

동적 링크를 만들려면 DynamicLinkComponents 객체를 만들고 추가 구성을 위한 선택적 멤버를 설정한 후 dynamic_links::GetShortLink 또는 dynamic_links::GetLongLink에 전달합니다.

다음은 Android 앱 com.example.android.package_name 및 iOS 앱 com.example.ios에서 https://www.example.com/을 여는 긴 동적 링크를 만드는 간단한 예시입니다.

firebase::dynamic_links::IOSParameters ios_parameters("com.example.ios");

firebase::dynamic_links::AndroidParameters android_parameters(
    "com.example.android.package_name");

firebase::dynamic_links::DynamicLinkComponents components(
    "https://www.example.com/", "example.page.link");
components.android_parameters = &android_parameters;
components.ios_parameters = &ios_parameters;

firebase::dynamic_links::GeneratedDynamicLink long_link =
    firebase::dynamic_links::GetLongLink(components);

짧은 동적 링크 만들기

짧은 동적 링크를 만들려면 이전에 생성한 긴 링크를 GetShortLink에 전달하거나 위와 동일한 방법으로 DynamicLinkComponents를 작성합니다.

GetShortLinkPathLength를 갖는 DynamicLinkOptions 구성 매개변수를 선택적으로 취하며, 이를 통해 링크 생성 방법을 제어할 수 있습니다. 짧은 링크를 생성하려면 Firebase 백엔드에 대한 네트워크 요청이 필요하므로 GetShortLink는 비동기적이며 Future<GeneratedLink>를 반환합니다.

예:

firebase::dynamic_links::DynamicLinkOptions short_link_options;
short_link_options.path_length = firebase::dynamic_links::kPathLengthShort;

firebase::Future<firebase::dynamic_links::GeneratedDynamicLink> result =
    firebase::dynamic_links::GetShortLink(components, short_link_options);

프로그램에 정기적으로 실행되는 업데이트 루프(예: 초당 30회 또는 60회)가 있으면 업데이트할 때마다 한 번씩 결과를 확인할 수 있습니다.

if (result.status() == firebase::kFutureStatusComplete) {
  if (result.error() == firebase::dynamic_links::kErrorCodeSuccess) {
    firebase::dynamic_links::GeneratedDynamicLink link = *result.result();
    printf("Create short link succeeded: %s\n", link.url.c_str());
  } else {
    printf("Created short link failed with error '%s'\n",
           result.error_message());
  }
}