콘솔로 이동

iOS 앱에서 Firebase 초대 주고받기

기본 요건

Firebase 초대를 사용하려면 iOS 8 이상이 필요합니다. 앱에서 iOS 7을 타겟팅할 수는 있지만, 앱이 iOS 8 이상에서 실행되지 않으면 Firebase 초대 SDK를 호출해도 어떤 작업도 실행되지 않습니다.

시작하기 전에

  1. 아직 Firebase 프로젝트에 앱을 연결하지 않았다면 Firebase 콘솔에서 연결합니다.
  2. Firebase 동적 링크를 사용 설정하지 않았다면 Firebase 콘솔에서 동적 링크 섹션을 열고 서비스 약관에 동의하라는 메시지가 나타나면 약관에 동의합니다. Firebase 초대는 Firebase 동적 링크를 기반으로 하므로 Firebase 초대를 사용하려면 Firebase 동적 링크를 사용 설정해야 합니다.
  3. iOS 프로젝트에 Firebase를 추가합니다. Podfile에 다음 pod를 추가합니다.
    pod 'Firebase/Core'
  4. pod 'Firebase/Invites'
  5. UIApplicationDelegate에서 Firebase 모듈을 가져옵니다.

    Swift

    import Firebase

    Objective-C

    @import Firebase;
  6. 일반적으로 앱의 application:didFinishLaunchingWithOptions: 메소드에서 FirebaseApp 공유 인스턴스를 구성합니다.

    Swift

    // Use Firebase library to configure APIs
    FirebaseApp.configure()

    Objective-C

    // Use Firebase library to configure APIs
    [FIRApp configure];
  7. Xcode에서 프로젝트의 Info.plist를 수정하여 키가 NSContactsUsageDescription('Privacy - Contacts Usage Description')이고 앱에서 연락처 데이터를 사용하는 방법을 설명하는 값을 갖는 속성을 추가합니다. 예: 'MyRecipeApp은 친구들과 레시피를 보다 쉽게 공유할 수 있도록 본인의 연락처를 사용합니다.'
  8. 앱에서 Google 로그인을 구현합니다. Google 계정으로 로그인한 사용자만 초대를 보낼 수 있습니다.

앱 초대 수신 처리

앱을 구성한 후 앱에서 앱 초대 수신을 처리할 수 있도록 설정해야 합니다.

사용자가 iOS 기기에서 수신된 앱 초대를 선택하면 앱이 아직 설치되지 않은 경우 사용자는 선택에 따라 App Store 페이지에서 앱을 설치할 수 있습니다. 사용자가 처음으로 앱을 열 때 개인에게 맞는 사용자 환경을 제공하여 적극적, 장기적인 참여를 유도해야 합니다. 이를 위해 초대 SDK는 사용자가 수신한 앱 초대에 연결되는 딥 링크 및 초대 ID를 제공합니다.

Swift

@available(iOS 9.0, *)
func application(_ application: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any]) -> Bool {
    return self.application(application, open: url, sourceApplication: options[UIApplicationOpenURLOptionsKey.sourceApplication] as? String, annotation: "")
}

func application(_ application: UIApplication,
  open url: URL, sourceApplication: String?, annotation: Any) -> Bool {
  if GIDSignIn.sharedInstance().handle(url, sourceApplication: sourceApplication, annotation: annotation) {
    return true
  }

  return Invites.handleUniversalLink(url) { invite, error in
    // ...
  }
}

Objective-C

- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url
            options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options {
  return [self application:app
                   openURL:url
         sourceApplication:options[UIApplicationOpenURLOptionsSourceApplicationKey]
                annotation:options[UIApplicationOpenURLOptionsAnnotationKey]];
}

- (BOOL)application:(UIApplication *)application
            openURL:(NSURL *)url
  sourceApplication:(NSString *)sourceApplication
         annotation:(id)annotation {
  if ([[GIDSignIn sharedInstance] handleURL:url
                      sourceApplication:sourceApplication
                                 annotation:annotation]) {
    return YES;
  }
  // Handle App Invite requests
  return [FIRInvites handleUniversalLink:url
                              completion:^(FIRReceivedInvite * _Nullable receivedInvite,
                                           NSError * _Nullable error) {
    // ...
  }];
}

사용자가 앱 초대를 보내는 기능

이제 앱에서 수신되는 초대를 올바르게 처리할 준비가 되었으므로 앱에서 사용자의 연락처로 초대를 보내는 기능을 제공할 차례입니다.

사용자는 초대를 보내려면 Google 계정으로 로그인해야 합니다.

초대를 보내려면 우선 FIRInviteDelegate 프로토콜을 구현할 것임을 선언합니다.

Swift

