Как узнать, какие друзья приняли приглашения с помощью API Facebook?

Facebook API v2.0 представил invitable_friends edge.

Пример ответа от запроса GET к этому ребру:

{
  "data": [ 
    {
      "id": "AVkgK9fLFxasdvXNbDV_gYogR6lXa9SKLnH...", 
      "name": "Anita Sujarit", 
      "picture": {
        "data": {
          "is_silhouette": false, 
          "url": "https://fbcdn-profile-a.akamaihd.net/hprofile-ak-prn2/t1.0-1/c0.0.50.50/p50x50/1470158_10201991701127909_302023572_t.jpg" 
        }
      }
    }
}

Присмотревшись к этому ID, это не обычный идентификатор пользователя Facebook. Вместо этого Пригласить токен; этот токен передается Requests Dialog в качестве значения для параметра to.

Маркер приглашения, возвращенный на каждом из объектов-друзей как значение поля с именем id, является уникальной (для пользователя и для каждой игры) строкой переменной длины. Маркер приглашения подлежит истечению и может меняться между игровыми сеансами. Поэтому нецелесообразно кэшировать эти результаты или пытаться назначить их данному человеку.

friends edge теперь возвращает только друзей, которые уже используют приложение


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

Раньше я бы сохранил идентификатор друзей, когда я отправил им приглашение, и в какой-то более поздний момент проверил это против списка друзей, играющих в игру, но теперь это невозможно по нескольким причинам:

  • Лоток приглашения отсутствует на краю друзей
    • И это динамично в любом случае
  • Обычный идентификатор пользователя отсутствует на краю invitable_friends.
  • Я мог бы использовать имя пользователя в качестве ключа, но это не уникально.

Актуальный вопрос: Кто-нибудь придумал способ определения от приглашенных пользователей, которые приняли это приглашение?

Ответ 1

TL;DR: сохранить ответ от фактического приглашения этих друзей

Насколько я понял ссылка, вы указали:

Вы можете начать запрос invite_token, который, как я полагаю, вы уже можете сделать.

В качестве ответа вы получите это за invitable_friend:

{
  "id": "AVlzYTkXshfBqLe58zR9tY5dZ7L0wltTUkWKT0Z5V87zkwv-39...", // Invite Token
  "name": "Guy Cross",
  "picture": {
    "data": {
      "is_silhouette": false,
      "url": "https://fbcdn-profile-a.akamaihd.net/hprofile-ak-prn1/t5.0-1/623782_622770420_2109148508_q.jpg"
    }
  }
}

Страница упоминает ранее, как делать запросы в целом:

FB.ui({method: 'apprequests',
  message: 'YOUR_MESSAGE_HERE',
  to: 'USER_ID, USER_ID, INVITE_TOKEN' // It says invite token
}, function(response){
  console.log(response);
});

Посмотрите на строку с помощью to: вы можете поместить туда токены.

Теперь ответ выглядит следующим образом:

{
  request: 'REQUEST_OBJECT_ID'
  to:[array of USER_IDs]
}

Там у вас есть идентификаторы пользователей.


Если вы пойдете дальше и хотите больше информации или хотите узнать, кто принял, у вас есть два варианта:

  • вы можете проверить, разрешил ли пользователь идентификатор игры
  • когда новый пользователь входит в систему, вы можете запросить все запросы для этого нового пользователя. Там вы можете отследить, кто его пригласил. GET https://graph.facebook.com/me/apprequests?access_token=[USER ACCESS TOKEN]
  • Вы сохраняете все данные (указанные в TL;DR) и проверяете каждый раз, когда новый пользователь присоединяется к вашей игре, если новый идентификатор пользователя указан в списке упомянутых запросов.

Чтобы проверить, кто его пригласил, вы можете проверить request_object_id на http://graph.facebook.com/{REQUEST_OBJECT_ID}?access_token=USER_ACCESS_TOKEN получающего пользователя, и следующий ответ будет:

{
  "id": "REQUEST_OBJECT_ID",
  "application": {
    "name": "APP_DISPLAY_NAME",
    "namespace": "APP_NAMESPACE",
    "id": "APP_ID"
  },
  "to": {
    "name": "RECIPIENT_FULL_NAME",
    "id": "RECIPIENT_USER_ID"
  },
  "from": {
    "name": "SENDER_FULL_NAME",
    "id": "SENDER_USER_ID"
  },
  "message": "ATTACHED_MESSAGE",
  "created_time": "2014-01-17T16:39:00+0000"
}

если вы перейдете с токеном доступа пользователя от отправителя, вы получите следующее:

{
  "id": "REQUEST_OBJECT_ID",
  "application": {
    "name": "APP_DISPLAY_NAME",
    "namespace": "APP_NAMESPACE",
    "id": "APP_ID"
  },
  "from": {
    "name": "SENDER_FULL_NAME",
    "id": "SENDER_USER_ID"
  },
  "message": "ATTACHED_MESSAGE",
  "created_time": "2014-01-17T16:39:00+0000"
}

Чтобы предотвратить это, вы можете указать идентификатор пользователя получающего пользователя и получить тот же ответ, что и у получателя: https://graph.facebook.com/{REQUEST_OBJECT_ID}_{USER_ID}?access_token={APP_ACCESS_TOKEN}