테스터에게 새 빌드에 대해 알림


선택사항인 Firebase App Distribution iOS 및 Android SDK를 사용하면 앱의 새 빌드를 설치할 수 있게 될 때 테스터에 인앱 알림을 표시할 수 있습니다. 이 가이드에서는 App Distribution iOS 및 Android SDK를 사용하여 테스터의 새 빌드 알림을 만들고 맞춤설정하는 방법을 설명합니다.

시작하기 전에

아직 추가하지 않았다면 iOS 프로젝트에 Firebase를 추가합니다.

1단계: App Distribution Tester API 사용 설정

  1. Google Cloud 콘솔에서 프로젝트를 선택합니다.

  2. Firebase App Testers API에서 사용 설정을 클릭합니다.

2단계: 앱에 App Distribution 추가

  1. 프로젝트용으로 만든 Podfile을 열거나 pod init을 실행하여 Podfile을 만든 후 대상 섹션 안에 다음 줄을 추가합니다.

    pod 'FirebaseAppDistribution'
  2. podfile 디렉터리에서 pod install을 실행한 다음 만든 .xcworkspace 파일을 엽니다.

  3. App 구조체 또는 UIApplicationDelegate에서 Firebase 모듈을 가져옵니다.

    Swift

    import FirebaseCore
    import FirebaseAppDistribution
    

    Objective-C

    @import FirebaseCore;
    @import FirebaseAppDistribution;
    
  4. 앱 대리자의 application(_:didFinishLaunchingWithOptions:) 메서드에서 FirebaseApp 공유 인스턴스를 구성합니다.

    Swift

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

    Objective-C

    // Use Firebase library to configure APIs
    [FIRApp configure];
    
  5. 재구성이 중지되면 열려 있는 URL을 application(_:open:options:) 구현의 App Distribution SDK에 전달합니다.

    Swift

    func application(_ app: UIApplication, 
                     open url: URL,
                     options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
       if AppDistribution.appDistribution().application(application, open: url, options: options) {
          return true
       }
    
       // Handle other non-Firebase URLs here.
    
       return false
    }
    

    Objective-C

    - (BOOL)application:(UIApplication *)app 
                openURL:(NSURL *)url 
                options:(NSDictionary<UIApplicationOpenURLOptionsKey, id> *)options {
       if ([[FIRAppDistribution appDistribution] application:app openURL:url options:options]) {
          return YES;
       }
    
       // Handle other non-Firebase URLs here.
    
       return NO;
    }
    
  6. 마지막으로 앱을 다시 컴파일합니다.

3단계: 인앱 알림 구성

App Distribution SDK에서는 테스터의 인앱 빌드 알림을 설정하는 두 가지 방법, 즉 테스터에게 표시할 사전 빌드된 앱 업데이트 및 로그인 대화상자와 함께 제공되는 기본 알림 구성과 자체 사용자 인터페이스를 맞춤설정할 수 있는 고급 알림 구성을 제공합니다. App Distribution SDK를 처음 사용하는 경우에는 먼저 기본 알림 구성을 사용하는 것이 좋습니다.

기본 구성

checkForUpdate를 사용하여 아직 알림을 사용 설정하지 않은 테스터에게 사전 빌드된 알림 사용 설정 대화상자를 표시한 다음 새 빌드를 사용할 수 있는지 확인합니다. 이 메서드를 호출하면 다음과 같은 순서가 적용됩니다.

  1. Google 계정으로 App Distribution에 로그인하라는 메시지를 표시하여 테스터가 알림을 사용 설정했는지 확인합니다.

  2. 테스터가 아직 알림을 사용 설정하지 않은 경우 사전 빌드된 대화상자를 표시합니다.

    알림 사용 설정은 테스트 기기에서 한 번만 진행하면 되며 앱 업데이트 전반에서 유지됩니다. 알림은 앱이 제거되거나 signOutTester 메서드가 호출될 때까지 테스트 기기에서 사용 설정된 상태로 유지됩니다. 자세한 내용은 메서드의 참조 문서(Swift 또는 Objective-C)를 참조하세요.

  3. 테스터가 설치할 수 있는 최신 빌드를 확인합니다.

언제든지 앱에서 checkForUpdate()를 호출할 수 있습니다. 예를 들어 앱 루트 보기의 onAppear(perform:)checkForUpdate()를 포함하여 시작 시 테스터에게 최신 빌드를 설치하라는 메시지를 표시할 수 있습니다.

다음 예시에서는 테스터가 알림을 사용 설정했는지, 새 빌드에 액세스할 수 있는지 여부를 확인한 후 모두 해당한다면 빌드를 설치할 수 있을 때 대화상자를 표시합니다.

Swift

