3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

FacebookSDK v4.x/Graph API2.xへの移行

Last updated at Posted at 2015-09-01

はじめに

自分用メモです。調査が進み次第追記します。
FacebookのGraph APIは去年から2.xできたから移行してね〜とアナウンスしておりましたが、まだその時点では1.xのAPIも使用することができました。
しかしついにその期限も切れ、昔のAPIをそのまま使うことはもはやできません。

SDK v3.xから移行した部分は[旧クラス] -> [新クラス] で記述してます。
SDKのver3.xから4.xへの移行については以下の公式ページに記載されています。
https://developers.facebook.com/docs/ios/upgrading-4.x
Graph APIの1.0から2.0への移行は以下の公式ページに記載されています。
https://developers.facebook.com/docs/apps/upgrading?locale=ja_JP

ログイン

SDKで提供されるログインボタンを使わず、アプリ内で自前のコードでログインする場合、FBSDKLoginManagerで処理を行います。

ログイン
- (void)logInWithReadPermissions:(NSArray *)permissions handler:(FBSDKLoginManagerRequestTokenHandler)handler;
- (void)logInWithPublishPermissions:(NSArray *)permissions handler:(FBSDKLoginManagerRequestTokenHandler)handler

また操作の途中で権限を追加したい場合は上記メソッドをその時呼び直せばOKです。
ログインに成功するとFBSDKAccessTokenが取得されてアクセスできるようになります。

アクセストークン

FBSession -> FBSDKAccessToken
ユーザの権限やIDはFBSDKAccessTokenが保持しています。ログインの項でも書きましたが、ログインが成功した段階でこのトークンが保存され、各情報を取得できるようになります。

FBSessionではactiveSessionというセッションが有効か調べるプロパティがありましたがFBSDKAccessTokenにはその類のものがありません。FBSDKAccessTokenとLoginManagerで制御するようにと書かれています。

リクエスト

FBRequest -> FBSDKGraphRequest
Graph APIへのリクエストはFBSDKGraphRequestを使います。

リクエスト
- (FBSDKGraphRequestConnection *)startWithCompletionHandler:(FBSDKGraphRequestHandler)handler;

ここはあまり変更なく、従来の記述からクラス・メソッド名を最新のものに修正すればいいくらいかと思います。

セッション確認

[FBSession openActiveSessionWithReadPermissions:::]
[FBSession openActiveSessionWithPublishPermissions:permissions:::]
-> ログインメソッドで代用

従来のメソッドはセッションがopenかcloseか取得できましたが、FBSession削除に伴い、この概念が現在はありません。
代わりに行うとすれば、先述のFBSDKLoginManagerのログインメソッドを用いればよさそうです。
ログイン処理し直せばTokenも更新されるので必要ないということかも。

ダイアログ

FBWebDialogs
FBSDKGameRequestDialog,FBSDKAppGroupAddDialog,FBSDKAppGroupJoinDialogという3つのダイアログが追加されており、これらで置き換えるそうです。
(要調査)

Tips

取得できるユーザIDがアプリ固有で割り振られるものになっている

Facebookアプリとユーザを紐付け、そこからユーザIDを取得すると、本来のユーザIDを取得できません。
App Scoped User Idという概念が追加されたそうで、Facebookアプリと紐付ける毎に固有のIDが割り振られ、アプリ内から取得できるIDはこの固有のIDになってしまいます。

usernameは取得できなくなった

/meですらusernameを取得することができません。そもそも削除なのでリクエストに含めるとエラーが返ってきてしまいます。
一意なIDの取得はかなり制限されているようです。

友人リストがAPI2.0からデフォルトでは取れない

これまでは特に権限が必要ありませんでしたが、user_friendsを権限に追加する必要があります。
また、同じアプリと連携している友人しか取れないようになっているそうです。なのでこのアプリを始めよう!みたいな招待ができないということですね…。

v1.0では、利用者の友達の「いいね!」や誕生日など、限られた量の友達データをアプリから閲覧ことができる権限を要求できました。
v2.0では、これらの権限はすべて削除されました。 今後は、利用者の友達が同じアプリにログインし、データを閲覧する権限を許可している場合を除いて、アプリから利用者の友達のデータを閲覧することはできなくなりました。

とあるように、友達関連の取得もかなり厳しくなっているようです。

Graph API 2.0 及び FQLは2016年に使えなくなるらしい

複雑な情報を取得したい場合に有用と思われるFQLですが、最速で2016年4月に使えなくなるそうです。
これはGraph API2.0を使えなくするタイミングで行われる模様です。
https://developers.facebook.com/docs/apps/changelog?locale=ja_JP

エラー

エラーコードとエラーサブコードがあり分類されています。
NSError形式で返ってくるので、[error userInfo]内のDictionalyから定数Keyを使って取得します。
公式情報は以下。ここに記載されてないコードでも来たりするので要調査。
https://developers.facebook.com/docs/graph-api/using-graph-api/v2.4

*** メモ ***
12 : 正しくないパラメータを含む
100: 正しくないfieldを含む
190 : OAuthエラー

その他

調査中です。。。

3
3
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
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?