Catch up on everything we announced at this year's Firebase Summit. Learn more

Настройте оповещения о новых сборках в приложении с помощью SDK для распространения приложений

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

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

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

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

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

  2. Под Firebase App тестировщиков API, нажмите кнопку Включить.

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

Используйте Swift Package Manager для установки и управления зависимостями Firebase.

  1. В Xcode, с приложением проекта открыто, перейдите в меню Файл> Swift пакеты> Добавить пакет Завис.
  2. При появлении запроса добавьте репозиторий Firebase Apple Platform SDK:
  3.   https://github.com/firebase/firebase-ios-sdk
      
  4. Выберите библиотеку распространения приложений.
  5. По завершении Xcode автоматически начнет разрешение и загрузку ваших зависимостей в фоновом режиме.

Далее выполните несколько шагов настройки:

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

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

    Добавьте appdistribution-<encoded-google-app-id> схему URL, включив фрагмент в вашем 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
  2. Импорт модуля Firebase в вашем UIApplicationDelegate :

    Быстрый

    Примечание: Этот продукт не доступен на MacOS, Mac Catalyst, tvOS или целей watchOS.

    import Firebase
    

    Цель-C

    Примечание: Этот продукт не доступен на MacOS, Mac Catalyst, tvOS или целей watchOS.

    @import Firebase;
    
  3. Настройте FirebaseApp общей экземпляр, как правило , в вашем приложении application:didFinishLaunchingWithOptions: метод:

    Быстрый

    Примечание: Этот продукт не доступен на MacOS, Mac Catalyst, tvOS или целей watchOS.

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

    Цель-C

    Примечание: Этот продукт не доступен на MacOS, Mac Catalyst, tvOS или целей watchOS.

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

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

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

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

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

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

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

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

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

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

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

Быстрый

Примечание: Этот продукт не доступен на 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 см ссылочного распространения документация App для Swift и Objective-C .

Шаг 4: Создание и испытание вашей реализации

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

Посетите App Distribution Руководства по устранению неисправностей для помощи с общими проблемами, такими как:

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