Google 致力于为黑人社区推动种族平等。查看具体举措
此页面由 Cloud Translation API 翻译。
Switch to English

使用App Distribution SDK设置应用内新构建提醒

可选的Firebase App Distribution SDK可让您在可以安装新版本的应用程序时向测试人员显示应用程序内警报。本指南说明了如何使用App Distribution SDK为测试人员创建和自定义新的构建警报。

在你开始之前

如果尚未将Firebase添加到您的iOS项目中

步骤1 :启用App Distribution Tester API

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

  2. Firebase App Testers API下,单击“启用”

第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. 将Firebase模块导入UIApplicationDelegate

    迅速

    import Firebase
    

    物镜

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

    迅速

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

    物镜

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

第3步:配置应用内警报

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

基本配置

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

  1. 通过提示测试人员使用其Google帐户登录“应用分发”来检查其是否启用了警报。

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

物镜

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

物镜

[[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测试人员帐户,因此您可以选择仅针对尚未登录的测试人员显示登录UI。在测试人员登录之后,您可以调用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
  })
}

物镜

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