Facebook应用程序不会重定向移动网站网址

时间:2012-10-30 23:11:37

标签: jquery facebook facebook-graph-api mobile facebook-authentication

在我的应用设置中,我将此作为移动网址:

https://example.herokuapp.com/mobile.php#&ui-state=dialog

但是,当我尝试使用智能手机从Facebook访问该应用时,Facebook会重定向到OAuth网址几毫秒,然后重定向到:

https://example.herokuapp.com/?state=63903485c518f2ae5deca667b9a............#_=_

当/mobile.php丢失时,会加载桌面版本。

我该如何解决这个问题?非常感谢任何建议。

非常感谢

编辑:一段安全码

try {
    $facebook = new Facebook(array(
            'appId'  => AppInfo::appID(),
            'secret' => AppInfo::appSecret(),
    ));
    $access_token=$_GET['access_token'];
    Log::debug("BaseControl:access token: ". $access_token);
    if(isset($access_token)){
        $facebook->setAccessToken($access_token);
    }
    $user_id = $facebook->getUser();
} catch (Exception $e) {
    exit("Error getting facebook data");
}

if ($user_id) {
    try {
        $basic = $facebook->api('/me');//se necesita access token, si no se tiene falla
    } catch (FacebookApiException $e) {
        if (!$facebook->getUser()) {
            exit("Invalid access token");
        }
    }
    if($basic==null){
        exit("Application not installed");
    }
    $user=UsersLogic::getUser($user_id);
    if($user==null){
        exit("User not registered in database");
    }

}
else{
    exit("No user logged");
}

3 个答案:

答案 0 :(得分:5)

Arturo,我会仔细检查您的仪表板设置是否正确。确保“具有Facebook登录的网站”部分具有正确的URL,在您的情况下,是移动的URL。当您将鼠标悬停在[?]上时,工具提示会显示“您网站的网址。出于安全原因,我们只会重定向到此网址”。因此,为了获得正确的重定向URL,您需要确保该字段中的URL是您希望用户重定向到的URL。

正如它所说,Facebook只会出于安全目的而重定向到该URL,因此如果您有应用程序的桌面和移动版本,那么您需要有一个端点来处理重定向以将用户发送到正确的页面。对于您的情况,似乎重定向网址是您的根页。那么你应该做的是在你的根页面中有一些逻辑来检查传入请求的用户代理并适当地路由。我会查看http://detectmobilebrowsers.com/以获取用于检测移动浏览器的开源代码段。您应该将根页面URL放在第一个字段中,将移动版本放在第二个字段中。

如果有帮助,请告诉我。

答案 1 :(得分:3)

虽然这不能解决问题的核心,但如果您没有得到任何其他回复,我确实有一个想法可以尝试:

在应用程序桌面版的索引页面上,您可以检查用户代理以测试它是否是移动设备。如果是,您可以重定向到您的mobile.php页面。

答案 2 :(得分:0)

用户代理嗅探总是一个坏主意。在应用程序的入口点,如果用户通过Facebook内的页面选项卡(即桌面用户)加载应用程序,则应通过检查Facebook发送的“签名请求”变量来确定它是桌面还是移动。如果用户在Facebook之外的移动设备上访问应用程序,则不会发送此变量。

PHP:

if(isset($_REQUEST['signed_request']))
    //load desktop version
else
    //load mobile version