참고: 이 제품은 macOS, Mac Catalyst, tvOS 또는 watchOS 대상에서는 사용할 수 없습니다.
AppDistribution.appDistribution().checkForUpdate(completion: { release, error in
  if error != nil {
      // Handle error
      return
  }

  guard let release = release else {
    return
  }

  // Customize your alerts here.
  let title = "New Version Available"
  let message = "Version \(release.displayVersion)(\(release.buildVersion)) is available."
  let uialert = UIAlertController(title: title,message: message, preferredStyle: .alert)

  uialert.addAction(UIAlertAction(title: "Update", style: UIAlertAction.Style.default) {
    _ in
    UIApplication.shared.open(release.downloadURL)
  })
  uialert.addAction(UIAlertAction(title: "Cancel", style: UIAlertAction.Style.cancel) {
    _ in
  })

  // self should be a UIViewController.
  self.present(uialert, animated: true, completion: nil)
})

Objective-C

참고: 이 제품은 macOS, Mac Catalyst, tvOS 또는 watchOS 대상에서는 사용할 수 없습니다.
[[FIRAppDistribution appDistribution]
  checkForUpdateWithCompletion:^(FIRAppDistributionRelease *_Nullable release,
                                 NSError *_Nullable error) {
  if (error) {
    // Handle error
    return;
  }

  if (release) {
    UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"New Version Available"
message:[NSString stringWithFormat:@"Version %@ (%@) is available.", release.displayVersion,
release.buildVersion] preferredStyle:UIAlertControllerStyleAlert];

    UIAlertAction *updateAction = [UIAlertAction actionWithTitle:@"Update"
style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
      [[UIApplication sharedApplication] openURL:release.downloadURL options:@{}
completionHandler:nil];
    }];
    UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"Cancel"
style:UIAlertActionStyleCancel handler:^(UIAlertAction *action) {}];
    [alert addAction:updateAction];
    [alert addAction:cancelAction];
    [self presentViewController:alert animated:YES completion:nil];
  }
}];

고급 구성

signInTester()isTesterSignedIn 메서드를 사용하면 테스터의 로그인 환경을 더 유연하게 맞춤설정할 수 있으므로 앱의 모양과 느낌에 더 적합하게 만들 수 있습니다.

다음 예시에서는 테스터가 이미 Firebase App Distribution 테스터 계정에 로그인되어 있는지 확인하므로 개발자는 아직 로그인하지 않은 테스터의 로그인 UI만 표시할 수 있습니다. 테스터가 로그인하면 개발자는 checkForUpdate()를 호출하여 테스터가 새 빌드에 액세스할 수 있는지 확인할 수 있습니다.

Swift

참고: 이 제품은 macOS, Mac Catalyst, tvOS 또는 watchOS 대상에서는 사용할 수 없습니다.
// Sign in a tester without automatically checking for update
if (!AppDistribution.appDistribution().isTesterSignedIn) {
  AppDistribution.appDistribution().signInTester (completion: { error in
    // completion block for signInTester
     if (error != nil) {
       // handle failed sign in
      return
     }
    // handle successful sign in
  })
}

// Only check for update if tester is already signed in - do not prompt
if (AppDistribution.appDistribution().isTesterSignedIn) {
  AppDistribution.appDistribution().checkForUpdate(completion: { release, error in
      // completion block for check for update
  })
}

Objective-C

참고: 이 제품은 macOS, Mac Catalyst, tvOS 또는 watchOS 대상에서는 사용할 수 없습니다.
// Sign in a tester without automatically checking for update
if(![[FIRAppDistribution appDistribution] isTesterSignedIn]) {
  [[FIRAppDistribution appDistribution]
    signInTesterWithCompletion:^(NSError *_Nullable error) {
      // completion block for signInTester
     if (error) {
       // handle failed sign in
       return;
     }
      // handle successful sign in
  }];
}

// only check for update if tester is already signed in - do not prompt
if([[FIRAppDistribution appDistribution] isTesterSignedIn]) {
  [[FIRAppDistribution appDistribution]
        checkForUpdateWithCompletion:^(FIRAppDistributionRelease *_Nullable release,
                                       NSError *_Nullable error) {
     // completion block for check for update
  }];
}

signOutTester()를 포함한 추가 메서드에 대한 자세한 내용은 SwiftObjective-CApp Distribution 참고 문서를 참조하세요.

4단계: 구현 빌드 및 테스트

마지막으로 Firebase Console을 사용하여 테스터에 빌드를 배포해 앱을 빌드하고 구현을 테스트합니다.

다음과 같은 일반적인 문제에 대한 도움말은 App Distribution 문제 해결 가이드를 참조하세요.

  • 테스터가 인앱 알림을 받지 못함
  • 테스터에게 Google에 로그인하라는 메시지가 두 번 이상 표시됨