Swift転職なら=>【LevTech】
↑クリックして拡大
↑クリックして拡大
↑クリックして拡大
↑クリックして拡大

頭痛が減ったので共有です!

rebuild.fmを応援しています!

HOME > Facebook SDKを試してみる(ログイン)

Facebook SDKを試してみる(ログイン)

前回の記事ではFacebookSDKをインストールして調査しています。よろしければどうぞ!今回の記事は、 iOSアプリからログインするところまでをトライしてみます。

参考:SwiftでFacebook SDKを使用したログイン機能(Xcode6 beta6)
参考:TUTORIAL: HOW TO USE LOGIN IN FACEBOOK SDK 4.1.X FOR SWIFT

やってみた

さて、前回記事でSDKをダウンロードした状態ですので、プロジェクトに追加してみましょう。 SDKがインストールされたDirectoryへ移動します。必要なSDKはFBSDKCoreKit.fraweworkなので、何個かその他frameworkはありますが、 それだけをプロジェクトにドラッグしてみましょう。

サンプル画像

こんな感じにプロジェクトに追加されます。これでプロジェクトへのSDK追加は完了です。

ただしこのSDKですがObjective-Cで作成されているので、ブリッジヘッダを追加してSwiftで読み出せるようにしなくてはいけません。 以前記事にしました、こちらの記事(Objective-Cとの共存)に詳細が記載していますので、ブリッジヘッダを作成します。 参考サイトも同じくご参照ください。

サンプル画像

New FileからHeaderファイルを選んで、Bridge-Header.hを作成、その後で、#import <FBSDKCoreKit/FBSDKCoreKit.h> を追加した状態です。 追記(2015/5/18:SDK v4.1の場合(おそらくそれ以降の場合)はブリッジヘッダが必要ないようでimportするだけでOKです。 詳しくは次の記事でご確認ください。こちらからどうぞ)

サンプル画像

まだ作業はのこっています!もう少し!Build SettingのSwift Compiler – Code Generationに 作成したヘッダファイル名を追加してみましょう。

サンプル画像

正しくパスが通っていれば、コード補完でリストアップされますので、ソースのどこかでFBとタイプしてみてください。出てこなければ、ファイル名やパス名が違う場合で 私もハマっていましたので、見直してみてください。

ここまでで、ひとまずSDKをプルジェクトに追加するところまでを完了です


サンプルをみていると、、、、やはりFBSDKCoreKit.frameworkだけではログイン処理は無理なので、追加でFBSDKLoginKit.frameworkも追加!(このサンプルには Bolts.frameworkも追加していますので、同じく追加します。

サンプル画像

こんな感じになりました

この時点でのソースです。

AppDelegate.swift


       import UIKit

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
    
    var window: UIWindow?
    
    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
        // Override point for customization after application launch.
        return FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions)
    }
    
    func application(application: UIApplication,
        openURL url: NSURL,
        sourceApplication: String?,
        annotation: AnyObject?) -> Bool {
            return FBSDKApplicationDelegate.sharedInstance().application(
                application,
                openURL: url,
                sourceApplication: sourceApplication,
                annotation: annotation)
    }
    
    func applicationWillResignActive(application: UIApplication) {
        // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
        // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.
    }
    
    func applicationDidEnterBackground(application: UIApplication) {
        // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
        // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
    }
    
    func applicationWillEnterForeground(application: UIApplication) {
        // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.
    }
    
    func applicationDidBecomeActive(application: UIApplication) {
        // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
        FBSDKAppEvents.activateApp()
    }
    
    func applicationWillTerminate(application: UIApplication) {
        // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
    }
    
}

ViewController.swift



import UIKit

class ViewController: UIViewController,FBSDKLoginButtonDelegate {
    
    override func viewDidLoad() {
        super.viewDidLoad()
        if (FBSDKAccessToken.currentAccessToken() != nil)
        {
            // ユーザが既にログインしている。次のページへ遷移させたりはここで実行しましょう。
        }
        else
        {
            let loginView : FBSDKLoginButton = FBSDKLoginButton()
            self.view.addSubview(loginView)
            loginView.center = self.view.center
            loginView.readPermissions = ["public_profile", "email", "user_friends"]
            loginView.delegate = self;
        }
        
    }
    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
    
    func loginButton(loginButton: FBSDKLoginButton!, didCompleteWithResult result: FBSDKLoginManagerLoginResult!, error: NSError!) {
        println("Userログイン")
        
        if ((error) != nil)
        {
            //エラー処理
        }
        else if result.isCancelled {
            //キャンセル処理
        }
        else {
            //もし複数の認証を一度に尋ねられたら、特定の認証が抜けていないかを確認しましょう
            if result.grantedPermissions.contains("email")
            {
                //処理
            }
        }
    }
    
    func loginButtonDidLogOut(loginButton: FBSDKLoginButton!) {
        println("Userログアウト")
    }
}

上記何度か記載していますがiOS Life様のページのソースを参考にしております

この状態でコンパイルすると以下の様にfacebookのログインボタンが表示された状態になります

サンプル画像

実行すると、、、、


testFacebookSDK[857:21753] *** Terminating app due to uncaught exception 'InvalidOperationException', 
reason: 'App ID not found. Add a string value with your app ID for the key FacebookAppID to the Info.plist or call 
[FBSDKSettings setAppID:].'

Facebook のApp IDが無いよとの記載。ここでFacebookでAppを作成してからじゃないとこのSDKでログインできないんだと確認


Facebook Appの作成済みの状態で話を進めます。(作成はこちらはご参照ください。基礎から分かる、Facebookアプリの作り方 (1/5)) 私はSwiftサラリーマンのアプリを既に持っていましたので、以下のような情報を保有していました。

サンプル画像

この情報をソースコードではなく、plistに追加します。これもなんだかややこしいですね、、、、ソースコードに埋め込んだ方がわかりやすいですが、 何か意図があるのかな。facebookAppId,facebookDisplayName,URL Typeを追加、め、、、面倒くさい。

サンプル画像

これで改めて、、、、コンパイル!facebookログインボタンをクリックすると、、、、

サンプル画像

できた、、、、設定結構面倒くさくてくじけそうでした。予想していたより時間かかってしまいました。

まとめ

設定ファイルまわりもっと簡単にしてください〜〜。

前の記事はこちらからです!

次の記事はこちらからです!

↓こんな記事もありますよ!

2Dバーコードをスキャンする

なんと2Dバーコード読み込み機能はAVFoundationに実装されています。GitHubにbowstさんが公開しているシンプルなソースがあったので共有です

SqliteのDBファイル保存+レビュー却下

2回既にレビューを通過していたアプリが、バイナリレビューで却下されてしまいました。理由は、2.23 Details On launch and content download, your app stores 26.48MB on the user's iCloud, which does not comply with the iOS Data Storage となっていてiCouldに保存される量にしては多いから管理してください、といった旨の内容でした。別に却下理由に難癖つけるつもりではないのですが、最初のレビュー時にいってほしい。。。

AppleWatchとiPhone連携をナターシャさんのデモを参考に調査

先日Swiftサラリーマンに関してTwitterでつぶやいてくださっていたまっちょさん に教えていただいたAppleWatchアプリ作成に関する海外のWatchKitのナターシャさんの記事(Architecting Your App for the Apple Watch)を教えていただきました、 動画やプレゼンもあり英語でしたがサンプルコードも付いていて分かりやすかったです!
このエントリーをはてなブックマークに追加
右側のFacebookのLikeをクリック頂けると記事更新の際に通知されますので宜しければご利用下さい!