今回は、自分の回にまにあったはずな marionnettezero です。

リリースラッシュで忙しいのですが、Twitter、Facebook、Mixi 等の API を頻繁に
使っております為、そのあたりのネタを記載していこうと思います。


iFrame で Facebook アプリとしてサイト公開する場合に、そのアプリ内で
そのサイトドメイン以外に Location しようとすると、Facebook の iFrame外からの
影響で、必ず Facebook のアイコン画像が表示され、それをクリックしないと Location
できないようになっています。

以下のようなソースだと必ずアイコン画像が出てしまいます。
この状態でもよしとされる場合もありますが、できる事ならスムーズに遷移したいですよね。


// facebook インスタンス生成
$facebook = new Facebook(
  array(
    'appId' => SYSTEM_APP_ID,
    'secret' => SYSTEM_APP_SECRET,
    'cookie' => true
  )
);
// 認証されているか uid を取得する
$uid = $facebook->getUser();
// 認証されていない場合
if (!$uid) {
  // 認証用URLの取得
  $authorize_url = $facebook->getLoginUrl(
    array(
      'canvas' => 1,
      'fbconnect' => 0,
      'redirect_uri' => SYSTEM_NEXT_LOCATION,
      'display' => SYSTEM_APP_PAGE,
      'scope' => 'offline_access,user_status,read_stream,status_update,publish_stream'
    )
  );
  // 認証用URLが取得できた場合は、ロケーションする
  if ($authorize_url) {
    header('Location:' . $authorize_url);
  }
// 認証されている場合
} else {
  // アクセストークンを取得
  $request['oauth_access_token'] = $facebook->getAccessToken();
  // 自分の情報を取得
  $me = $facebook->api('/me', 'GET', array('access_token' => $request['oauth_access_token']));
}

でも、解決策は意外と簡単です。
iFrame 外の JS から操作されるのであれば、こちらも JS で対抗すればいいのです。

こんな感じですね。


  // 認証用URLが取得できた場合は、ロケーションする
  if ($authorize_url) {
    echo "<script type='text/javascript'>top.location.href = '$authorize_url';</script>;
  }

知らないと時間がかかるけど、知っていると以外と簡単な事。
不定期ですが、そんな TIPS をお送りしていきます。

 
Recent Comment
Categories
Writer
  • hidetarou
  • acha_maro
  • gazza069
  • sin_ya
  • yossy222
  • marionnettezero
  • TUYO
  • shiovo
  • yani_arcana
  • momiji0510
  • keiko_www
  • toma_max
  • kyonmaru
  • __senta
  • kenzo
  • t_suzuki
  • hikari_f
  • macchii
  • mashu