LoginSignup
10
9

More than 5 years have passed since last update.

FacebookSDKの切り替え覚書

Last updated at Posted at 2015-11-30

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>
10
9
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
10
9