我的设置是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。
有什么建议我做错了,或者更好的方式来发送我的用户通知?
答案 0 :(得分:1)
在luschn的评论之后,我已经决定切换到Notifications,因为apprequest真的是为游戏而设计的。
然而,我在apprequest没有显示的问题是由于应用程序被设置为沙箱(应用程序不是直播)一旦我打开了我测试的请求,没有任何问题。
所有有同样问题的人......上面的代码确实有效,如果需要,可以使用它。