Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
9
Help us understand the problem. What is going on with this article?

More than 5 years have passed since last update.

@Takumi_Mori

FacebookSDKの切り替え覚書

Facebook APIの更新を放置しすぎていて、
ついにFacebookの情報取得ができなくなっていたので修正した時の覚書。

参考

◆ FacebookSDK v4.x/Graph API2.xへの移行
http://qiita.com/kaway/items/0bd3006c7eb2440665d4

◆ Facebook Graph API v2.0のApp Scoped User Idについて調査したことメモ
http://qiita.com/takaaki-mizuno/items/0eec10478188ff365297

SDKの変更

Facebook-iOS-SDK → FBSDKCoreKit / FBSDKLoginKit / FBSDKShareKit

ログイン処理

  • ログイン結果のAccessTokenは、[FBSDKAccessToken currentAccessToken]に入る
  • permissionを追加したい場合は、再度logInWithReadPermissionsを呼ぶ
  • PublishなPermissionを追加したい場合は、logInWithPublishPermissions

適当なサンプル記述

FBSDKLoginManager *login = [FBSDKLoginManager new];
[login logInWithReadPermissions:@[@"email",@"public_profile",@"user_friends"] fromViewController:viewController handler:^(FBSDKLoginManagerLoginResult *result, NSError *error) {
    dispatch_async(dispatch_get_main_queue(), ^{
        if (!error && !result.isCancelled) {
            // 成功
        } else {
            // 失敗              
        }
    });
}];

App Scoped User Id

Facebook Graph API v2.0から、取得できるIDが本物のIDではなくApp Scoped User Idと呼ばれるものになったが従来通りのIDと同じ使い方が可能。
https://www.facebook.com/[app_scoped_user_id]でプロフィールにアクセス可能

リクエスト

  • FBSDKGraphRequestを使うだけで、その他はほぼ同じ。
  • 明確にfieldsパラメータを設定してあげないと警告が出るようになった。
  • usernameを取得することは不可能。
  • 友人リストは、基本的に同じアプリを利用している友人だけが取れる。
NSDictionary *param = @{@"locale":[[NSLocale currentLocale] objectForKey:NSLocaleIdentifier],
                @"fields":@"id,birthday,email,name"
                        };

FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc] initWithGraphPath:@"me" parameters:param];
[request startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) {
    dispatch_async(dispatch_get_main_queue(), ^{
        if (!error) {
            // 成功
        } else {
            // 失敗
        }
    });
}];

permissionの確認

  • [FBSDKAccessToken currentAccessToken].permissionsを参照すればある程度はわかるが、ログイン後に権限を一部削除されてもわからない
  • 例えばuser_friendsを後から削除された状態でme/friendsを実行しても空の配列が取れるだけでわからない

iOS9対応

AppTransportSecurity及びURLスキーム周りでの変更により
plistへ以下の記述を追加する必要がある。
追加していないと、普通にアプリが強制終了します。

xxx.plist
<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>facebook.com</key>
        <dict>
            <key>NSIncludesSubdomains</key>
            <true/>                
            <key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
            <false/>
        </dict>
        <key>fbcdn.net</key>
        <dict>
            <key>NSIncludesSubdomains</key>
            <true/>
            <key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
            <false/>
        </dict>
        <key>akamaihd.net</key>
        <dict>
            <key>NSIncludesSubdomains</key>
            <true/>
            <key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
            <false/>
        </dict>
    </dict>
</dict>

v4.5以前のFacebookSDKを使っていた場合は、以下も追加

xxx.plist
<key>LSApplicationQueriesSchemes</key>
<array>
    <string>fbapi</string>
    <string>fbapi20130214</string>
    <string>fbapi20130410</string>
    <string>fbapi20130702</string>
    <string>fbapi20131010</string>
    <string>fbapi20131219</string>    
    <string>fbapi20140410</string>
    <string>fbapi20140116</string>
    <string>fbapi20150313</string>
    <string>fbapi20150629</string>
    <string>fbauth</string>
    <string>fbauth2</string>
    <string>fb-messenger-api20140430</string>
</array>

FBSDKMessengerShareKitを使ってた場合は以下も追加

xxx.plist
<string>fb-messenger-platform-20150128</string>
<string>fb-messenger-platform-20150218</string>
<string>fb-messenger-platform-20150305</string>

v4.6 から利用する場合には、以下だけでよい

xxx.plist
<key>LSApplicationQueriesSchemes</key>
<array>
        <string>fbapi</string>
        <string>fb-messenger-api</string>
        <string>fbauth2</string>
        <string>fbshareextension</string>
</array>
9
Help us understand the problem. What is going on with this article?
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
9
Help us understand the problem. What is going on with this article?