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


Дополнительные SDK Firebase App Distribution для 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. Если подмена отключена, передайте все открытые 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. Проверяет, включил ли тестировщик оповещения, предлагая ему войти в App Distribution с помощью аккаунта Google.

  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 несколько раз