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 ログイン ライブラリを使用して、iOS アプリに Google ログインを統合します。

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

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

Google API Console

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 を選択して、Firebase を Google Cloud プロジェクトに追加します。

      関連項目: Firebase プロジェクトと Google Cloud の関係

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

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

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

    リンクされていないクライアントがある場合は、[App Check] ページの [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 を使用するようにアプリを登録した後、開発中のシミュレータや継続的インテグレーション(CI)環境など、App Check が通常は有効と見なさない環境でアプリを実行する場合は、App Attest の代わりに App Check デバッグ プロバイダを使用するアプリのデバッグビルドを作成できます。

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