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

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

Прежде чем вы начнете

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

Шаг 1. Включите API тестера распространения приложений.

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

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

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

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

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

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

    Быстрый

    import FirebaseCore
    import FirebaseAppDistribution
    

    Цель-C

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

    Быстрый

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

    Цель-C

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

    Быстрый

    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
    }
    

    Цель-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. Настройте оповещения в приложении.

SDK App Distribution предоставляет два способа настройки оповещений о сборке приложения для ваших тестировщиков: базовую конфигурацию оповещений, которая включает в себя предварительно созданные диалоги обновления приложения и входа в систему для отображения тестировщикам, и расширенную конфигурацию оповещений, которая позволяет вы можете настроить свой собственный пользовательский интерфейс. Мы рекомендуем сначала использовать базовую конфигурацию оповещений, если вы новичок в SDK для распространения приложений.

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

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

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

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

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

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

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

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

Быстрый

Примечание. Этот продукт недоступен для 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)
})

Цель-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() , чтобы проверить, имеет ли тестер доступ к новой сборке.

Быстрый

Примечание. Этот продукт недоступен для 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
  })
}

Цель-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() , см. в справочной документации по распространению приложений для Swift и Objective-C .

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

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

Посетите руководство по устранению неполадок с распространением приложений , чтобы получить помощь в решении распространенных проблем, таких как:

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