post Image
Swift3でFacebook SDKを使う

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

以上


『 Swift 』Article List