新しいビルドについてテスターに通知する

オプションの Firebase App Distribution iOS および Android SDK を使用すると、アプリの新しいビルドがインストール可能になった場合にアプリ内アラートをテスターに表示できます。このガイドでは、App Distribution iOS および Android SDK を使用してテスター向けの新しいビルドアラートを作成する方法と、それをカスタマイズする方法について説明します。

始める前に

まだ Firebase を iOS プロジェクトに追加していない場合は追加します。

ステップ 1: App Distribution Tester API を有効にする

  1. Google Cloud Console でプロジェクトを選択します。

  2. [Firebase App Testers API] で [有効にする] をクリックします。

ステップ 2: App Distribution をアプリに追加する

  1. プロジェクト用に作成した Podfile を開き(または pod init を実行して作成し)、ターゲット セクション内に次の行を追加します。

    pod 'FirebaseAppDistribution'
  2. podfile のディレクトリで pod install を実行し、作成した .xcworkspace ファイルを開きます。

  3. Firebase モジュールを App 構造体または UIApplicationDelegate にインポートします。

    Swift

    import FirebaseCore
    import FirebaseAppDistribution
    

    Objective-C

    @import FirebaseCore;
    @import FirebaseAppDistribution;
    
  4. アプリ デリゲートの application(_:didFinishLaunchingWithOptions:) メソッドで、FirebaseApp 共有インスタンスを構成します。

    Swift

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

    Objective-C

    // Use Firebase library to configure APIs
    [FIRApp configure];
    
  5. 実装入れ替えが無効の場合は、application(_:open:options:) の実装で、開かれているすべての URL を App Distribution SDK に渡します。

    Swift

    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 でテスター向けアプリ内ビルドアラートを設定するには、基本アラート構成と詳細アラート構成の 2 つの方法があります。基本アラート構成では、事前構築済みのアプリ アップデート ダイアログとログイン ダイアログがテスターに表示されます。詳細アラート構成では、独自のユーザー インターフェースを使用するようにカスタマイズできます。App Distribution SDK を初めて使用する場合は、基本アラート構成を使用することをおすすめします。

基本構成

checkForUpdate を使用して、アラートをまだ有効にしていないテスターに、事前に構築された有効化アラート ダイアログを表示し、新しいビルドが使用可能かどうかを確認します。このメソッドを呼び出すと、このメソッドにより次のシーケンスが実行されます。

  1. テスターに、Google アカウントで App Distribution にログインするように求めて、テスターがアラートを有効にしたかを確認します。

  2. テスターがまだアラートを有効にしていない場合は、事前構築済みのダイアログが表示されます。

    アラートの有効化はテストデバイスで 1 回限り実行するプロセスであり、アプリがアップデートされても保持されます。アプリがアンインストールされるか、signOutTester メソッドが呼び出されるまでは、該当のテストデバイスでアラートは有効のままです。詳細については、このメソッドのリファレンス ドキュメント(Swift または Objective-C)をご覧ください。

  3. 対象のテスター向けの新しいインストール ビルドがあるかどうか確認します。

checkForUpdate() は、アプリ内の任意の場所で呼び出すことができます。たとえば、使用可能な新しいビルドのインストールを起動時にテスターに促すには、アプリのルートビューの onAppear(perform:)checkForUpdate() を含めます。

次のコードでは、テスターがアラートを有効にしているかどうか、また、新しいビルドにアクセスできるかどうかを確認します。アラートが有効であり、インストールすべきビルドがある場合は、ダイアログを表示します。

Swift

注: このプロダクトは、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 テスター アカウントにすでにログインしているかどうかを確認し、まだログインしていないテスターにのみログイン UI を表示するように選択できます。テスターがログインしたら、checkForUpdate() を呼び出して、テスターが新しいビルドにアクセスできるかどうかを確認します。

Swift

注: このプロダクトは、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() など、その他のメソッドの詳細については、SwiftObjective-C の App Distribution リファレンス ドキュメントをご覧ください。

ステップ 4: 実装をビルドしてテストする

最後に、アプリをビルドし、Firebase コンソールを使用してテスターにビルドを配布して実装をテストします。

次のような一般的な問題については、App Distribution のトラブルシューティング ガイドをご覧ください。

  • テスターがアプリ内アラートを受信できない
  • テスターが Google へのログインを複数回求められる