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


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

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

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

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

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

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

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

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

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

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

    Быстрый

    import FirebaseCore
    import FirebaseAppDistribution
    

    Objective-C

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

    Быстрый

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

    Objective-C

    // Use Firebase library to configure APIs
    [FIRApp configure];
    
  5. Если свизлинг отключен, передайте все открытые 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
    }
    

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

App Distribution 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)
})

Objective-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
  })
}

Objective-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 Distribution для Swift и Objective-C .

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

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

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

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


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

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

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

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

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

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

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

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

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

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

    Быстрый

    import FirebaseCore
    import FirebaseAppDistribution
    

    Objective-C

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

    Быстрый

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

    Objective-C

    // Use Firebase library to configure APIs
    [FIRApp configure];
    
  5. Если свизлинг отключен, передайте все открытые 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
    }
    

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

App Distribution 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)
})

Objective-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
  })
}

Objective-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 Distribution для Swift и Objective-C .

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

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

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

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