4

在我的应用设置中,我有一个作为移动 URL 的:

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

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

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");
}
4

3 回答 3

6

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

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

让我知道这是否有帮助。

于 2012-11-02T23:00:25.510 回答
2

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

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

于 2012-11-02T07:27:33.973 回答
0

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

php:

if(isset($_REQUEST['signed_request']))
    //load desktop version
else
    //load mobile version
于 2014-02-18T08:56:16.473 回答