Check out what’s new from Firebase at Google I/O 2022. Learn more

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

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

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

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

Шаг 1. Включите API-интерфейс App Distribution Tester.

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

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

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

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

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

  3. Закодируйте свой идентификатор приложения Google ( требуется только для версий iOS 9 и 10 ):

    Закодируйте свой идентификатор приложения Google

    Добавьте схему URL-адреса appdistribution-<encoded-google-app-id> , включив фрагмент в файл Info.plist file (см . документацию Apple, чтобы узнать, как добавить схему URL-адреса в Xcode):

    <key>CFBundleURLTypes</key>
    <array>
        <dict>
            <key>CFBundleTypeRole</key>
            <string>Editor</string>
            <key>CFBundleURLSchemes</key>
            <array>
                <string>appdistribution-<encoded-google-app-id></string>
            </array>
        </dict>
    </array>
    

    Затем закодируйте свой идентификатор приложения Google, заменив двоеточия (:) дефисами (-). Обратите внимание, что идентификатор вашего приложения Google находится в GoogleService-Info.plist . Например, если ваш идентификатор приложения Google:

    7:77777777777:ios:123456789

    Ваш закодированный идентификатор приложения Google:

    7-77777777777-ios-123456789
  4. Импортируйте модуль Firebase в структуру вашего App или UIApplicationDelegate :

    Быстрый

    import FirebaseCore
    

    Цель-C

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

    Быстрый

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

    Цель-C

    // Use Firebase library to configure APIs
    [FIRApp configure];
    
  6. Наконец, перекомпилируйте приложение.

Шаг 3. Настройте оповещения в приложении.

App Distribution SDK предоставляет два способа настройки оповещений о сборке в приложении для тестировщиков: базовая конфигурация оповещений, которая поставляется с готовыми диалогами обновлений приложения и входа для отображения тестировщикам, и расширенная конфигурация оповещений, которая позволяет вам настроить свой собственный пользовательский интерфейс. Мы рекомендуем сначала использовать базовую конфигурацию предупреждений, если вы не знакомы с 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
  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) {
    UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"Check For Update"
message:[NSString stringWithFormat:@"Error during tester sign in! %@", error.localizedDescription]
preferredStyle:UIAlertControllerStyleAlert];

    UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"Ok" style:UIAlertActionStyleDefault
handler:^(UIAlertAction *action) {}];

    [alert addAction:okAction];
    [self presentViewController:alert animated:YES completion:nil];

    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 более одного раза