Ошибка маркера доступа 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 ответ

  1. Существует n количество конечных узлов, предлагаемых facebook API. Некоторые требуют маркер доступа пользователя, некоторые требуют маркер доступа приложения, некоторые требуют маркер доступа страницы в зависимости от природы узла. (Вы можете пройти по этой ссылке, чтобы понять о маркерах доступа полностью)

    Большинство конечных точек обслуживаются с помощью маркера доступа пользователя, который используется пакетами SDK facebook (FB.api()в вашем случае) по умолчанию при каждом вызове. Таким образом, вы смогли сделать эти несколько запросов успешно. Справедливо.

    API уведомлений требует маркер доступа к приложению вместо маркера доступа пользователя. Срок действия маркера доступа к приложению не истекает до изменения учетных данных приложения.

    1. Получение маркера доступа к приложению

      Вариант 1-использовать-{app-id}|{app-secret}напрямую, который является только маркер доступа приложения.

      вариант 2-

      GET /oauth/access_token?
          client_id={app-id}
          &amp;client_secret={app-secret}
          &amp;grant_type=client_credentials 
      

      Важно — вы не должны раскрывать секрет приложения на стороне клиента. Это как пароль к вашему приложению! Таким образом, вы должны сделать этот вызов только на стороне сервера

    2. Usinig App access token

      Очень просто использовать любой токен доступа, просто добавьте параметр access_tokenи передайте ему требуемое значение. например: /.../notifications?access_token={app-access-token}
      Лениво, вы должны сделать этот вызов на вашем сервере не на стороне клиента напрямую.