SwiftでFacebookログイン
SwiftでFacebookログインを実装する方法をまとめました。
環境: MacOSX Yosemite 10.10.5, iOS SDK 9.0, Facebook SDK v4.7.0
参考サイト: http://blog.hello-world.jp.net/ios/3745/
1. Facebook SDKをDLする
FacebookSDKをダウンロードして、~/Documents/FacebookSDK に移動する。
2. Facebook App を作る
Facebook開発者 - 開発者向けFacebookにアクセスして、MyApps > Add a New App を選択して、Facebook Appを作る。
3. Facebook App の設定を変更する
- Facebook Appのダッシュボードにて左欄から「Settings」を選択する
- Settings画面の「Add Platform」をクリックし、iOSを選択する
- Bundle IDフィールドに、XcodeプロジェクトのBundle Identifierを入力する
- Single Sign On を YESに変更する
- Save Changes を押す
ここまでは、はまる箇所もなくスムーズに進められるはずです。
4. XcodeプロジェクトにFacebookSDKを追加する
XcodeのProject Navigator(command + 1)に、~/Documents/FacebookSDK内の 「FBSDKCoreKit.framework」「FBSDKLoginKit.framework」「FBSDKShareKit.framework」を追加する。 そして、Build Settings > Search Path に 「~/Documents/FacebookSDK」を設定する。(下図)
5. Info.plistに追記する
Project Navigator(command + 1)の、Info.plistを右クリックしてOpen As > Source Codeを選択する。
そして、下のコードを追記する。
* {FACEBOOK_APP_ID},{Your App Name}には、上で作成したFacebook AppのIDと名前を入力する。
<key>CFBundleURLTypes</key> <array> <dict> <key>CFBundleURLSchemes</key> <array> <string>fb{FACEBOOK_APP_ID}</string> </array> </dict> </array> <key>FacebookAppID</key> <string>{FACEBOOK_APP_ID}</string> <key>FacebookDisplayName</key> <string>{Your App Name}</string>
<key>NSAppTransportSecurity</key> <dict> <key>NSExceptionDomains</key> <dict> <key>facebook.com</key> <dict> <key>NSIncludesSubdomains</key> <true/> <key>NSExceptionRequiresForwardSecrecy</key> <false/> </dict> <key>fbcdn.net</key> <dict> <key>NSIncludesSubdomains</key> <true/> <key>NSExceptionRequiresForwardSecrecy</key> <false/> </dict> <key>akamaihd.net</key> <dict> <key>NSIncludesSubdomains</key> <true/> <key>NSExceptionRequiresForwardSecrecy</key> <false/> </dict> </dict> </dict>
<key>LSApplicationQueriesSchemes</key> <array> <string>fbapi</string> <string>fb-messenger-api</string> <string>fbauth2</string> <string>fbshareextension</string> </array>
6.AppDelegate
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { return FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions) } func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject) -> Bool { return FBSDKApplicationDelegate.sharedInstance().application( application, openURL: url, sourceApplication: sourceApplication, annotation: annotation) } func applicationDidBecomeActive(application: UIApplication) { FBSDKAppEvents.activateApp() }
7.ViewController
import UIKit import FBSDKLoginKit class ViewController: UIViewController, FBSDKLoginButtonDelegate { override func viewDidLoad() { super.viewDidLoad() let btn = FBSDKLoginButton() btn.center = self.view.center btn.delegate = self btn.readPermissions = ["public_profile", "email", "user_friends"] self.view.addSubview(btn) } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } func loginButton(loginButton: FBSDKLoginButton!, didCompleteWithResult result: FBSDKLoginManagerLoginResult!, error: NSError!) { // ここいらはお好きなように if ((error) != nil) { // Process error } else if result.isCancelled { // Handle cancellations } else { // If you ask for multiple permissions at once, you // should check if specific permissions missing if result.grantedPermissions.contains("email") { // Do work } } } func loginButtonDidLogOut(loginButton: FBSDKLoginButton!) { } }
気になるエラーが・・・
ログインボタンを押すと、以下のような警告がコンソールに吐き出された。 検索しても解消する方法は見つからなかったため現状放置している。
-canOpenURL: failed for URL: "fbauth2:/" - error: "(null)"