Моя установка представляет собой приложение холста/веб-страницы на facebook, которое использует JavaScript SDK для входа в систему с помощью facebook, а затем использует PHP SDK для выполнения некоторых действий на стороне сервера. Одна из функций на стороне сервера для отправки уведомления, когда сообщение получает новый комментарий. Обратите внимание, что это сообщения в приложении, а не в ленте/комментарии Facebook. Я собирался попробовать использовать Facebook Notification Edge, но в настоящее время он находится в бета-версии и открыт только для приложений на основе холста и доступен только с веб-страницы 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 в свойстве «Кому».
// 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);
}
}
Когда я запускаю этот скрипт, все выглядит хорошо. var_dump ответа $response просто показывает, что сеанс установлен и имеет много мусора, который на данный момент не имеет значения. var_dump объекта $graphObject выглядит так, как показано в документации, Facebook API /user/apprequest
object(Facebook\GraphObject)#11 (1) {
["backingData":protected] => array(2) {
["request"] => string(15) "795036370586912"
["to"] => array(1) {
[0] => string(15) "0123456789101112"
}
}
}
Теперь в этот момент я должен где-то увидеть сообщение/уведомление. Мой телефон, страница в фейсбуке, значок земного шара, моя лента, мой дом, мессенджер, огни в небе, мерцающая луна, почтовый голубь, вы что-то знаете, но я не вижу, чтобы аппреквест когда-либо был отправлен куда-либо, кроме этого У меня есть идентификатор запроса.
Любые предложения, что я делаю неправильно, или лучший способ отправлять уведомления моим пользователям?