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

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

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

始める前に

  1. Xcode 12.5 以降を使用していることを確認します。

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

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

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

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

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

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

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

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

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

    クライアントのリンクを解除すると、[App Check] ページの [iOS 用 Google Identity] セクションに「追加設定が必要な未リンクの OAuth クライアントが n 件あります」というメッセージが表示されます。

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

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

2. アプリにベータ版の Google ログイン ライブラリを追加する

  1. Xcode プロジェクトで、Google ログインの依存関係をバージョン 7.1.0-fac-beta-1.1.0 に設定します。

    SPM

    googlesignin-ios の依存関係ルールに正確なバージョン(7.1.0-fac-beta-1.1.0)を設定します。

    CocoaPods

    Podfile を更新します。

    source 'https://github.com/CocoaPods/Specs.git'
    source 'https://github.com/firebase/SpecsDev.git'
    
    target 'YourAppName' do
      use_frameworks!
    
      pod 'GoogleSignIn',
          :git => 'https://github.com/google/GoogleSignIn-iOS.git',
          :tag => '7.1.0-fac-beta-1.1.0'
      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 を使用するをご覧ください。