我制作了一款完美运行的Facebook应用,所以现在我正在尝试设置一款移动应用。我在文档中描述了使用此代码来检查用户是否已登录,如果用户已登录,则向前传递信息。这是我正在使用的代码:
<?php
session_start();
// Include facebook PHP SDK
require_once("lib/facebook.php");
// Configure the facebook object
$config = array();
$config['appId'] = 'APP_ID';
$config['secret'] = 'APP_SECRET';
$config['cookie'] = true;
$config['fileUpload'] = true;
$app_id = 'APP_ID';
$canvas_page = "https://hadadmin.yourwebhosting.com/mixit/mobile/";
$location = "https://www.facebook.com/dialog/oauth?client_id="
. $app_id . "&redirect_uri=" . urlencode($canvas_page) . "&scope=publish_stream,email,create_event,rsvp_event,user_events,friends_events";
// initialize the facebook oject
$facebook = new Facebook($config);
// Get Facebook User
$fbID = $facebook->getUser();
// Get the current access token
$access_token = $facebook->getAccessToken();
// check if we have valid user
if ($fbID) {
try {
// Proceed knowing you have a logged in user who's authenticated.
$fb_user_profile = $facebook->api('/me');
} catch (FacebookApiException $e) {
$fbID = NULL;
// seems we don't have enough permissions
// we use javascript to redirect user instead of header() due to Facebook bug
print '<script language="javascript" type="text/javascript"> top.location.href="'. $location .'"; </script>';
// kill the code so nothing else will happen before user gives us permissions
die();
}
} else {
// seems our user hasn't logged in, redirect him to a FB login page
print '<script language="javascript" type="text/javascript"> top.location.href="'. $location .'"; </script>';
// kill the code so nothing else will happen before user gives us permissions
die();
}
我已经搜索了所有类似问题的解决方案都没有工作(即getUser返回0)getUser像其他帖子一样返回0,但就像我说的那样,当我不使用移动设备时它工作正常网站,apps.facebook.com/MYAPP和https://hadadmin.yourwebhosting.com/mixit/也在运作。很抱歉写了这么多我只是想确保我提供所有信息。任何帮助都感激不尽。提前谢谢,罗伯特
答案 0 :(得分:2)
getUser
使用javascript SDK或signed_request
设置Cookie(适用于画布和页面标签)。
当您在移动网站上时,如果它是第一个用户连接,您将没有cookie,并且显然没有signed_request
。因此,您需要使用status
方法中的设置true
至init
使用javascript SDK设置Facebook连接,或致电getLoginStatus
。然后,您可以请求您的服务器(cookie将与同一域上的任何ajax请求一起发送。)
:
从我看到的,你在这里遇到跨域通信的麻烦。请务必使用有效的channel
文件正确设置Facebook。对于IE,设置P3P标头,这将有很大帮助。对于Safari来说,这是一个很糟糕的工作,但谷歌“跨域通信”,你会发现很多解决方案。但如果正确设置Facebook SDK,则不需要这些。
希望这有帮助!