Ошибка токена доступа Facebook при отправке уведомлений в массив идентификаторов с помощью Javascript
У меня есть список идентификаторов Facebook, хранящихся в массиве с именем myArray
Я пытаюсь написать Javascript, который будет проходить через этот массив и отправлять уведомления каждому идентификатору.
Это моя последняя попытка:
function sendNotifications(){
var myArray = [624523462, 25624523426, 3245451236, 14352654];
for (var q = 0; q < myArray.length; q++) {
FB.api(
"/"+myArray[q]+"/notifications",
"POST",
{
"template": "This is a test notification!"
},
function (response) {
if (response && !response.error) {
console.log("notification should be sent.");
} else {
console.log(response);
}
}
);
}}
Это дает мне сообщение об ошибке:message:"(#15) This method must be called with an app access_token.
Меня это немного смущает, потому что на этом этапе плеер уже вошел в мое приложение. Я уже сделал несколько запросов на информацию о плеере из Graph API, поэтому не уверен, почему он запрашивает у меня токен доступа к приложению. Нужен ли мне новый токен доступа для каждого отправленного уведомления? Или он истекает через определенное время?
Я не знаю, как правильно включить это здесь. Я делаю вызов для токена в начале функции и сохраняю его как переменную, которую затем где-то заполняю? Может ли кто-нибудь показать мне правильный синтаксис, чтобы использовать для достижения этого с моим текущим кодом?
Любая помощь будет очень признательна, спасибо заранее!
1 ответ
В Facebook API есть n узлов конечной точки. Некоторые требуют токен доступа пользователя, некоторые требуют токен доступа к приложению, некоторые требуют токен доступа к странице в зависимости от природы узла. (Вы можете перейти по этой ссылке, чтобы полностью понять токены доступа)
Большинство конечных точек обслуживаются токеном доступа пользователя, который используется в SDK Facebook (FB.api()
в вашем случае) по умолчанию при каждом вызове. Следовательно, вы смогли успешно выполнить эти несколько запросов. Справедливо.
API-интерфейс уведомлений требует токен доступа к приложению вместо токена доступа пользователя. Маркер доступа к приложению никогда не истекает, пока учетные данные приложения не будут изменены.
Получение токена доступа к приложению
вариант 1- использовать -
{app-id}|{app-secret}
непосредственно, который является только маркером доступа к приложению.вариант 2-
GET /oauth/access_token? client_id={app-id} &client_secret={app-secret} &grant_type=client_credentials
Важно! Вы не должны раскрывать секрет приложения на своей стороне клиента. Это как пароль к вашему приложению! Таким образом, вы должны сделать этот вызов только на стороне сервера
Маркер доступа к приложению Usinig
Очень просто использовать любой токен доступа, просто добавьте параметр
access_token
и передать ему требуемое значение. например:/.../notifications?access_token={app-access-token}
В общем, вы должны сделать этот вызов на вашем сервере, а не на стороне клиента напрямую.