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


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

Прежде чем начать

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

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

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

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

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

App Distribution Android SDK состоит из двух библиотек:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Kotlin

// 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 . Это позволяет вам выбрать отображение вашего пользовательского интерфейса входа (UI) только для тестировщиков, которые еще не вошли в систему. После того, как тестер войдет в систему, вы можете вызвать updateIfNewReleaseAvailable , чтобы проверить, есть ли у тестировщика доступ к новой сборке.

Kotlin

// 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

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

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

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

Java

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

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

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

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

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


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

Прежде чем начать

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

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

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

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

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

App Distribution Android SDK состоит из двух библиотек:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Kotlin

// 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 . Это позволяет вам выбрать отображение вашего пользовательского интерфейса входа (UI) только для тестировщиков, которые еще не вошли в систему. После того, как тестер войдет в систему, вы можете вызвать updateIfNewReleaseAvailable , чтобы проверить, есть ли у тестировщика доступ к новой сборке.

Kotlin

// 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

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

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

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

Java

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

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

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

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

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