LoginSignup
29
28

More than 5 years have passed since last update.

iOSアプリでFacebook認証を作るときに注意すること

Posted at

前提

公式のSDKを使用する
導入の仕方は割愛

SDK URL 備考
Facebook SDK https://developers.facebook.com/docs/ios swift用のSDKもあるhttps://developers.facebook.com/docs/swift

認証の仕方

ログインメソッドのプロパティで、
認証の振る舞いを選択できるので事前に決めておきましょう

FBSDKLoginManager().loginBehavior = .SystemAccount

Facebook SDK

振る舞い 内容
Native Facebookアプリに遷移して認証
Browser safari or SFSafariViewController(iOS9~)で認証
SystemAccount 設定アプリのアカウントで認証
Web UIWebViewでログイン

iOS9~は、なんとNative(Facebookアプリ経由のログイン認証)が利用できなくなっている。
Instagramも利用できなくなっているので、おそらく間違いない。
↓ソース
http://stackoverflow.com/questions/32620002/facebook-login-ios-9-without-safari?answertab=votes#tab-top

そのため、SystemAccountを使ったログインなど別の振る舞いを使ってログインする必要があります。

SystemAccountを利用した場合の挙動

login.jpg

  • ログインメソッドを呼んだタイミングでアラートを表示するUIになる
  • 設定アプリで、Facebookログインしていない場合、SafariViewControllerが表示される
  • Facebookアプリでログインしても、設定アプリがログイン状態になるわけではないので、上記のケースは十分起こりえる

実装するときに注意すること

投稿の許可と、ユーザーデータ取得の許可でログインメソッドが違う

<対処法>
各パーミッションごとにログイン処理を実装する必要があります。

  • 投稿用:logInWithPublishPermissions
  • データ取得用:logInWithReadPermissions

アプリに対してのアクセス可否ごとにエラー処理する必要がある

Facebookアプリのアプリ管理画面で、アクセスの可否をコントロールできるため、
各パーミッションへのアクセス可否を判定してエラーハンドリングする必要があります。

fbauth.png

Facebookでアプリに提供するパーミッションを変更できる

<対処法>

token確認時
FBSDKAccessToken.hasGranted メソッドでBool値が返ってくるので、アクセス許可しているか確認可能。
友達リストへのアクセスを許可しているか確認する場合は、こんな感じtoken.hasGranted("user_friends")

login時
login用メソッドのレスポンスで、アクセス拒否している権限を取得できる

FBSDKLoginManagerLoginResult.declinedPermissions

設定アプリでアクセス拒否している場合がある

対処法
login用メソッドのレスポンスで、Error Code=306が返ってくるので、アプリ側でアラートを出すなど適切に処理する

テスト

Facebookのアプリ管理画面
(https://developers.facebook.com/apps/<アプリID>/dashboard/)で、
テストユーザーの作成が、できるので、そのアカウントを使用する。
間違っても自分のアカウントは使わない。

テストフロー

ダッシュボートのこのボタンからテストユーザーの登録へ、

スクリーンショット 2016-08-31 18.32.32.png

作成後。

  • ユーザーID, パスワードが変更
  • テストアカウント同士で、友達の登録
  • tokenの取得

などができる

fb-testUser.png

Graph APIエクスプローラ
で、先ほど取得したtokenを使って、テストユーザーのtokenの情報をコントロールできる
例えば、ユーザーが友達リスト取得のアクセスだけ拒否したケースなど細かい認証周りのテストを、簡単にすることができる。

graphExploler.png

me/permissions/user_friendsのエンドポイントにDELETリクエストしているとこ

まとめ

Facebookログインの機能をアプリに実装する前に、

  • ログインの振る舞い
  • 各権限ごとにアクセス拒否された場合の振る舞い

を決めておきましょう

Facebookが提供してくれているテスト環境を有効活用しましょう

参考URL

Facebookの公式ドキュメント
https://developers.facebook.com/docs/ios

導入方法が写真付きで分かりやすく載ってます
http://xoyip.hatenablog.com/entry/2014/05/26/200000

29
28
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
29
28