ログインレビュー

アプリでpublic_profileemail以外のものが必要な場合、アプリをリリースする前に、Facebookによる審査を受ける必要があります。審査プロセスと、審査にパスするための条件について詳しくは、次をご覧ください。

ログインレビューガイド

カスタムログインボタン

Facebookブランドのログインボタンを使用する(「iOS用Facebookログイン - クイックスタート」を参照)代わりに、カスタムレイアウトやカスタム動作を設計することが望ましい場合もあるかもしれません。以下のサンプルコードでは、ログインマネージャークラス(FBSDKLoginManager)およびカスタムボタン(UIButton)を使用して、ログインダイアログを呼び出しています。ログインダイアログを起動するには、その他のカスタムユーザーインターフェイスやイベント処理を使用することもできます。

class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()

        // Add a custom login button to your app
        let loginButton = UIButton(type: .custom)
        loginButton.backgroundColor = .darkGray
        loginButton.frame = CGRect(x: 0, y: 0, width: 180, height: 40)
        loginButton.center = view.center
        loginButton.setTitle("My Login Button", for: .normal)

        // Handle clicks on the button
        loginButton.addTarget(self, action: #selector(loginButtonClicked), for: .touchUpInside)

        view.addSubview(loginButton)
    }
  
  
    // Once the button is clicked, show the login dialog
    func loginButtonClicked() {
        let loginManager = LoginManager()
        loginManager.logIn(permissions: ["public_profile"], from: self) { result, error in
            if let error = error {
                print("Encountered Erorr: \(error)")
            } else if let result = result, result.isCancelled {
                print("Cancelled")
            } else {
                print("Logged In")
            }
        }
    }
}

    

Interface Builderの使用

この一連の手順は、Facebook iOS SDKのバージョン12.0.0以降で必要です。この手順を完了していないと、Interface Builderを使用したアプリがクラッシュする可能性があります。

Interface Builderでグラフィカルな方法でログインボタンを追加するには、次のようにします。

  1. Viewオブジェクトをレイアウトに追加します。制限を設定して位置を指定します。
  2. Identity inspectorにおいて、ClassプロパティをFBSDKLoginButtonに変更します。

レイアウトは次のようになります。

: FBSDKLoginButtonクラスにモジュールを設定しないでください。これは次のようにNoneでなければなりません。

: XCFrameworksの既知の問題のため、Xcodeのログに以下のエラーが表示されることがあります。

[Storyboard] Unknown class FBSDKLoginButton in Interface Builder file.

これを修正するには、application:didFinishLaunchingWithOptions:メソッドに以下を追加することによって、ストーリーボードがロードされる前にFBSDKLoginButtonクラスを「プリロード」します。

// For Swift
_ = FBLoginButton.self

// For Objective-C
[FBSDKLoginButton class];

アクセストークン

通知

NotificationCenter.AccessTokenDidChange 通知により、track AccessToken.current の変更内容をトラッキングできます。次のコードで、ユーザーのログイン状態に変更があった場合に対応できます。

NotificationCenter.default.addObserver(
    forName: .AccessTokenDidChange,
    object: nil,
    queue: .main
) { notification in
    if notification.userInfo?[AccessTokenDidChangeUserIDKey] != nil {
        // Handle user change
    }
}

期間の長いトークンをSDKにより更新する場合など、iOS SDKが時間の経過とともに AccessToken.currentを更新する場合があります。したがって、通知の中のuserInfo ディクショナリをチェックして、ユーザーが変更を加えたかどうか AccessTokenDidChangeUserIDKey を調べなければなりません。

プロフィール

FBSDKProfileには公開プロフィール情報が含まれるため、ユーザーの名前およびプロフィール写真を使用して該当アプリをパーソナライズすることができます。ログインしているユーザーのプロフィールは、loadCurrentProfile(completion:)を使用すると読み込めます。

Profile.loadCurrentProfile { profile, error in
    if let firstName = profile?.firstName {
        print("Hello, \(firstName)")
    }
}

enableUpdatesOnAccessTokenChangeプロパティをtrueに設定すると、プロフィールを自動的にProfile.currentに読み込めます。それにより、.ProfileDidChangeの通知を調べて、プロフィールの変更に応答することもできます。

Profile.enableUpdatesOnAccessTokenChange(true)
NotificationCenter.default.addObserver(
    forName: .ProfileDidChange,
    object: nil,
    queue: .main
) { notification in
    if let currentProfile = Profile.current {
        // Update for new user profile
    }
}

プロフィール写真の表示

FBSDKProfilePictureViewクラスは、ある人物のFacebookプロフィール写真を表示するための簡単な手段を提供します。単にそのインスタンスのprofileIDプロパティを設定するだけです。それをAccessToken.current.userID の値に設定すれば、現在ログインしている人のプロフィール写真が表示されます。

let profilePictureView = FBProfilePictureView()
profilePictureView.frame = CGRect(x: 0, y: 0, width: 100, height: 100)
profilePictureView.profileID = AccessToken.current!.userID
view.addSubview(profilePictureView)

認証タイプの設定

iOS用Facebook SDKのFacebookログインボタンのデフォルトauth_typeは、rerequestです。以前に却下されたアクセス許可をリクエストしてしまうことを回避するには、auth_typenilに設定します。また、それをreauthorizeに設定して、ユーザーのデータアクセスが期限切れになった場合に、データ再認証ダイアログを表示することもできます。

以下は、Swiftでauth_typeを設定する方法を示す例です。

let loginButton = FBLoginButton()

// Set to nil for no auth_type
button.authType = nil

// Or set to reauthorize
button.authType = .reauthorize

以下は、ログインマネージャーでログイン構成を使用することによりauth_typeを設定する方法を示す例です。

let config = LoginConfiguration(
    permissions: [],
    tracking: .enabled,
    messengerPageId: nil,
    authType: nil
)

let loginManager = LoginManager()
loginManager.logIn(viewController: self, configuration: config!) { loginResult in
    // Do something with loginResult
}