この投稿から、アプリをまだ承認していない誰かがキャンバスページにアクセスしたときにFacebook承認ページにリダイレクトする方法を理解するための助けを得ました。
さて、ユーザーが権限を承認した後、FBがキャンバスページ(https://app.facebook.com/myapp)にリダイレクトすることを期待していました。ただし、キャンバスのURL(https://myhostingapp.com/game.php?.。。)にリダイレクトされます。
これは予想されることですか、それともそれを制御するために私たちにできることがありますか。承認後にキャンバスページにリダイレクトするようにAPIに指示するにはどうすればよいですか?
今のところ、$ _ SERVER [HTTP_REFERER]を使用して、承認ページから来ているかどうかを確認し、そうであれば、ページを再びキャンバスページにリダイレクトすることを考えることができます。しかし、私はそれを行うためのはるかに良い方法があるかもしれないことを望んでいます
キャンバスのURLコード:
if (Config::$fbAvailalbe){ //see below how this variable is derived
echo "fb is available";
$facebook = new Facebook(array(
'appId' => Config::$appId,
'secret' => Config::$appSecret,
));
$user = $facebook->getUser();
if ($user) {
echo "app installed";
try {
// Proceed knowing you have a logged in user who's authenticated.
$profile = $facebook->api('/me');
} catch (FacebookApiException $e) {
error_log($e);
$user = null;
}
}
if (!$user) {
echo " app not installed gonna redirect";
$scope = "scope=email,read_stream,read_friendlists,publish_stream";
$redirect = $facebook->getLoginUrl(
array(
'canvas' => 1,
'fbconnect' => 0,
'req_perms' => $scope
)
);
echo '<script>top.location="' . $redirect . '";</script>';
exit();
//header("Location: $redirect".$scope);
}
if ($profile){
$firstName = $profile['first_name'];
$sid = $profile['id'];
var_dump($profile);
}else{
echo "unable to get profile";
}
}else{
echo "fb unavailable, using dmmy";
$firstName = "Dummy Name";
$sid = Config::$testsid;
}
Config.phpからのSnipet
//this is to derive the $fbAvailable variable
//we get this condition satisfied when we run the page runs from fb canvas
if (isset($_SERVER['HTTP_REFERER'])){
if (substr_count($_SERVER['HTTP_REFERER'],'apps.facebook.com')){
self::$fbAvailalbe = 1;
}
}