在我的应用程序设置上,我作为移动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");
}
arturo,我会仔细检查您的仪表板设置是否正确。确保"具有Facebook登录的网站"部分具有正确的URL,在您的情况下是移动设备。当您徘徊在[?]上时,该工具提示说"为您的网站url。出于安全原因,我们只会重定向到此URL"。因此,为了具有正确的重定向URL,您需要确保该字段中的URL是您希望用户重定向到的URL。
正如它所说,Facebook仅出于安全目的重定向到该URL,因此,如果您有应用程序的桌面和移动版本,则需要一个端点来处理重定向以将用户发送到正确的页面。对于您的情况,重定向URL似乎是到您的根页面。然后,您应该做的是在根页面中拥有一些逻辑,以检查传入请求的用户代理并适当路由。我将查看http://detectmobilebrowsers.com/以获取开源代码段以检测移动浏览器。您应该将根页URL放在第一个字段中,然后将移动版本放在第二个字段中。
让我知道是否有帮助。
虽然这没有解决问题的核心,但如果您没有得到任何其他答复,我确实可以尝试一个想法:
在您的应用程序的桌面版本的索引页面上,您可以检查用户代理以测试它是否是移动设备。如果是这样,您可以将重定向到您的Mobile.php页。
用户代理嗅探是始终一个坏主意。在应用程序的输入点中,您应该通过检查用户通过Facebook中的页面选项卡(即桌面用户)加载应用程序的"签名请求"变量来确定其是否是桌面或移动设备。如果用户在Facebook以外的移动设备上访问该应用程序,则不会发送此变量。
php:
if(isset($_REQUEST['signed_request']))
//load desktop version
else
//load mobile version