使用带有Javascript SDK的PHp SDK4发送通知

时间:2014-10-09 17:54:34

标签: javascript php facebook facebook-graph-api

我正在构建一个Facebook画布应用程序。我使用javascript SDK完成了大部分部分,现在我陷入了可能需要使用PHP SDK 4的地方。我正在尝试向用户发送通知。为此,我做了一些研究,发现只有有限的文档。我将通过几点总结。

  1. 我在JavaScript SDK中执行了登录,检索用户个人资料等所有操作。

  2. 需要使用PHP SDK4发送通知。以下是我到目前为止所做的工作。

  3. 导入所有必需的文件,如require_once('Facebook / HttpClients / FacebookHttpable.php'); 并使用它们像使用Facebook \ HttpClients \ FacebookHttpable; [我三重交叉检查路径。他们都是正确的。

    设置如下的Facebook会话。

    FacebookSession::setDefaultApplication('xxxxxxx','xxxxxxxx');
    

    获得了一个新的app访问令牌,如下所示。

    $appSession = FacebookSession::newAppSession();
    

    尝试使用Graph API进行通知

    $notification = new FacebookRequest(
    $appSession,
    'POST',
    '/{777911845584420}/notifications',
    array (
        'href' => "apps.wehubs.com/ashifshereef/amritham2/againsample/again2/",
        'template' => 'You have been tagged, please set privacy preference',
    
    
    )
    );
    $response = $notification->execute();
    $graphObject = $response->getGraphObject();
    

    我一无所获。没有通知,没有任何东西。我知道这段代码有些奇怪。要添加的东西,或者没有正确完成的东西。我非常精通javacsript,但不是PHP。我的问题很清楚。如何使这个东西工作?对不起,这是我能想到的,PHP SDK 4上提供了非常糟糕的文档。

2 个答案:

答案 0 :(得分:2)

我只会将CURL用于App Notifications:

$accessToken = $appId . '|' . $appSecret;
$notificationText = 'The cake is a lie.';

//init curl
$ch = curl_init();
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt($ch, CURLOPT_TIMEOUT, 60);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_USERAGENT, 'facebook');

//send notification
$url = 'https://graph.facebook.com/' . $userId . '/notifications' .
    '?access_token=' . $accesstoken .
    '&template=' . $notificationText .
    '&href=';
curl_setopt($ch, CURLOPT_URL, $url);
$curlResult = curl_exec($ch);

来源:http://blog.limesoda.com/2014/08/app-notifications-facebook-apps/

只要用户授权您的应用,这应该没问题。请记住,您不会在移动设备上看到应用程序通知。

还有一件事:“apps.wehubs.com / ...”不正确,它需要是绝对URL - 或Canvas的相对URL(apps.facebook.com/yournamespace/relativeurl)。不确定它是否适用于外部URL,因为App Notifications仅适用于facebook.com上的应用程序(https://developers.facebook.com/docs/games/notifications)。

答案 1 :(得分:1)

这对我有用:

<?php

require ('facebook-sdk/autoload.php');
use Facebook\FacebookSession;
use Facebook\FacebookRequest;
use Facebook\FacebookRequestException;
use Facebook\Entities\AccessToken;
use Facebook\GraphUser;

session_start(); 
?>

<html>
<head>
</head>
<body>
<div>Testing Notifications</div>
<?php 
try {

    FacebookSession::setDefaultApplication(
        "{your_app_id}",
        "{your_app_secret}"
    );

    $appSession = FacebookSession::newAppSession();


        $request = new FacebookRequest(
            $appSession,
            'POST',
            '/'. '{user_id}' .'/notifications',
            array (
                'href' => "index.php",
                'template' => '{your_notification_text}',
            )
        );

        $response = $request->execute();
        $graphObject = $response->getGraphObject(); 

        echo 'Success?: ' . $graphObject->getProperty('success');


}catch(FacebookRequestException $ex) {
    echo 'FacebookRequestException: ' . $ex->getMessage();

}catch(\Exception $ex) {
    echo 'Exception' . $ex->getMessage();
} 
?>
</body>
</html>