简体   繁体   中英

Facebook API GetUser not working in mobile

I have a facebook app working at https://apps.facebook.com/inboxcupid/

When trying to log in from a mobile device, the GetUser method always return 0. It actually creates a redirect loop as the page is constantly redirected to login, return to the app page and then back to login.

It's imperative to know that this code works just fine on a desktop but fails on mobile.

Here is my code:

require_once ('facebook.php');

$config = array(
    'appId' => '*****',
    'secret' => '*****'
);

// Create the Facebook object
$facebook = new Facebook($config);

$login_params = array(
    'canvas' => 1,
    'scope' => 'basic_info, user_about_me, user_birthday, user_relationships, user_relationship_details, user_location, user_photos',
    'fbconnect' => 1,
  );

$user = $facebook->getUser();

if($user) {
    try {
        $permissions = $facebook->api("/me/permissions");
        if( !array_key_exists('basic_info', $permissions['data'][0]) || !array_key_exists('user_location', $permissions['data'][0]) || !array_key_exists('user_about_me', $permissions['data'][0]) || !array_key_exists('user_birthday', $permissions['data'][0]) || !array_key_exists('user_relationships', $permissions['data'][0]) || !array_key_exists('user_relationship_details', $permissions['data'][0]) || !array_key_exists('user_photos', $permissions['data'][0]) ) {
            $login_url = $facebook->getLoginUrl($login_params); 
            echo "<script" . " type='text/javascript'" . ">top.location.href = '$login_url';</script>"; 
        }

    } catch(FacebookApiException $e) {
        $login_url = $facebook->getLoginUrl($login_params); 
        echo "<script" . " type='text/javascript'" . ">top.location.href = '$login_url';</script>"; 
        error_log($e->getType());
        error_log($e->getMessage());
    }   
} else {
    $login_url = $facebook->getLoginUrl($login_params);
    echo "<script" . " type='text/javascript'" . ">top.location.href = '$login_url';</script>"; 
}

If anyone can help me figure it out I'll be thankful.

Finally get it working.

It seems that in mobile the php sdk doesn't get and store the access token automatically and it can be done manually.

Here is my code, per your enjoyment...

require_once ('facebook.php');

// Set authentication variables
$config = array(
    'appId' => '374681629327567',
    'secret' => '463cd6dc258e1225b86ac529a391f4e9',
    'cookie' => true,
);

// Create the Facebook object
    $facebook = new Facebook($config);

$login_params2 = array(
    'canvas' => 0,
    'scope' => 'basic_info, user_about_me, user_birthday, user_relationships, user_relationship_details, user_location, user_photos',
    'display' => 'touch',
    'redirect_uri' => 'https://secure.inboxcupid.co.il/mobile/index.php'
);

$user = $facebook->getUser();
if($user) {
    try {
        $permissions = $facebook->api("/me/permissions");
        if( !array_key_exists('basic_info', $permissions['data'][0]) || !array_key_exists('user_location', $permissions['data'][0]) || !array_key_exists('user_about_me', $permissions['data'][0]) || !array_key_exists('user_birthday', $permissions['data'][0]) || !array_key_exists('user_relationships', $permissions['data'][0]) || !array_key_exists('user_relationship_details', $permissions['data'][0]) || !array_key_exists('user_photos', $permissions['data'][0]) ) {
            $login_url = $facebook->getLoginUrl($login_params);                                 
            echo "<script" . " type='text/javascript'" . ">top.location.href = '$login_url';</script>"; 
        }

    } catch(FacebookApiException $e) {
        $login_url = $facebook->getLoginUrl($login_params); 
        echo "<script" . " type='text/javascript'" . ">top.location.href = '$login_url';</script>"; 
        error_log($e->getType());
        error_log($e->getMessage());
    }   
} else {
    $login_url = $facebook->getLoginUrl($login_params2);
    if(isset($_GET['code'])) {
        $token_url = 'https://graph.facebook.com/oauth/access_token?client_id=****&redirect_uri=' . urlencode('https://secure.inboxcupid.co.il/mobile/index.php') . '&client_secret=****&code=' .$_GET['code'];
        $response = file_get_contents($token_url);
        $params = null;
        parse_str($response, $params);
        if(!isset($params['access_token'])) { echo "<script" . " type='text/javascript'" . ">top.location.href = '$login_url';</script>"; }
        $graph_url = "https://graph.facebook.com/me?access_token=" . $params['access_token'];
        $user2 = json_decode(file_get_contents($graph_url));
        $user = $user2->id;
        $facebook->setAccessToken($params['access_token']);
    }
    else {
        echo "<script" . " type='text/javascript'" . ">top.location.href = '$login_url';</script>"; 
    }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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