LoginSignup
19
14

More than 5 years have passed since last update.

Swift3でFacebook SDKを使う

Last updated at Posted at 2016-12-18

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

以上

19
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
19
14