Google 致力于为黑人社区推动种族平等。查看具体举措

使用 App Distribution SDK 设置应用内新构建警报

可选的 Firebase 应用分发 SDK 可让您在新版本的应用可供安装时向测试人员显示应用内提醒。本指南介绍了如何使用 App Distribution SDK 为您的测试人员创建和自定义新的构建警报。

在你开始之前

如果您还没有,请将 Firebase 添加到您的 iOS 项目

第 1 步:启用 App Distribution Tester API

  1. Google Cloud Console 中选择您的项目。

  2. Firebase App Testers API 下,点击Enable

第 2 步:将应用分发添加到您的应用

我们建议使用CocoaPods来安装 Firebase 库。您也可以选择直接集成 SDK 框架

  1. 打开您为项目创建的 podfile(或运行pod init创建一个),然后在目标部分中添加以下行:

    pod 'Firebase/AppDistribution'
  2. 在 podfile 的目录中,运行pod install ,然后打开创建的.xcworkspace文件。

  3. 对您的 Google 应用 ID 进行编码(仅 iOS 版本 9 和 10 需要):

    对您的 Google 应用 ID 进行编码

    通过在Info.plist file包含代码段来添加appdistribution-<encoded-google-app-id> URL 方案(有关如何在 Xcode 中添加 URL 方案的说明,请参阅Apple 的文档):

    <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 应用 ID 进行编码。请注意,您的 Google 应用 ID 位于您的GoogleService-Info.plist文件中。例如,如果您的 Google 应用 ID 是:

    7:77777777777:ios:123456789

    您编码的 Google 应用 ID 是:

    7-77777777777-ios-123456789
  4. UIApplicationDelegate导入 Firebase 模块:

    迅速

    import Firebase
    

    目标-C

    @import Firebase;
    
  5. 配置FirebaseApp共享实例,通常在您应用的application:didFinishLaunchingWithOptions:方法中:

    迅速

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

    目标-C

    // Use Firebase library to configure APIs
    [FIRApp configure];
    
  6. 最后,重新编译您的应用程序。

第 3 步:配置应用内警报

应用分发 SDK 提供了两种为测试人员设置应用内构建警报的方法:基本警报配置,它带有一个预构建的登录对话框以显示给测试人员,以及高级警报配置,它允许您自定义您自己的用户界面 (UI)。如果您不熟悉 App Distribution SDK,我们建议您首先使用基本警报配置。

基本配置

使用checkForUpdate向尚未启用警报的测试人员显示预先构建的启用警报对话框,然后检查是否有新版本可用。调用时,该方法执行以下序列:

  1. 通过提示测试人员使用其 Google 帐户登录 App Distribution 来检查测试人员是否已启用警报。

  2. 如果测试人员尚未启用警报,则显示一个预先构建的对话框。

    启用警报是测试设备上的一次性过程,并在应用程序更新后持续存在。警报在测试设备上保持启用状态,直到卸载应用程序或调用signOutTester方法为止。有关更多信息,请参阅该方法的参考文档( SwiftObjective-C )。

  3. 检查新的可用版本以供测试人员安装。

您可以在应用程序中的任何位置包含checkForUpdate 。例如,您可以通过在UIViewControllerviewDidAppear中包含checkForUpdate来提示您的测试人员在启动时安装新的可用构建。

以下示例检查测试人员是否已启用警报并有权访问新构建,如果是,则在构建可供安装时显示对话框:

检查启用的警报

迅速

AppDistribution.appDistribution().checkForUpdate(completion: { release, error in
// Includes a pre-built enable alerts dialogue that lets your tester enable alerts.
// You can also customize your own user interface that prompts the tester to
// install a newly available distribution (refer to sample code below).
})

目标-C

[[FIRAppDistribution appDistribution]
    checkForUpdateWithCompletion:^(FIRAppDistributionRelease *_Nullable release,
                                   NSError *_Nullable error) {
// Includes a pre-built enable alerts dialogue that lets your tester enable alerts.
// You can also customize your own user interface that prompts the tester to
// install a newly available distribution (refer to sample code below).
}];

显示安装新版本的对话框

迅速

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

[[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];
  }
}];

高级配置

signInTesterisTesterSignedIn方法为您自定义测试人员的登录体验提供了更大的灵活性,因此它可以更好地匹配您的应用程序的外观和感觉。

以下示例检查测试人员是否已登录其 Firebase App Distribution 测试人员帐户,因此您可以选择仅向尚未登录的测试人员显示您的登录界面。测试人员登录后,您可以调用checkForUpdate以检查测试人员是否有权访问新版本。

迅速

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

// 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 ,请参阅SwiftObjective-C的 App Distribution 参考文档。

第 4 步:构建和测试您的实现

最后,通过使用 Firebase 控制台将构建分发给测试人员来构建您的应用并测试您的实现。

访问应用程序分发故障排除指南以获取有关常见问题的帮助,例如:

  • 测试人员未收到应用内提醒
  • 多次提示测试人员登录 Google