iOS で Google ログインの App Check を使ってみる

このページでは、iOS アプリで App Check を有効にする方法について説明します。App Check を有効にすると、プロジェクトに代わって Google の OAuth 2.0 エンドポイントにアクセスできるのは、自分のアプリだけになります。この機能の概要をご覧ください。

App Check は App Attest を使用して、OAuth 2.0 リクエストが正規のアプリから送信されたリクエストであることを確認します。App Check は App Attest を使用して不正行為のリスクを分析しません。

始める前に

  1. Xcode 12.5 以降があることを確認します。

  2. Google ログイン ライブラリを使用して、Google ログインを iOS アプリに統合します。

1. プロジェクトを設定する

App Check は、 または Firebase コンソールで有効にできます。両方で有効にする必要はなく、どちらか一方で有効にすれば十分です。

iOS クライアントで App Check を正常に有効にするには、次の要件を満たす必要があります。
  • iOS クライアントのチーム ID を指定する必要があります。
  • バンドル ID にワイルドカードを使用することはできません。ワイルドカードは複数のアプリに解決される可能性があるためです。つまり、バンドル ID にアスタリスク(*)記号を含めることはできません。
App Check を有効にするには、iOS クライアントの編集ビューで [Firebase App Check を使用して、OAuth クライアントを不正行為から保護します] 切り替えボタンをオンにします。

App Check を有効にすると、OAuth クライアントの編集ビューに、クライアントからの OAuth リクエストに関連する指標が表示されます。App Check を適用するまで、未確認のソースからのリクエストはブロックされません。指標モニタリング ページの情報は、適用を開始するタイミングを判断するのに役立ちます。

iOS アプリで App Check を有効にすると、App Check 機能に関連するエラーが表示されることがあります。このようなエラーを解決するには、次の手順を試してください。

  • 指定したバンドル ID とチーム ID が有効であることを確認します。
  • バンドル ID にワイルドカードを使用していないことを確認します。

Firebase コンソール

  1. Google ログインで App Check を使用するには、Firebase プロジェクトが必要です。

    • アプリですでに Firebase を使用している場合は、同じプロジェクトを使用します。

    • アプリで Google ログインを使用しているものの Firebase を使用していない場合は、すでに Google Cloud プロジェクトがあります。Firebase コンソールで新しいプロジェクトを作成するときに Firebase を選択して、Google Cloud プロジェクトに Firebase を追加します。

      関連情報: Firebase プロジェクトと Google Cloud の関係

  2. まだ追加していない場合は、Firebase コンソールの [プロジェクト設定] ページを使用して、iOS アプリを Firebase プロジェクトに追加します。

  3. Firebase コンソールの [App Check] セクションで、App Attest プロバイダで App Check を使用するようにアプリを登録します。

  4. プロジェクトのすべての OAuth クライアントがアプリにリンクされていることを確認します。

    リンク解除されたクライアントがある場合は、アプリチェック ページの [Google Identity for iOS] セクションに、「追加の設定が必要な未リンクの OAuth クライアントが n 個あります」というメッセージが表示されます。

    また、App Check で設定した OAuth クライアントを削除した場合は、「一致する OAuth クライアントがないオーバーライドが n 件あります」というメッセージが表示されます。これらのオーバーライドを削除することで、安全にクリーンアップできます。

    リンクされていないクライアントを既存または新しいアプリにリンクするには、Firebase コンソールの [OAuth クライアント] ページを使用します。

2. アプリに Google ログイン ライブラリを追加する

  1. Xcode プロジェクトで、Google ログインの依存関係をバージョン 8.0.0 以上に設定します。

    SPM

    googlesignin-ios の依存関係ルールをバージョン 8.0.0 以上に設定します。

    CocoaPods

    Podfile を更新します。

    source 'https://github.com/CocoaPods/Specs.git'
    source 'https://github.com/firebase/SpecsDev.git'
    
    target 'YourAppName' do
      use_frameworks!
    
      pod 'GoogleSignIn','~> 8.0'
          :git => 'https://github.com/google/GoogleSignIn-iOS.git'
      pod 'GoogleSignInSwiftSupport'  # If you use SwiftUI.
    end
    

    次に、pod install を実行し、作成した .xcworkspace ファイルを開きます。

  2. Xcode で、アプリに App Attest 機能を追加します。

  3. プロジェクトの .entitlements ファイルで、App Attest 環境を production に設定します。

3. App Check を初期化する

アプリ デリゲートの didFinishLaunchingWithOptions メソッドで、GIDSignIn.sharedInstance.configure(completion:) を呼び出します。ユーザーが感じるレイテンシを最小限に抑えるため、このメソッドはアプリのライフサイクルのできるだけ早い段階で呼び出す必要があります。

import SwiftUI
import GoogleSignIn

class AppDelegate: NSObject, UIApplicationDelegate {
  func application(
    _ application: UIApplication,
    didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil
  ) -> Bool {
    #if targetEnvironment(simulator)
    // Configure for debugging.
    // See: https://developers.google.com/identity/sign-in/ios/appcheck/debug-provider
    #else
    GIDSignIn.sharedInstance.configure { error in
      if let error {
        print("Error configuring `GIDSignIn` for Firebase App Check: \(error)")
      }
    }
    #endif

    return true
  }
}

@main
struct YourAppNameApp: App {
  @UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate

  // ...
}

次のステップ

アプリに App Check ライブラリがインストールされたら、更新されたアプリのユーザーへの配布を開始します。

更新されたクライアント アプリは、Google の認証エンドポイントにリクエストを送信するたびに App Check トークンを送信しますが、Firebase コンソールの [App Check] セクションで適用を有効にするまで、エンドポイントは有効なトークンを必要としません。

指標をモニタリングする

ただし、適用を有効にする前に、既存の正規ユーザーを中断しないように対策を行う必要があります。一方、アプリリソースの不審な使用に気づいた場合は、すぐに適用を有効にすることもできます。

この決定を行ううえで役立つ情報として、Google ログインの App Check 指標を確認できます。

App Check の適用を有効にする

App Check がユーザーに与える影響を理解し、続行する準備ができたら、App Check の適用を有効にします。

デバッグ環境で App Check を使用する

App Check にアプリを登録した後に、通常は App Check で有効と分類されない環境(開発中のシミュレーターや継続的インテグレーション(CI)環境など)でアプリを実行する場合は、App Attest の代わりに App Check デバッグ プロバイダを使用するようにアプリのデバッグビルドを作成できます。

デバッグ プロバイダで App Check を使用するをご覧ください。