Facebook apprequest使用PHP SDK v4

时间:2015-02-03 18:58:49

标签: javascript php facebook facebook-graph-api facebook-app-requests

我的设置是Facebook上的一个画布/网页应用程序,它使用JavaScript SDK登录facebook,然后使用PHP SDK做一些服务器端的东西。服务器端功能之一,用于在帖子获得新评论时发送通知。请注意,这些是应用中的帖子,而不是Facebook Feed /评论。我打算尝试使用Facebook通知边缘,但它目前处于测试阶段,只对画布应用程序开放,只能从Facebook.com网页访问。所以我认为我会通过使用apprequest边缘从评论海报向帖子创建者发送消息来做游戏所做的事情。

以下是我用来登录的代码。 - 效果很好。

FB.init({
    appId      : 'xxxxxx',
    xfbml      : true,
    cookie     : true,
    version    : 'v2.2'
});

function onLogin(response) {
    if (response.status == 'connected') {
        FB.api('/me?fields=id,first_name,last_name,email', function(data) {
            // I do some stuff here that has nothing to do with problem
        });
    }
}

FB.getLoginStatus(function(response) {
    if (response.status == 'connected') {
        onLogin(response);
    } else {
        FB.login(function(response) {
            onLogin(response);
        }, {scope: 'user_friends, email'});
    }
});

我在每次页面刷新时对此进行处理,以使会话cookie对PHP调用保持活动状态。到目前为止一切都很好,我根据需要获取用户登录提示的GraphAPI数据,并请求正确的授权。

现在在PHP中我将测试用户的测试消息发送给自己。此时我以测试用户身份登录,并在“收件人”属性中对我的Facebook ID进行硬编码。

// FB Requires
// Loaded from a seperate script to include all SDK files

// FB NameSpace
use Facebook\FacebookSession;
use Facebook\FacebookRequest;
use Facebook\FacebookJavaScriptLoginHelper;

FacebookSession::setDefaultApplication($GLOBALS['FB_AppID'], $GLOBALS['FB_AppSecret']);

// Simple Class to send a notification to a user about a status update
class FBRequest {

    private $session;

    function __construct()
    {
        $helper = new FacebookJavaScriptLoginHelper();
        try {
            $this->session = $helper->getSession();
        } catch(FacebookRequestException $ex) {
            // When Facebook returns an error
            echo "FBExHelper :: " . $ex->getMessage();
        } catch(\Exception $ex) {
            // When validation fails or other local issues
            echo "HelperEx :: " . $ex->getMessage();
        }

        return;

        // If you're making app-level requests:
        $this->session = FacebookSession::newAppSession();

        // To validate the session:
        try {
            $this->session->validate();
            $_SESSION['access_token'] = $this->session->getToken();
        } catch (FacebookRequestException $ex) {
            // Session not valid, Graph API returned an exception with the reason.
            echo $ex->getMessage();
        } catch (\Exception $ex) {
            // Graph API returned info, but it may mismatch the current app or have expired.
            echo $ex->getMessage();
        }
    }

    public function SendRequest()
    {
        if (!$this->session) return;
        /* PHP SDK v4.0.0 */
        /* make the API call */
        $request = new FacebookRequest(
            $this->session,
            'POST',
            "/me/apprequests",
            array (
                'message' => 'This is a test message',
                'to' => '0123456789101112' // My Facebook ID here
            )
        );

        $response = $request->execute();
        $graphObject = $response->getGraphObject();
        /* handle the result */

        var_dump($response);
        echo "<br><br>";
        var_dump($graphObject);
    }
}

当我运行此脚本时,一切看起来都不错。 $ response的var_dump只显示会话已设置并且有很多垃圾在这一点上无关紧要。 $ graphObject的var_dump看起来像文档显示它应该看起来Facebook API /user/apprequest

object(Facebook\GraphObject)#11 (1) {
    ["backingData":protected] => array(2) {
        ["request"] => string(15) "795036370586912"
        ["to"] => array(1) {
            [0] => string(15) "0123456789101112"
        }
    }
}

现在,我应该在某处看到消息/通知。我的手机,facebook页面,地球图标,我的饲料,我的家,信使,天空中的灯光,闪烁的月亮,载体鸽,你知道的东西,但我看不到任何地方的apprequest,除了那个我有一个请求ID。

有什么建议我做错了,或者更好的方式来发送我的用户通知?

1 个答案:

答案 0 :(得分:1)

在luschn的评论之后,我已经决定切换到Notifications,因为apprequest真的是为游戏而设计的。

然而,我在apprequest没有显示的问题是由于应用程序被设置为沙箱(应用程序不是直播)一旦我打开了我测试的请求,没有任何问题。

所有有同样问题的人......上面的代码确实有效,如果需要,可以使用它。