gpt4 book ai didi

javascript - 使用 PHP SDK v4 的 Facebook 应用请求

转载 作者:行者123 更新时间:2023-12-03 10:54:44 24 4
gpt4 key购买 nike

我的设置是 facebook 上的一个 Canvas /网页应用程序,它使用 JavaScript SDK 来登录 facebook,然后使用 PHP SDK 来执行一些服务器端的操作。服务器端之一的功能是在帖子收到新评论时发送通知。请注意,这些是应用程序中的帖子,而不是 Facebook 提要/评论。我本来打算尝试使用 Facebook 通知边缘,但它目前处于测试阶段,仅对 Canvas 应用程序开放,并且只能从 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'});
}
});

我在每次页面刷新时都会处理此问题,以使 session 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 只是显示 session 已设置,并且有很多此时无关紧要的垃圾。 $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 页面、地球仪图标、我的动态、我的家、信使、天空中的灯光、闪烁的月亮、信鸽,你知道的,但我看不到应用请求发送到任何地方,除了我有一个请求 ID。

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

最佳答案

在 luschn 的评论之后,我决定切换到通知,因为 apprequest 确实是为游戏使用而构​​建的。

但是,我遇到的应用请求未显示的问题是由于应用程序被设置为沙箱(应用程序不是实时的),一旦我打开实时测试的请求,就可以毫无问题地发送。

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

关于javascript - 使用 PHP SDK v4 的 Facebook 应用请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28306661/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com