iOSでソーシャルログイン


# 概要
よくアプリで見かけるソーシャルログインを実装する際のメモになります。
以下2つのSNSについて簡潔に。

* facebook
* twitter

# facebookログイン
facebookログインを行う際には下記2パターンの認証方法が存在します。

1. WebViewを用いたブラウザ上でのログイン
2. facebook SDKを用いたログイン

1はfacebook側の仕様変更に左右されやすいのでSDKを使用したログインをお勧めします。

## 実装方法
ざっくりと流れをまとめると以下のようになります。

1. facebook developerにてアプリケーションを作成
2. CocoaPodsを用いてfacebook sdkをインストール
3. plistの編集
4. FBLoginViewを作成
5. Permissionの指定
6. ログイン後のdelegateメソッドにて処理を行う

FBLoginViewを設置するだけでボタンが勝手に表れます。そのボタンをタップする事でfacebookログインが行われます。
詳しくは[こちら](http://xoyip.hatenablog.com/entry/2014/05/26/200000)を見て頂ければ十分です。むしろこのURL通りやって大丈夫です。

上記サイト以外にかいてあることをした良い場合は[公式ドキュメント](https://developers.facebook.com/docs/facebook-login/ios/v2.2)を参考にしてください。

## 利用シーン
ログインが成功すると以下のデリゲートメソッドが呼ばれます。

```
- (void)loginViewFetchedUserInfo:(FBLoginView *)loginView user:(id<FBGraphUser>)user
```

ここでuserを出力してみると以下のようなデータが入っています。

```
{
    email = "xxxxxxxxxxxxxxxx";
    "first_name" = "Yu-ta";
    gender = male;
    id = 879830848696400;
    "last_name" = Teshigawara;
    link = "https://www.facebook.com/app_scoped_user_id/879830848696400/";
    locale = "ja_JP";
    name = "Yu-ta Teshigawara";
    timezone = 9;
    "updated_time" = "2014-11-01T06:42:54+0000";
    verified = 1;
}
```

# twitterログイン
twitter apiを使用する際には、[公式サイトにて紹介されているライブラリ](https://dev.twitter.com/overview/api/twitter-libraries)を使用します。
Objective-Cの欄を見てみると以下の2つがあげられています。

* [nst/STTwitter](https://github.com/nst/STTwitter)
* [fhsjaagshs/FHSTwitterEngine](https://github.com/fhsjaagshs/FHSTwitterEngine)

今回は[nst/STTwitter](https://github.com/nst/STTwitter)を使用した例を紹介します。

## [nst/STTwitter](https://github.com/nst/STTwitter)を使用したtwitterログイン
twitterアプリでログインをするまでの手順は以下となります。
1. twitter developerにてアプリを作成
2. CocoaPodsを用いてSTTwitterをインストール
3. ログインコードの記述

### ログインコード
ボタンを設置し、以下のコードを記述することでログインする事ができます。

```objc:twitterLoginSample
STTwitterAPI *twitter = [STTwitterAPI twitterAPIWithOAuthConsumerName:nil
                                                              consumerKey:@"xxxxxxxxxxxxxxxxxx"
                                                           consumerSecret:@"xxxxxxxxxxxxxxxxxxxx"];
    [twitter postReverseOAuthTokenRequest:^(NSString *authenticationHeader) {
        STTwitterAPI *twitterAPIOS = [STTwitterAPI twitterAPIOSWithFirstAccount];
        [twitterAPIOS verifyCredentialsWithSuccessBlock:^(NSString *username) {
            [twitterAPIOS postReverseAuthAccessTokenWithAuthenticationHeader:authenticationHeader
                                                                successBlock:^(NSString *oAuthToken,
                                                                               NSString *oAuthTokenSecret,
                                                                               NSString *userID,
                                                                               NSString *screenName) {
                                                                                    NSLog(@"userID %@", userID);
                                                                            } errorBlock:^(NSError *error) {
                                                                                [self twitterConnectionError];
                                                                            }];
            
        } errorBlock:^(NSError *error) {
            [self twitterConnectionError];
        }];
        
    } errorBlock:^(NSError *error) {
        [self twitterConnectionError];
    }];
}
```

postReverseAuthAccessTokenWithAuthenticationHeaderの部分でログインしているtwitterの情報が取得できるので、あとはよしなに使用してください。


# 参考URL
* [Facebook Login for iOS](https://developers.facebook.com/docs/facebook-login/ios/v2.2)
* [iOSでFacebook連携ログインするアプリを作る手順まとめ](http://xoyip.hatenablog.com/entry/2014/05/26/200000)
* [nst/STTwitter](https://github.com/nst/STTwitter)