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

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

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

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

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

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

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

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

Android SDK для распространения приложений состоит из двух библиотек:

  • firebase-appdistribution-api — библиотека только для API, которую вы можете включить во все варианты сборки .
  • firebase-appdistribution — полная реализация SDK (необязательно).

Библиотека только для API позволяет вашему коду вызывать SDK. Вызовы не будут иметь никакого эффекта, если отсутствует полная реализация SDK.

Объявите зависимость для Android SDK для распространения приложений в файле Gradle вашего модуля (на уровне приложения) (обычно <project>/<app-module>/build.gradle.kts или <project>/<app-module>/build.gradle ). Чтобы не включать в свои сборки Play функцию самообновления полной реализации SDK, добавьте во все варианты сборки зависимость от библиотеки только для API. Добавляйте полную реализацию SDK только к вариантам, предназначенным исключительно для предварительного тестирования.

dependencies {
    // ADD the API-only library to all variants
    implementation("com.google.firebase:firebase-appdistribution-api:16.0.0-beta12")

    // ADD the full SDK implementation to the "beta" variant only (example)
    betaImplementation("com.google.firebase:firebase-appdistribution:16.0.0-beta12")
}

Ищете библиотечный модуль, специфичный для Kotlin? Начиная с релиза за октябрь 2023 года , от основного модуля библиотеки могут зависеть как разработчики Kotlin, так и Java (подробнее см. FAQ по этой инициативе ).

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

Android SDK App Distribution предоставляет следующие способы настройки оповещений о сборках приложений для ваших тестировщиков:

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

Если вы впервые используете Android SDK для распространения приложений, мы рекомендуем использовать базовую конфигурацию .

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

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

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

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

  3. Отображает предварительно созданное оповещение, предлагающее тестеру выполнить обновление.

  4. Если новая сборка представляет собой набор приложений Android (AAB), тестер перенаправляется в Google Play для завершения процесса обновления.

    Если новая сборка представляет собой пакет приложения Android (APK), SDK загружает новую сборку в фоновом режиме и предлагает тестировщику выполнить установку после завершения загрузки. SDK отправляет пользователю уведомления о ходе загрузки с помощью NotificationManager . Вы также можете добавить свой собственный индикатор выполнения, присоединив обработчик onProgressUpdate к задаче updateIfNewReleaseAvailable .

Вы можете вызвать updateIfNewReleaseAvailable в любой момент вашего приложения. Например, вы можете вызвать updateIfNewReleaseAvailable во время метода onResume основного действия приложения.

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

Kotlin+KTX

// Copy and paste this into any part of your app - for example, in your main
// activity's onResume method.
val firebaseAppDistribution = FirebaseAppDistribution.getInstance()
firebaseAppDistribution.updateIfNewReleaseAvailable()
    .addOnProgressListener { updateProgress ->
      // (Optional) Implement custom progress updates in addition to
      // automatic NotificationManager updates.
    }
    .addOnFailureListener { e ->
      // (Optional) Handle errors.
      if (e is FirebaseAppDistributionException) {
        when (e.errorCode) {
          Status.NOT_IMPLEMENTED -> {
            // SDK did nothing. This is expected when building for Play.
          }
          else -> {
            // Handle other errors.
          }
        }
      }
    }

Java

// Copy and paste this into any part of your app - for example, in your main
// activity's onResume method.
FirebaseAppDistribution firebaseAppDistribution = FirebaseAppDistribution.getInstance();
firebaseAppDistribution.updateIfNewReleaseAvailable()
    .addOnProgressListener(updateProgress -> {
      // (Optional) Implement custom progress updates in addition to
      // automatic NotificationManager updates.
    })
    .addOnFailureListener(e -> {
      // (Optional) Handle errors.
      if (e instanceof FirebaseAppDistributionException) {
        switch (((FirebaseAppDistributionException)e).getErrorCode()) {
          case NOT_IMPLEMENTED:
            // SDK did nothing. This is expected when building for Play.
            break;
          default:
            // Handle other errors.
            break;
        }
      }
    });

Расширенная конфигурация

Расширенная конфигурация входа

Методы signInTester и isTesterSignedIn дают вам больше гибкости в настройке процесса входа в систему тестера, чтобы опыт тестировщика мог лучше соответствовать внешнему виду вашего приложения.

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

Kotlin+KTX

// Only show sign-in UI if this is the "beta" variant (example).
if (BuildConfig.BUILD_TYPE == "beta" && !firebaseAppDistribution.isTesterSignedIn) {
    // Start your sign-in UI here.
}

// Only check for updates if the tester is already signed in (do not prompt).
if (firebaseAppDistribution.isTesterSignedIn) {
    firebaseAppDistribution.updateIfNewReleaseAvailable().addOnFailureListener {
        // Handle failed update.
    }
}

Java

// Only show sign-in UI if this is the "beta" variant (example).
if (BuildConfig.BUILD_TYPE == "beta" && !firebaseAppDistribution.isTesterSignedIn()) {
    // Start your sign-in UI here.
}

// Only check for updates if the tester is already signed in (do not prompt).
if (firebaseAppDistribution.isTesterSignedIn()) {
    firebaseAppDistribution.updateIfNewReleaseAvailable().addOnFailureListener( e -> {
        // Handle failed update.
    });
}

Когда тестер решит продолжить, из пользовательского интерфейса входа в систему вызовите signInTester() :

Kotlin+KTX

firebaseAppDistribution.signInTester().addOnSuccessListener {
  // Handle successful sign-in.
}.addOnFailureListener {
  // Handle failed sign-in.
});

Java

firebaseAppDistribution.signInTester().addOnSuccessListener( unused -> {
  // Handle successful sign-in.
}).addOnFailureListener(e -> {
  // Handle failed sign-in.
});

Расширенная конфигурация обновления

Методы checkForNewRelease и updateApp дают вам больше гибкости в настройке того, когда вашему тестировщику будет предложено обновиться. Вы также можете настроить предварительно созданное диалоговое окно обновления и индикатор хода загрузки, чтобы они лучше соответствовали внешнему виду вашего приложения.

Обратите внимание, что updateApp не отображает ход загрузки. Это означает, что вам необходимо реализовать собственную индикацию прогресса с помощью NotificationManager , какого-либо отображения статуса в приложении или какого-либо другого подхода.

В следующем примере проверяется, доступен ли новый выпуск, а затем отображается пользовательский пользовательский интерфейс. Прежде чем вызывать checkForNewRelease и updateApp , убедитесь, что тестер вошел в систему, используя расширенную конфигурацию входа .

Kotlin+KTX

firebaseAppDistribution.checkForNewRelease().addOnSuccessListener { release ->
    if (release != null) {
        // New release available. Start your update UI here.
    }
}.addOnFailureListener {
    // Handle failed check for new release. Fails with Status#NOT_IMPLEMENTED
    // if built for Play.
}

Java

firebaseAppDistribution.checkForNewRelease().addOnSuccessListener(release -> {
    if (release != null) {
        // New release available. Start your update UI here.
    }
}).addOnFailureListener(e -> {
    // Handle failed check for new release. Fails with Status#NOT_IMPLEMENTED
    // if built for Play.
});

Когда тестер решит продолжить обновление из пользовательского интерфейса обновления, вызовите updateApp() :

Kotlin+KTX

firebaseAppDistribution.updateApp()
    .addOnProgressListener { updateState ->
      // Use updateState to show update progress.
    }

Java

firebaseAppDistribution.updateApp()
    .addOnProgressListener(updateState -> {
      // Use updateState to show update progress.
    });

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

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

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

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