iOS用Facebookログイン - クイックスタート

制限付きログインのためにエンドポイントに変更が加えられ、limited.facebook.comからアクセス可能になりました。

利用者がFacebookでアプリにログインする際にアクセス許可をアプリに付与することができるので、アプリは情報を取得したり、利用者の代わりにFacebookでアクションを実行したりできます。

以下の手順で、FacebookログインをiOSプロジェクトに追加することができます。

1. ログイン

アプリの作成または開発者としての登録を行うには、Facebookにログインしてください。

2.開発環境をセットアップする

iOS用Facebookログインを使用する前に、開発環境を設定します。

Swift Package Manager (SPM)を使用する
  1. Xcodeで、[File] > [Swift Packages] > [Add Package Dependency]の順にクリックします。
  2. 表示されるダイアログで、リポジトリURLとしてhttps://github.com/facebook/facebook-ios-sdkを入力します。
  3. [Version]に、最新のiOS用Facebook SDKのバージョンを入力します。
  4. プロジェクトで使用するライブラリを選択するプロンプトを終了します。

3.アプリをFacebookに登録、設定する

Facebookログインを使用できるよう、バンドル識別情報を追加してアプリを登録し、設定します。

このステップを完了するには、ログインしてください。

4.プロジェクトを構成する

Info.plistファイルに、アプリに関するデータが含まれているXMLスニペットを挿入します。

Facebookログインを統合すると、特定のアプリイベントは、アプリイベントの自動記録を無効にしない限り、イベントマネージャのために自動的に記録、収集されます。これは、アプリコードで変更できます。また、アプリダッシュボードかイベントマネージャの[アプリイベント]の下のトグルで切り替えることもできます。AutoLogAppEventsEnabledのフラグとトグルとの間で値が競合している場合、「Facebook SDKの自動イベント記録」のトグル値が優先されることに注意してください。収集される情報やアプリイベントの自動記録を無効にする方法については、アプリイベントの自動記録をご覧ください。

  1. Info.plistを右クリックし、[プログラムで開く]▸[ソースコード]を選択します。
  2. 次のXMLスニペットをコピーして、ファイルの本文(<dict>...</dict>)に貼り付けます。
    <key>CFBundleURLTypes</key>
    <array>
      <dict>
      <key>CFBundleURLSchemes</key>
      <array>
        <string>fbAPP-ID</string>
      </array>
      </dict>
    </array>
    <key>FacebookAppID</key>
    <string>APP-ID</string>
    <key>FacebookClientToken</key>
    <string>CLIENT-TOKEN</string>
    <key>FacebookDisplayName</key>
    <string>APP-NAME</string>
  3. キー[CFBundleURLSchemes]<array><string>にあるAPP-IDは、自身のアプリIDに置き換えてください。
  4. キーFacebookAppID<string>にあるAPP-IDは、自身のアプリIDに置き換えてください。
  5. キーFacebookClientToken<string>にあるCLIENT-TOKENは、アプリダッシュボードの[設定 > 高度 > クライアントトークン]にある値に置き換えてください。
  6. キーFacebookDisplayName<string>にあるAPP-NAMEは、実際のアプリ名に置き換えてください。
  7. Facebookアプリへのアプリ切り替えを実行できるFacebookダイアログ(ログイン、シェア、アプリの招待など)のいずれかを使用するには、アプリのInfo.plistに以下を含める必要があります。
    <key>LSApplicationQueriesSchemes</key>
    <array>
      <string>fbapi</string>
      <string>fb-messenger-share-api</string>
    </array>

Info.plistにキーとしてFacebookAutoLogAppEventsEnabledを追加することで、アプリイベントの自動収集をtrueまたはfalseに直接設定できるようになります。

Mac Catalystアプリでログインが機能するには、プロジェクトにキーチェーン共有機能を含める必要があります。
  1. アプリターゲットを設定する際に、[署名と機能]タブの[+ 機能]ボタンを選択します。
  2. キーチェーン共有機能を見つけて選択します。
  3. ターゲットとしてキーチェーン共有機能がリストされていることを確認します。

5.アプリデリゲートに接続する

以下のコードで、 AppDelegate.swift 内のコードを置き換えます。このコードは、アプリの起動時にSDKを初期化し、ログインアクションやシェアアクションが実行されたときにネイティブFacebookアプリのログインとシェアリングをSDKが処理できるようにします。このコードを使用しない場合は、ユーザーはFacebookにログインした状態で、ログイン用のアプリ内ブラウザーを使用する必要があります。
    
