Facebook SDKを使ったSwift3製のiOSアプリで、FacebookにログインしてAccess Token取得するまでの流れをまとめます。
前提
- Swift 3.x
- 公式Facebook SDKを利用する
- Carthageを利用する
Facebook側の設定
- Facebook for developerにログインしてAppsページを開きます。
- 新規Appを作成します。
- アプリID(App ID)をメモします。
- 「プラットフォームを追加」で、iOSアプリを追加します。
- バンドルIDの欄に、Xcodeから取得したBundle Identifierを入力します。
- 全部小文字でないとダメなようです。
- Single Sign OnをONにします。
Facebook SDKインストール
Carthageを使用した例です。
-
XcodeのプロジェクトディレクトリにCartfileを作成して以下を記述します。
github "facebook/facebook-sdk-swift"
-
SDKをダウンロードします。
carthage update
-
Xcodeを開きます。
-
Target > General > Linked Framework and Librariesに以下をdrag & dropします。
- FacebookCore.framework
- FacebookLogin.framework
- FBSDKCoreKit.framework
- FBSDLoginKit.framework
- Bolts.framework
-
Target > Build Phaseを開きます
-
左上の+をクリックして"New Run Script Phase"を選択
-
Run ScriptのShellのエディタに下記を追加
/usr/local/bin/carthage copy-frameworks
-
Run ScriptのInput Filesに下記を追加
$(SRCROOT)/Carthage/Build/iOS/FacebookCore.framework $(SRCROOT)/Carthage/Build/iOS/FacebookLogin.framework $(SRCROOT)/Carthage/Build/iOS/FBSDKCoreKit.framework $(SRCROOT)/Carthage/Build/iOS/FBSDKLoginKit.framework $(SRCROOT)/Carthage/Build/iOS/Bolts.framework
-
-
Info.plistを右クリックしてOpen As > Source Codeをクリックして以下を記述します。
<key>CFBundleURLTypes</key> <array> <dict> <key>CFBundleURLSchemes</key> <array> <string>fb{your-app-id}</string> </array> </dict> </array> <key>FacebookAppID</key> <string>{your-app-id}</string> <key>FacebookDisplayName</key> <string>{your-app-name}</string> <key>LSApplicationQueriesSchemes</key> <array> <string>fbapi</string> <string>fb-messenger-api</string> <string>fbauth2</string> <string>fbshareextension</string> </array> <key>NSPhotoLibraryUsageDescription</key> <string>{human-readable reason for photo access}</string>
- {your-app-id} : Facebookで作成したApp ID
- {your-app-name} : Facebookで設定したアプリ名
- {human-readable reason for photo access} : 任意の文章
Loginボタン
適当なログイン用View Controllerの中でSDKのボタンを生成します。
import FacebookLogin
func viewDidLoad() {
let loginButton = LoginButton(readPermissions: [ .PublicProfile ])
loginButton.center = view.center
view.addSubview(loginButton)
}
App Delegate
起動時
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
return FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions)
}
リダイレクト
func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: AnyObject) -> Bool {
let result = FBSDKApplicationDelegate.sharedInstance().application(application, open: url as URL!, sourceApplication: sourceApplication, annotation: annotation)
//上記以降AccessTokenが使えます
if let accessToken = AccessToken.current {
debugPrint(accessToken)
}
return result
}
Access Tokenの取得
FBSDKApplicationDelegate.sharedInstance().application(application, open: url as URL!, sourceApplication: sourceApplication, annotation: annotation)
実行以降、AccessToken.current
で現在のログインユーザのAccess Tokenを参照することができます。
Logの送信(任意)
- ログをFacebookに送信します。
- ログのメトリクスはFacebookアプリのアナリティクスページで閲覧できます。
func applicationDidBecomeActive(_ application: UIApplication) {
FBSDKAppEvents.activateApp() //ActiveであることをFacebookに通知
FBSDKAppEvents.logEvent("launch application") //Facebookに任意のログを送信
}
以上