開発者は、制限付きログインによって、ユーザーのトラッキングに関してログインが制限されていることを示唆できるようになります。
ログインの試行が成功すると、その試行に関する情報を提供するグローバルAuthenticationToken
のインスタンスが設定されます。このインスタンスは、クライアントのサーバーで認証を検証するために使用できます。さらに、ユーザーのapp-scoped ID、ユーザーの名前、プロフィール写真などの基本情報が含まれる共有プロフィールインスタンスも設定されます。
リクエストできる利用可能なアクセス許可は、以下のとおりです。
public_profile
email
gaming_profile
gaming_user_picture
user_age_range
user_birthday
user_friends
user_gender
user_hometown
user_link
user_location
user_messenger_contact
開発者は、制限付きログインにより、自身のサーバーで認証の試行を検証するために使用するノンスを渡すことができるようになります。ノンスによるトークンの認証については、制限付きログインのOIDCトークンの認証をご覧ください。
iOS用Facebookアプリでログイン済みのユーザーにログインダイアログが表示されるアプリスイッチは、制限付きログインのフローではサポートされていません。
iOS用Facebook SDKでは、新しいFBSDKLoginTracking
列挙が提供されています。指定できる値は、enabled
とlimited
です。制限付きログインの場合はlimited
を使います。
enum LoginTracking {
case enabled
case limited
}
さらに、制限付きログインではFBSDKLoginConfiguration
を使ってログイン試行のデフォルトの振る舞いを変更できます。この構成は、デフォルトプロパティ、明示的プロパティ(Swiftのみ)、またはいくつかあるイニシャライザーの1つによって作成されます。
init?(
permissions: Set
プロパティ | 説明 |
---|---|
| ログイン試行に対してリクエストされたアクセス許可。デフォルトでは空に設定されます。 |
| ログイン試行に対してリクエストされたアクセス許可。デフォルトでは空に設定されます。 |
| ログインのトラッキング設定。デフォルトは |
| 構成の作成で使ったノンス。ファクトリーメソッドにノンスが提供されていない場合は、一意のノンスが使われます。 |
以下の条件が満たされない場合、構成の作成は失敗します。
ノンスは、空白文字を含まない文字列でなければならず、空にすることはできません。
トラッキングの対象範囲外のアクセス許可をリクエストすることはできません。例えば、トラッキングが.limited
の場合、user_likes
のリクエストは機能しません。
ログインマネージャークラスを直接使ってアプリに制限付きログインを実装するには、最新のiOS用Facebook SDKにアップグレードしてから、次のコードを使います。
let loginManager = LoginManager()
// Ensure the configuration object is valid
guard let configuration = LoginConfiguration(
permissions:["email", "user_friends", "user_birthday", "user_age_range", "user_gender", "user_location", "user_hometown", "user_link"],
tracking: .limited,
nonce: "123"
)
else {
return
}
loginManager.logIn(configuration: configuration) { result in
switch result {
case .cancelled, .failed:
// Handle error
break
case .success:
// getting user ID
let userID = Profile.current?.userID
// getting pre-populated email
let email = Profile.current?.email
// getting pre-populated friends list
let friendIDs = Profile.current?.friendIDs
// getting pre-populated user birthday
let birthday = Profile.current?.birthday
// getting pre-populated age range
let ageRange = Profile.current?.ageRange
// getting user gender
let gender = Profile.current?.gender
// getting user location
let location = Profile.current?.location
// getting user hometown
let hometown = Profile.current?.hometown
// getting user profile URL
let profileURL = Profile.current?.linkURL
// getting id token string
let tokenString = AuthenticationToken.current?.tokenString
}
}
ログインボタンを使ってアプリに制限付きログインを実装するには、最新のiOS用Facebook SDKにアップグレードしてから、次のコードを使います。
override func viewDidLoad() {
super.viewDidLoad()
setupLoginButton()
}
func setupLoginButton() {
loginButton.delegate = self
loginButton.permissions = ["email"]
loginButton.loginTracking = .limited
loginButton.nonce = "123" as NSString
}
func loginButton(
_ loginButton: FBLoginButton,
didCompleteWith potentialResult: LoginManagerLoginResult?,
error potentialError: Error?
) {
if let error = potentialError {
// Handle Error
}
guard let result = potentialResult else {
// Handle missing result
}
guard !result.isCancelled else {
// Handle cancellation
}
// Handle successful login
let userID = Profile.current?.userID
let email = Profile.current?.email
let tokenString = AuthenticationToken.current?.tokenString
}