1

Facebook Graph API を使用してチェックインを公開しようとしています。私はFacebook API のドキュメント (チェックイン)publish_checkinsに目を通し、許可も得ています。ただし、チェックインが公開されていません。何か問題があるか、それとも他に何か不足しているかを知ることができますか? お時間をいただきありがとうございます:)

fbmain.php

$user = $facebook->getUser();
$access_token = $facebook->getAccessToken();

// Session based API call
if ($user) {
    try {
            $me = $facebook->api('/me');
            if($me)
            {
                $_SESSION['fbID'] = $me['id'];
                $uid = $me['id'];
            }
        } catch (FacebookApiException $e) {
          error_log($e);   
        }
}
else {
   echo "<script type='text/javascript'>top.location.href='$loginUrl';</script>";
   exit;
}

$loginUrl = $facebook->getLoginUrl(
        array(
            'redirect_uri' => $redirect_url,
            'scope' => status_update, publish_stream, publish_checkins, 
                user_checkins, user_location, user_status'
            )
);

main.php - PHP SDKの使用 (この例では間違った SDK が使用されています。代わりに JavaScript SDK を使用する必要があります)

<?php
    include_once "fbmain.php";

    if (!isset($_POST['latitude']) && !isset($_POST['longitude']))
    {
?>
<html>
    <head>
        //ajax POST of latitude and longitude
    </head>

    <body>
        <input type="button" value="Check In!" onclick="checkin();"/></span>
    </body>
</html>
<?php
}
else
{
?>
<script type="text/javascript">
    function checkin()
    {
        try
        {
            $tryCatch = $facebook->api('/'.$uid.'/checkins', 'POST', array(
                'access_token' => $facebook->getAccessToken(),
                'place' => '165122993538708',
                'message' =>'MESSAGE_HERE',
                'coordinates' => json_encode(array(
                    'latitude'  => '1.3019399200902',
                    'longitude' => '103.84067653695'
                ))
            ));
        }
        catch(FacebookApiException $e)
        {
            $tryCatch=$e->getMessage();
        }
        return $tryCatch;
    }
</script>
<?php
}
?>

解決済みの質問 - チェックインを公開する際の注意事項

  • publish_checkins許可が与えられていることを確認してください。
  • PHP SDK のパラメーターjson_encode()をエンコードするために使用する必要があります。coordinates
  • placeパラメータはcoordinates必須です。
  • publish_checkins許可されたアクセス許可の既存のリストにアクセス許可を追加したばかりの場合は、再認証が必要です。
4

2 に答える 2

1

どうやら、質問に投稿した構成とPHPチェックイン機能は正しいようです。ただし、Nehal が指摘したように、私の場合は PHP SDK の代わりに JavaScript SDK を使用する必要があります。今後の参考に…

JavaScript SDK の使用

function checkin()
{
    FB.api('/me/checkins', 'post', 
    { message: 'MESSAGE_HERE',
       place: 165122993538708,
       coordinates: {
           'latitude': 1.3019399200902,
           'longitude': 103.84067653695
       }
    },
        function (response) {
            alert("Checked in!");
        }
    );
}
于 2012-06-19T13:14:29.133 に答える
0

また、PHP と変数のスコープについても学習する必要があります。

$facebook = new Facebook(array(
          'appId'  => FB_API_KEY,
          'secret' => FB_SECRET_KEY,
          'cookie' => true,
        ));
$loginUrl = $facebook->getLoginUrl(
        array('scope' => 'status_update,publish_stream,publish_checkins,user_checkins,user_location,user_status,user_checkins')
);

// Session based API call
if ($user) {
    try {
            $me = $facebook->api('/me');
            if($me)
            {
                $_SESSION['fbID'] = $me['id'];                
            }
        } catch (FacebookApiException $e) {
          error_log($e);   
        }
}
else {
   echo "<script type='text/javascript'>top.location.href='$loginUrl';</script>";
   exit;
}

function checkin($fb)
{
    try
    {
        $tryCatch = $fb->api('/'.$_SESSION['fbID'].'/checkins', 'POST', array(
            'access_token' => $fb->getAccessToken(), //corrected
            'place' => '165122993538708',
            'message' =>'I went to placename today',
            'coordinates' => json_encode(array(
                'latitude'  => '1.3019399200902',
                'longitude' => '103.84067653695'
            ))
        ));
    }
    catch(FacebookApiException $e)
    {
        $tryCatch=$e->getMessage();
    }
    return $tryCatch;
}

checkin($facebook); //calling the function and passing facebook object to function
于 2012-06-18T14:24:15.040 に答える