14
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

posted at

updated at

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

以上

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
14
Help us understand the problem. What are the problem?