2011-09-30 12 views
9

私は既存のFBアプリをアップグレードしていますし、単純なPHP iframeキャンバスアプリを許可して認証する(SSLを使用する) 。たくさんの例を見ないでください...承認と認証後にFacebookキャンバスアプリ「redirect_uri」がiframeから外れる

ここで私は固執しています:ユーザがアプリケーションを許可し、アプリケーションがユーザを認証した後(私はトークンでグラフ要求をすることができます)、redirect_uri Facebook全体をリフレッシュしてFacebookを残し、Facebookのiframeではなく、自分の "Canvas URL"ページ(私のサーバーのドメインを持つ)の内容を表示します。 (

<?php 
require('src/facebook.php'); 

$app_id = '123456789'; 
$app_secret = '1234secrets1234'; 
$canvas_page = "https://apps.facebook.com/123456789/"; 
$canvas_url = "https://myserver.com/apptest/"; 

$code = $_REQUEST['code']; 

if(!$code){ 
$display= 'page'; 
$scope= 'manage_pages, offline_access, read_insights, publish_stream, user_about_me, user_likes, email'; 
$redirect_url = 'https://myserver.com/apptest/step2.php'; 
$oauth_url = 'https://www.facebook.com/dialog/oauth?canvas=1&client_id='.$app_id.'&display='.$display.'&redirect_uri='.urlencode($redirect_url).'&scope='.$scope; 
$config = array('appId' => $app_id,'secret' => $app_secret,'cookie' => true,'domain' => true); 
$facebook_client = new Facebook($config); 

echo "<script type=\"text/javascript\">top.location.href = \"".$oauth_url."\";</script>"; 
} 
?> 

と2ページSTEP2を:私は現在、粗2つの段階のプロセスとしてこれを持って

...

は、ここに私のコードは最初のページ(index.phpを)上のようになります.php):

<?php 
require('src/facebook.php'); 

$app_id = '123456789'; 
$app_secret = '1234secrets1234'; 
$canvas_page = "https://apps.facebook.com/123456789/"; 
$canvas_url = "https://myserver.com/apptest/"; 


if($_REQUEST['code']){ 
$code=$_REQUEST['code']; 
$redirect_url = 'https://myserver.com/apptest/step2.php'; 
$link="https://graph.facebook.com/oauth/access_token?canvas=1&client_id=".$app_id."&redirect_uri=".urlencode($redirect_url)."&client_secret=".$app_secret."&code=".$code; 
$string = file_get_contents($link); 
$auth_token=substr($string, 13, 150); 

$graph_url = "https://graph.facebook.com/me?access_token=".$auth_token; 
$user = json_decode(file_get_contents($graph_url)); 
echo("Hello " . $user->name); 
} 

また、ユーザーがアプリを承認してアプリがユーザーを認証すると、グラフ呼び出しが機能します。

アイデア?

+0

[私のFacebookブックアプリケーションでsigned_requestの未定義インデックスを取得するのはなぜですか?](http://facebook.stackoverflow.com/questions/7534241/why-do-i-get-an-undefined-index -for-signed-request-in-my-facebook-app) – ifaour

答えて

1

これはうまくいきました。アプリ>設定>基本では名前空間を設定していなかったので、Facebookのアプリで私に与えたURLはhttps://apps.facebook.com/123456789/だったので、名前空間でhttps://apps.facebook.com/myappnameに変更しました。そうだったかもしれません。私はこのページのシンプルなPHP自動化デモに注意深く従ってみました:https://developers.facebook.com/docs/appsonfacebook/tutorial/と今は正常に動作するようです。

ありがとうございました!

+0

私は同じことに気づいた。名前空間でURLを使用すると、そのURLは機能します。アプリIDでURLを使用すると失敗します。 WTH? – hekevintran

6

OAuthダイアログにナビゲートすると、Webページ(アプリケーションのフレームではない)がOAuth URLに移動します。認証後にFacebook iframeに戻るには、OAuthリダイレクトURLをcanvas_page URLに設定する必要があります。上記のコードはリダイレクト時にmyserverのURLにナビゲートしているため、アプリケーションはページ全体を占有します(FacebookのiframeをOAuthダイアログに移動したために残っているため)。 canvas_urlのコードは、認証(成功または失敗)から入力されたものか、認証後に有効なアクセストークンを入力したものかを判断する必要があります。

また、canvas_pageのURLは、FacebookブックのホストとアプリケーションIDで構成されているようです。それはFacebookのアプリのホストとアプリケーション名でなければなりません(リダイレクトURLは、アプリの開発者ページの「キャンバスページ」のURLと同じにする必要があります)。

+0

私はそれを試みたが、Facebookのドメインが許可されていないというAPIエラーが出た。 – jonkeegan

+0

canvas_pageのURLが正しくないと思います。上記を参照してください。 –

+0

canvas_urlの最後に、 "http://apps.facebook.com/my_canvas_name"の代わりに "/"を付ける必要があります。 "http://apps.facebook.com/my_canvas_name/"を使用してください。 – mjs

関連する問題