콘솔로 이동

C++용 Firebase 초대 시작하기

C++로 교차 플랫폼 Firebase 초대 클라이언트 앱을 개발하려면 Firebase Invites API를 사용합니다. C++ SDK는 Android 및 iOS와 연동이 가능하며, 각 플랫폼에 대해 몇 가지 설정이 추가로 필요합니다.

시작하기 전에

Android

  1. 아직 Firebase 프로젝트에 앱을 연결하지 않았다면 Firebase 콘솔에서 연결합니다.
  2. Firebase 동적 링크를 사용 설정하지 않았다면 Firebase 콘솔에서 동적 링크 섹션을 열고 서비스 약관에 동의하라는 메시지가 나타나면 약관에 동의합니다. Firebase 초대는 Firebase 동적 링크를 기반으로 하므로 Firebase 초대를 사용하려면 Firebase 동적 링크를 사용 설정해야 합니다.
  3. Android 프로젝트에 Firebase를 추가합니다.
  4. 앱 수준 build.gradle 파일에 Firebase 초대에 대한 종속 항목을 추가합니다.

    dependencies {
         implementation 'com.google.firebase:firebase-invites:16.1.0'
    }
    
  5. C++ SDK에서 libapp.alibinvites.a 정적 라이브러리를 연결합니다.

iOS

  1. 아직 Firebase 프로젝트에 앱을 연결하지 않았다면 Firebase 콘솔에서 연결합니다.
  2. Firebase 동적 링크를 사용 설정하지 않았다면 Firebase 콘솔에서 동적 링크 섹션을 열고 서비스 약관에 동의하라는 메시지가 나타나면 약관에 동의합니다. Firebase 초대는 Firebase 동적 링크를 기반으로 하므로 Firebase 초대를 사용하려면 Firebase 동적 링크를 사용 설정해야 합니다.
  3. iOS 프로젝트에 Firebase를 추가합니다.
  4. Firebase 초대 C++ 클라이언트 라이브러리는 iOS에서 Google 로그인을 사용합니다. 로그인한 사용자만 초대를 보낼 수 있으며, 이를 지원하기 위해 다음과 같이 앱에 맞춤 URL 스키마를 추가해야 합니다.
    1. 왼쪽 트리 보기에서 프로젝트 이름을 더블클릭하여 프로젝트 구성을 엽니다. 대상 섹션에서 앱을 선택하고 정보 탭을 선택한 후 URL 유형 섹션을 펼칩니다.
    2. + 버튼을 클릭하고 반전된 클라이언트 ID의 URL 스키마를 추가합니다. 이 값을 찾으려면 GoogleService-Info.plist 구성 파일을 열고 REVERSED_CLIENT_ID 키를 찾습니다. 이 키의 값을 복사하여 구성 페이지의 URL 스키마 상자에 붙여넣습니다. 다른 필드는 비워 둡니다.
    3. + 버튼을 클릭하고 두 번째 URL 스키마를 추가합니다. 이 스키마는 앱의 번들 ID와 동일합니다. 예를 들어 번들 ID가 com.example.app이면 URL 스키마 상자에 이 값을 입력합니다. 앱의 번들 ID는 프로젝트 구성의 일반 탭에서 찾을 수 있습니다(ID > 번들 식별자).
  5. Podfile에 다음 포드를 포함합니다.

    pod 'Firebase/Invites'
    
  6. pod install을 실행합니다.

  7. C++ SDKfirebase.frameworkfirebase_invites.framework를 Xcode 프로젝트에 추가합니다.

초대 보내기

앱 만들기 및 초기화

초대를 보내기 전에 우선 firebase::App 객체를 만들고 초기화해야 합니다.

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

#include "firebase/app.h"

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

Android

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

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

iOS

firebase::App을 만듭니다.

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

초대 만들기 및 구성

초대 전송을 위한 헤더 파일을 포함합니다.

#include "firebase/invites.h"

초대 라이브러리를 초기화합니다.

::firebase::invites::Initialize(app);

firebase::invites::Invite의 새 인스턴스를 만들고 다음과 같이 초대 설정으로 인스턴스를 구성합니다.

firebase::invites::Invite invite;
invite.title_text = "Invite Friends";
invite.message_text = "Try my app today, and get 200 free coins!";
invite.call_to_action_text = "Download now!";

초대 설정의 전체 목록은 여기를 참조하세요. 각 플랫폼의 지원 여부도 나와 있습니다.

초대 맞춤설정의 자세한 내용은 Firebase 초대: 권장사항을 참조하세요.

초대 보내기

