読者です 読者をやめる 読者になる 読者になる

facebook php sdk3.0になってから、かわったこととその対策

PHP facebook

facebookから配布されているfacebook php sdk のバージョンが3.0に最近なりました。そのときに色々と仕様変更があったようで、ネットの文献を参考にしてもうまく動かず苦労しました。私が今回、触った範囲で仕様変更を確認できたところを挙げていきたいと思います。主に3つくらいありました。
1つ目は$facebook->getLoginUrl()でパーミッションを指定するときに「req_perms」ではなく「scope」を指定しなければいけなくなった点。

$url = $this->facebook->getLoginUrl(
       array('redirect_url' => 'コールバックURL',
          'req_perms' => 'email,publish_stream,friends_location',
          )
      );

ではなくて

$url = $this->facebook->getLoginUrl(
       array('redirect_url' => 'コールバックURL',
          'scope' => 'email,publish_stream,friends_location',
          )
      );

という風に指定しなければいけないみたいです。

これは以下のサイトを参考にさせていただきました。ありがとうございます。
$facebook->getLoginUrl()使うとき「req_perms」ではなく「scope」 - キュニナル!!

2つ目は$facebook->getSession()が使えなくなっていることです。

そのかわりに$facebook->getUser()を使えばいいようです。

Facebook SDK "permissionの際には「req_perms」ではなく「scope」で" | スーパーソフトウエア | システム開発/コンサルティング

3つ目は$facebook->getLoginUrl()でコールバックURLを指定するnextが使えなくなっていたことです。

なので、facebook-php-sdk/src/base_facebook.phpでコールバックURLを指定することにしました。
461行目にgetLoginUrlがあると思います。

public function getLoginUrl($params=array()) {
    $this->establishCSRFTokenState();
    $currentUrl = $this->getCurrentUrl();
    return $this->getUrl(
      'www',
      'dialog/oauth',
      array_merge(array(
                    'client_id' => $this->getAppId(),
                    'redirect_uri' => 'ここでコールバックURLを指定しました。', //$currentUrl, // possibly overwritten
                    'state' => $this->state),
                  $params));//r
  }