1

完璧に動作する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/も機能しています。

4

1 に答える 1

2

getUserjavascript SDKまたはsigned_request(キャンバスおよびページタブの場合)を介してCookie設定を使用します。

モバイルサイトを使用していて、それが最初のユーザー接続である場合、Cookieはなく、明らかにありませんsigned_requeststatusそのためtrueinitメソッドの設定で、またはを呼び出すことにより、javascriptSDKを使用してFacebook接続をセットアップする必要がありますgetLoginStatus。次に、サーバーをリクエストできます(Cookieは同じドメイン上のajaxリクエストとともに送信されます)。

編集後: 私が見たところ、ここではクロスドメイン通信に問題があります。channel有効なファイルを使用してFacebookを正しく設定してください。IEの場合は、P3Pヘッダーを設定します。これは非常に役立ちます。Safariの場合、それは大変な仕事ですが、グーグルの「クロスドメイン通信」とあなたは多くの解決策を見つけるでしょう。ただし、Facebook SDKが正しくセットアップされている場合は、これらは必要ありません。

この助けを願っています!

于 2012-12-16T22:05:31.553 に答える