// AppDelegate.swift
import UIKit
import FacebookCore

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {    
    func application(
        _ application: UIApplication,
        didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
    ) -> Bool {          
        ApplicationDelegate.shared.application(
            application,
            didFinishLaunchingWithOptions: launchOptions
        )

        return true
    }
          
    func application(
        _ app: UIApplication,
        open url: URL,
        options: [UIApplication.OpenURLOptionsKey : Any] = [:]
    ) -> Bool {
        ApplicationDelegate.shared.application(
            app,
            open: url,
            sourceApplication: options[UIApplication.OpenURLOptionsKey.sourceApplication] as? String,
            annotation: options[UIApplication.OpenURLOptionsKey.annotation]
        )
    }  
}

iOS 13では、URLを開く機能が SceneDelegateに移動されました。iOS 13以上を使用している場合は、次のメソッドを SceneDelegate に追加して、ログインや共有機能のような操作を意図したとおりに行えるようにしてください。
// SceneDelegate.swift
import FacebookCore
  ...
func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) {
    guard let url = URLContexts.first?.url else {
        return
    }

    ApplicationDelegate.shared.application(
        UIApplication.shared,
        open: url,
        sourceApplication: nil,
        annotation: [UIApplication.OpenURLOptionsKey.annotation]
    )
}

6.Facebookログインをコードに追加する

iOSアプリにFacebookログインボタンを使用します。

6a. Facebookログインをコードに追加する

アプリにFacebook公式のログインボタンを実装するには、ビューコントローラーに以下のコードスニペットを追加します。
// Add this to the header of your file, e.g. in ViewController.swift 
import FacebookLogin

// Add this to the body
class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
	
        let loginButton = FBLoginButton()
        loginButton.center = view.center
        view.addSubview(loginButton)
    }
}
この時点で、アプリを実行し、Facebookログインボタンを使用してログインできるようになります。

6b. 現在のログインステータスを確認する

アプリには一度に1人のみがログインできます。Facebookでは、アプリにログインした各利用者をAccessToken.currentで表します。
このトークンはLoginManagerにより設定され、AccessToken.currentが設定されるとキーチェーンストアにも自動的に書き込まれます。
AccessTokenにはuserIDが含まれており、これを使用して利用者を特定できます。
ビューコントローラーを更新して、読み込み時に既存のトークンが確認されるようにしてください。これにより、アプリにアクセス許可が付与済みの場合は、それ以降、不要なログインフローが表示されなくなります。
override func viewDidLoad() {
    super.viewDidLoad()

    if let token = AccessToken.current,
        !token.isExpired {
        // User is logged in, do work such as go to next view controller.
    }
}
    

6c. アクセス許可をリクエストする

Facebookログインを使用する際に、アプリでは利用者データのサブセットへのアクセス許可をリクエストできます。外部ユーザーが使用できるようにするには、Facebookログインにpublic_profile詳細アクセス許可が必要です。
Facebookログインボタンの読み取りアクセス許可
追加の読み取り許可をリクエストするには、 permissions プロパティを FBLoginButton オブジェクトで設定します。
// Extend the code sample from 6a. Add Facebook Login to Your Code
// Add to your viewDidLoad method:
loginButton.permissions = ["public_profile", "email"]
  
ユーザーには、リクエストされたアクセス許可をアプリに付与するように求めるメッセージが表示されます。アクセス許可によっては、ログインレビューが必要になります。アクセス許可について詳しくは、アクセス許可の管理をご覧ください。

7.次のステップ

FacebookログインがiOSアプリに追加されました。詳細なガイダンスについては、Facebookの他のドキュメントページをご覧ください。
利用者による自分のデータのFacebookからの削除を求めるリクエストに対応するため、データ削除コールバックを実装します。
アプリにイベントを追加し、解析情報を表示し、広告のパフォーマンスを測定し、広告ターゲットの対象者を作成します。
iOSアプリ用Facebookログインの詳細な設定方法を説明しています。
Facebookログインを通じてアプリがアクセスするデータの種類を管理します。
Facebook SDKによって返されるエラーへの対処方法を説明しています。
Facebookログインフローが機能することをテストして確認します。
Facebookログインの利用者に対してリクエストするFacebookデータによっては、公開前にアプリのレビュー申請が必要になる場合があります。
独自のログインフローを作成する方法については、ログインフローを手動で構築するをご覧ください。