繁体   English   中英

Facebook PHP SDK getUser 适用于 Facebook 上的画布应用程序,但在移动站点中不起作用

[英]Facebook PHP SDK getUser works with canvas app on Facebook but in mobile site it doesn't work

我制作了一个完美运行的 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,但是就像我说的那样,当我不使用移动网站、应用程序时它工作正常.facebook.com/MYAPP 和https://hadadmin.yourwebhosting.com/mixit/也在工作。

getUser通过 javascript SDK 或通过signed_request (用于画布和页面选项卡)使用 cookie 设置。

当您在移动网站上时,如果它是第一个用户连接,您将没有 cookie,并且显然没有signed_request 因此,您需要使用 javascript SDK 通过在init方法中将status设置为true或通过调用getLoginStatus来设置 Facebook 连接。 然后,您可以请求您的服务器(cookie 将随同域上的任何 ajax 请求一起发送)。

编辑后:据我所知,您在这里跨域通信有问题。 请务必使用有效的channel文件正确设置 facebook。 对于 IE,设置 P3P 标头,这将有很大帮助。 对于 Safari 来说,这是一项艰巨的工作,但是谷歌“跨域通信”,你会找到很多解决方案。 但如果 Facebook SDK 设置正确,这些就不是必需的。

希望这有帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM