Как уведомлять тестировщиков о новых сборках


Дополнительные Firebase App DistributionSDK для iOS и Android позволяют показывать тестировщикам оповещения в приложении, когда становятся доступны новые сборки. В этом руководстве рассказывается, как с помощью SDK App Distribution для iOS и Android создавать и настраивать оповещения о новых сборках для тестировщиков.

Подготовка

Если вы ещё этого не сделали, добавьте Firebase в проект iOS.

Шаг 1. Включите App Distribution Tester API

  1. Выберите проект в консоли Google Cloud.

  2. В разделе Firebase App Testers API нажмите Включить.

Шаг 2. Добавьте App Distribution в приложение

  1. Откройте файл Podfile, созданный для проекта (или запустите pod init, чтобы создать его), а затем добавьте следующую строку в раздел target:

    pod 'FirebaseAppDistribution'
  2. В каталоге файла podfile запустите команду pod install, а затем откройте созданный файл .xcworkspace.

  3. Импортируйте модуль Firebase в структуру App или класс UIApplicationDelegate:

    Swift

    import FirebaseCore
    import FirebaseAppDistribution
    

    Objective-C

    @import FirebaseCore;
    @import FirebaseAppDistribution;
    
  4. Настройте общий экземпляр FirebaseApp в методе application(_:didFinishLaunchingWithOptions:) делегата приложения:

    Swift

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

    Objective-C

    // Use Firebase library to configure APIs
    [FIRApp configure];
    
  5. Если swizzling отключен, передайте все открытые URL в SDK App Distribution в реализации application(_:open:options:):

    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 предлагает два способа настройки оповещений о сборках в приложении для тестировщиков: базовую конфигурацию с готовыми диалоговыми окнами для входа и обновления приложения и расширенную конфигурацию, позволяющую настроить собственный интерфейс. Если вы только начали работать с SDK App Distribution, рекомендуем сначала использовать базовую конфигурацию оповещений.

Базовая конфигурация

Используйте checkForUpdate, чтобы показать тестировщикам, которые ещё не включили уведомления, готовое диалоговое окно с предложением включить их, а затем проверить, доступна ли новая сборка. При вызове метода выполняется следующая последовательность действий:

  1. Проверяет, включил ли тестировщик оповещения, предлагая ему войти в аккаунт Google на сайте App Distribution.

  2. Если тестировщик ещё не включил оповещения, показывается стандартное диалоговое окно.

    Включить оповещения на тестовом устройстве нужно только один раз. Они будут работать даже после обновления приложения, пока вы не удалите его или не вызовете метод signOutTester. Подробную информацию можно найти в справочной документации по методу (Swift или Objective-C).

  3. Проверяет наличие новых сборок, которые можно установить.

Вы можете вызвать checkForUpdate() в любой момент работы приложения. Например, можно предложить тестировщикам установить новые сборки при запуске, добавив checkForUpdate() в onAppear(perform:) корневого представления приложения.

В следующем примере проверяется, включил ли тестировщик оповещения и есть ли у него доступ к новой сборке. Если да, то при появлении сборки для установки показывается диалоговое окно:

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. Если нет, вы можете показать ему интерфейс входа. После того как тестировщик войдет в аккаунт, вы можете вызвать функцию 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(), можно найти в справочной документации по App Distribution для Swift и Objective-C.

Шаг 4. Создайте и протестируйте реализацию

Наконец, создайте приложение и проверьте реализацию, распространив сборку среди тестировщиков с помощью консоли Firebase.

В App Distribution руководстве по устранению неполадок вы найдете информацию о том, как решить распространенные проблемы, например:

  • Тестировщик не получает оповещения в приложении
  • Тестеру предлагается войти в аккаунт Google несколько раз