Swift3でFacebookログインをする
FacebookのSDKがSwift3になってからいろいろ変わっていたのでまとめました。
実施環境
この記事は以下の環境で確認しています。
- Xcode8.2
- Swift3
- Cocoapod 1.1.1
- Facebook Swift SDK 0.2.0
目次
- Facebookデベロッパーでアプリを作成する
- CocoapodでFacebookのSDKをインストールする
- info.plistの設定
- AppDelegateの設定
- ログインボタンを作成しログインする
- ログイン中のユーザー情報を取得する
Facebookデベロッパーでアプリを作成する
Facebookと連携したアプリを作るにはまずFacebookアプリを作る必要があります。(Facebookアカウントが必要です)。
開発者ページ
https://developers.facebook.com/apps/
に行き、「新しいアプリを追加」をクリックします。
表示名と連絡先メールアドレス、カテゴリを選択して「アプリIDを作成してください」をクリックします
FacebookアプリのiOS設定をします。公式に詳しい説明がありますのでそちらを参照してください。
ただし、SDKの設定方法は言語がObjective-Cなので、この記事では**「ステップ1: iOS用にFacebookアプリ設定を構成する」**までを確認すれば大丈夫です。
https://developers.facebook.com/docs/ios/getting-started
CocoapodでFacebookのSDKをインストールする
CocoapodでSwift用のSDKをインストールしてみましょう。
githubのURLは以下になります。
https://github.com/facebook/facebook-sdk-swift
Xcodeのプロジェクトを作成します。
podの初期化コマンドでPodfileを作成します。
pod init
作成されたPodfileに以下を追加します。
pod 'FacebookCore'
pod 'FacebookLogin'
インストールします
pod install
作成された*.xcworkspaceを開きましょう。
info.plistの設定
公式サイトの説明にそってinfo.plistを設定します。
https://developers.facebook.com/docs/ios/getting-started#xcode
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アプリのID
- {your-app-name}は自分のFacebookアプリの表示名
- {human-readable reason for photo access}にはアプリが写真にアクセスする理由を書きます。
AppDelegateの設定
FacebookのSwift3用のSDKをインポートします。
import FacebookCore
import FacebookLogin
下記のデリゲートメソッドに以下を実装します。
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
//Facebook初期化
SDKApplicationDelegate.shared.application(application, didFinishLaunchingWithOptions: launchOptions)
return true
}
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
return SDKApplicationDelegate.shared.application(app, open: url, options: options)
}
ログイン状態の確認
ログインしているかどうかはAccessToken.current
にインスタンスが存在するかを判断することでチェックができます。ログインしていればcurrentインスタンスが存在します。
ログイン判定のメソッドisLoggedInWithFacebook()
は以下のように書くことができます。
// MARK: - Facebook Login
func isLoggedInWithFacebook() -> Bool {
let loggedIn = AccessToken.current != nil
return loggedIn
}
ログインボタンを作成しログインする
LoginManager
のlogIn(_, viewController, completion)
メソッドによってログインができます。
@IBAction func login(_ sender: UIButton) {
LoginManager().logIn([.email], viewController: self, completion: {
result in
switch result {
case let .success( permission, declinePemisson, token):
print("token:\(token),\(permission),\(declinePemisson)")
case let .failed(error):
print("error:\(error)")
case .cancelled:
print("cancelled")
}
})
}
completionのクロージャーの戻り値result
はLoginResult
のenumです。これを通して、トークンを取得できます。
ログアウトする
ログアウトはLoginManager
クラスのlogOut()
メソッド実行すればよいです。
FacebookログアウトをするfbLogout()
メソッドは以下のように定義できます。
func fbLogout() {
LoginManager().logOut()
}
ログインしたユーザーの情報を取得する
ログイン済みのユーザーから情報を取得するには、GraphRequest
のを使用します。
func getUserInfo (){
//Facebookのユーザー情報を取得する処理
GraphRequest(graphPath: "me", parameters: ["fields": "name, email"], accessToken: AccessToken.current, httpMethod: .GET, apiVersion: GraphAPIVersion.defaultVersion).start({
response, result in
switch result {
case .success(let response) :
print("response:\(response)")
break
case .failed(let error):
print("error:\(error.localizedDescription)")
}
})
}
結果はこんな感じで返ります。
response:GraphResponse(rawResponse: Optional({
email = "myMail@gmail.com";
id = 1234567890;
name = "MyName";
}))
最後に
Swift3でもFacebookログインができるアプリを作っていきましょう!
参考文献
記事
Facebook Sign in with Swift 3
Facebook SDK sign in with Swift 3 iOS 10
Swift3でFacebook SDKを使う