class ViewController: UIViewController, InviteDelegate {
  // ...

Objective-C

@interface ViewController ()<FIRInviteDelegate>

그런 다음 앱에 Send Invitation 버튼을 추가합니다. 이 버튼을 기본 메뉴의 옵션으로 추가할 수도 있고, 딥 링크로 연결할 수 있는 콘텐츠 옆에 추가할 수도 있습니다. 이렇게 하면 사용자가 초대와 함께 특정 콘텐츠를 보낼 수 있습니다. 자세한 내용은 Firebase 초대 권장사항을 참조하세요.

사용자가 Send Invitation 버튼을 탭하면 초대 대화상자를 엽니다.

Swift

@IBAction func inviteTapped(_ sender: AnyObject) {
  if let invite = Invites.inviteDialog() {
    invite.setInviteDelegate(self)

    // NOTE: You must have the App Store ID set in your developer console project
    // in order for invitations to successfully be sent.

    // A message hint for the dialog. Note this manifests differently depending on the
    // received invitation type. For example, in an email invite this appears as the subject.
    invite.setMessage("Try this out!\n -\(GIDSignIn.sharedInstance().currentUser.profile.name)")
    // Title for the dialog, this is what the user sees before sending the invites.
    invite.setTitle("Invites Example")
    invite.setDeepLink("app_url")
    invite.setCallToActionText("Install!")
    invite.setCustomImage("https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png")
    invite.open()
  }
}

Objective-C

- (IBAction)inviteTapped:(id)sender {
  id<FIRInviteBuilder> inviteDialog = [FIRInvites inviteDialog];
  [inviteDialog setInviteDelegate:self];

  // NOTE: You must have the App Store ID set in your developer console project
  // in order for invitations to successfully be sent.
  NSString *message =
      [NSString stringWithFormat:@"Try this out!\n -%@",
                                 [GIDSignIn sharedInstance].currentUser.profile.name];

  // A message hint for the dialog. Note this manifests differently depending on the
  // received invitation type. For example, in an email invite this appears as the subject.
  [inviteDialog setMessage:message];

  // Title for the dialog, this is what the user sees before sending the invites.
  [inviteDialog setTitle:@"Invites Example"];
  [inviteDialog setDeepLink:@"app_url"];
  [inviteDialog setCallToActionText:@"Install!"];
  [inviteDialog setCustomImage:@"https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png"];
  [inviteDialog open];
}

초대 맞춤설정

초대 대화상자를 만들 때 대화상자의 제목 및 전송할 초대 메시지를 지정해야 합니다. 위 예와 같이 초대를 통해 전송되는 이미지 및 딥 링크 URL도 맞춤설정할 수 있습니다.

메소드채널설명
setTitle 이메일 및 SMS 필수: 초대 대화상자의 제목을 설정합니다.
setMessage 이메일 및 SMS 필수: SMS 초대의 기본 텍스트 및 이메일 초대의 기본 제목을 설정합니다. 보내는 사람이 초대 대화상자에서 이 메시지를 수정할 수 있습니다. 최대 길이는 100자입니다.
setDeepLink 이메일 및 SMS 초대와 함께 전송할 앱 링크를 설정합니다. 수신자와 특정 콘텐츠를 공유하거나 사용자가 초대를 통해 앱을 열 때 맞춤화된 경험을 제공하려면 이 링크를 지정합니다.
setCustomImage 이메일 이메일 초대에 포함할 맞춤 이미지의 URL을 설정합니다. 이미지는 600x600픽셀 정도 크기의 정사각형이어야 합니다. 이미지의 최대 크기는 4000x4000픽셀입니다.
setCallToActionText 이메일 이메일 초대에 표시되는 버튼의 클릭 유도문안을 설정합니다. 최대 길이는 32자입니다.

Android 버전 앱이 있으며 iOS뿐 아니라 Android에서도 열 수 있는 초대를 보내려는 경우 초대를 열기 전에 setOtherPlatformsTargetApplication:targetApplication을 호출합니다. 예를 들면 다음과 같습니다.

Swift

let targetApplication = InvitesTargetApplication.init()
targetApplication.androidClientID = self.androidClientIDLabel.text
inviteBuilder.setOtherPlatformsTargetApplication(targetApplication)

Objective-C

FIRInvitesTargetApplication *targetApplication = [[FIRInvitesTargetApplication alloc] init];
targetApplication.androidClientID = self.androidClientIDLabel.text;
[inviteBuilder setOtherPlatformsTargetApplication:targetApplication];

inviteTapped 메소드는 사용자가 초대할 연락처를 선택하는 연락처 선택 대화상자를 엽니다. 초대는 이메일 또는 SMS로 전송됩니다. 사용자가 초대를 보낸 후 앱에서 inviteFinishedWithInvitations 메소드에 대한 콜백을 수신합니다.

Swift

func inviteFinished(withInvitations invitationIds: [String], error: Error?) {
  if let error = error {
    print("Failed: " + error.localizedDescription)
  } else {
    print("\(invitationIds.count) invites sent")
  }
}

Objective-C

- (void)inviteFinishedWithInvitations:(NSArray *)invitationIds error:(NSError *)error {
  if (error) {
    NSLog(@"%@", error.localizedDescription);
  } else {
    NSLog(@"%li invites sent", invitationIds.count);
  }
}