초대를 표시할 준비가 되었으면 SendInvite()를 호출합니다.

firebase::invites::SendInvite(invite);

이렇게 하면 초대 클라이언트 UI가 표시되고, 사용자는 수신자를 선택하거나 필요에 따라 메시지를 수정할 수 있습니다. 이 UI는 사용자가 초대를 보내거나 취소하기로 선택할 때까지 화면에 표시됩니다.

SendInvite()는 즉시 반환되며 비동기적으로 UI를 표시합니다. 결과는 firebase::Future를 통해 반환되며, 여기에 쿼리를 수행하여 초대가 전송되었는지 확인하고 UI가 화면에서 사라지는 시점을 파악할 수 있습니다.

SendInviteLastResult()를 호출하여 가장 최근의 firebase::Future를 가져올 수도 있습니다. 이렇게 하면 가장 최근의 SendInvite() 호출과 동일한 결과가 반환됩니다.

auto future_result = firebase::invites::SendInviteLastResult();
if (future_result.status() == future::kFutureStatusComplete) {
    if (future_result.error() == 0) {
        auto result = *future.result();
        if (result.invitation_ids.size() > 0) {
            // One or more invitations were sent. You can log the invitation IDs here for
            // analytics purposes, as they will be the same on the receiving side.
        }
        else {
            // Zero invitations were sent. This tells us that the user canceled sending
            // invitations.
        }
    } else {
        // error() is nonzero, which means an error occurred. You can check
        // future_result.error_message() for more information.
    }
} else {
    // The SendInvite() operation has not completed yet, which means the Invites
    // client UI is still on screen. Check the status() again soon.
}

status()를 폴링하는 대신 OnCompletion()을 사용하여 SendInvite()가 완료되어 초대 UI가 종료될 때 알림을 받는 콜백을 설정할 수도 있습니다. 자세한 내용은 firebase::Future 문서를 참조하세요.

교차 플랫폼 초대

Firebase 콘솔의 프로젝트에 각 플랫폼용 애플리케이션이 정확히 하나씩 포함되었다면 Firebase 초대는 자동으로 애플리케이션을 서로 연결합니다. 예를 들어 Android 사용자가 보낸 초대를 iOS 사용자가 클릭하면 해당 플랫폼에서 앱을 설치할 수 있는 올바른 위치로 이동합니다.

각 플랫폼에 애플리케이션이 2개 이상 있는 경우 ios_platform_client_id 또는 android_platform_client_id를 설정하고 다른 플랫폼의 Firebase 클라이언트 ID를 전달할 수 있습니다.

초대 받기

초대를 수신한 사용자가 앱을 아직 설치하지 않았다면 사용자가 해당 플랫폼의 앱 스토어에서 앱을 설치할 수 있습니다.

앱이 새로 설치된 후 또는 앱이 이미 설치된 경우 앱이 시작되고, 콘텐츠를 가리키는 URL을 전송한 경우 URL이 수신됩니다. 또한 초대 ID도 수신되며, 이 ID는 보낸 사람의 초대 ID와 일치합니다.

일반적으로 앱은 수신 초대를 시작 시에 한꺼번에 확인해야 합니다.

앱 만들기 및 초기화

수신된 초대를 확인하기 전에 우선 firebase::App 객체를 만들고 초기화해야 합니다.

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

#include "firebase/app.h"

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

Android

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

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

iOS

firebase::App을 만듭니다.

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

리스너 구현 및 초대 수신 확인

초대 수신을 위한 헤더 파일을 포함합니다.

#include "firebase/invites.h"

초대 라이브러리를 초기화합니다.

::firebase::invites::Initialize(app);

firebase::invites::Listener를 구현하는 객체를 만든 후 SetListener()로 초대 라이브러리에 제공합니다.

초대를 수신하려면 리스너 클래스가 OnInviteReceived 가상 함수를 구현해야 합니다. 메소드를 재정의하면 초대 ID를 수신했을 때 처리가 가능합니다.

void OnInviteReceived(const char* invitation_id, const char* deep_link,
                      bool is_strong_match) override {
  // Fetch succeeded, let's find out what we received.
  if (invitation_id != nullptr) {
    // The app received an invitation ID. This will match the invitation ID
    // that the sender got when they sent the invitation, so you can use this
    // to track when invitations are completed.
  }
  if (deep_link != nullptr) {
    // The app received a Dynamic Link. This may have come from an invitation
    // (if invite.invitation_id is set), or it might have been sent using
    // Firebase Dynamic Links.
    // In any event, the app can now act on this link as you see fit.
  }
}