Facebook
iOS
Swift
Carthage
Swift3.0

Swift3でFacebook SDKを使う

More than 1 year has passed since last update.

Facebook SDKを使ったSwift3製のiOSアプリで、FacebookにログインしてAccess Token取得するまでの流れをまとめます。


前提


  • Swift 3.x

  • 公式Facebook SDKを利用する

  • Carthageを利用する


Facebook側の設定



  1. Facebook for developerにログインしてAppsページを開きます。

  2. 新規Appを作成します。

  3. アプリID(App ID)をメモします。

  4. 「プラットフォームを追加」で、iOSアプリを追加します。

  5. バンドルIDの欄に、Xcodeから取得したBundle Identifierを入力します。


    • 全部小文字でないとダメなようです。



  6. Single Sign OnをONにします。


Facebook SDKインストール

Carthageを使用した例です。



  1. XcodeのプロジェクトディレクトリにCartfileを作成して以下を記述します。

    github "facebook/facebook-sdk-swift"
    



  2. SDKをダウンロードします。

    carthage update
    


  3. Xcodeを開きます。



  4. Target > General > Linked Framework and Librariesに以下をdrag & dropします。


    • FacebookCore.framework

    • FacebookLogin.framework

    • FBSDKCoreKit.framework

    • FBSDLoginKit.framework

    • Bolts.framework




  5. Target > Build Phaseを開きます


    1. 左上の+をクリックして"New Run Script Phase"を選択


    2. Run ScriptのShellのエディタに下記を追加

      /usr/local/bin/carthage copy-frameworks
      



    3. 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





  6. 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に任意のログを送信
}

以上