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

#ios #facebook #facebook-graph-api

#iOS #Facebook #facebook-graph-api

Вопрос:

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

Пример ответа на запрос GET на этот edge:

 {
  "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" 
        }
      }
    }
}
 

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

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

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


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

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

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

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

Комментарии:

1. Вы можете использовать уникальную фотографию профиля пользователя. Однако, если пользователь изменит фотографию профиля, URL-адрес будет изменен, и уникальность будет потеряна.

2. Я поговорил с кем-то на странице разработчика facebook facebook.com/groups/fbdevelopers/741657279211122 /. … В принципе, всякий раз, когда пользователь входит в систему, вы можете вызвать GET /{user_id}/apprequests, чтобы увидеть их ожидающие запросы. Кроме того, вы также можете проверить статус запроса. Для получения дополнительной информации developers.facebook.com/docs/games/requests/v2.0

3. «Приглашения ведут себя так же, как и запросы». из developers.facebook.com/docs/games/invitable-friends/v2.3 Итак, что вы можете сделать: чтение всех запросов Для того, чтобы прочитать все запросы для получателя, вы можете запросить график, как показано ниже, используя ТОКЕН ДОСТУПА ПОЛЬЗОВАТЕЛЯ получателя. Это вернет список идентификаторов запросов для этого пользователя в приложении. ПОЛУЧИТЬ graph.facebook.com/me/apprequests ? access_token=[ТОКЕН ДОСТУПА ПОЛЬЗОВАТЕЛЯ ] Из developers.facebook.com/docs/games/requests/v2.3

4. Используйте эту ссылку… вы работаете над 2.0 facebook вводите новый api ….. developers.facebook.com/docs/games/invitable-friends/v2.4

5. @Maulik это та же ссылка, на которую я ссылаюсь в самой первой строке вопроса (хотя сейчас она немного обновлена)

Ответ №1:

TLDR: сохраните ответ из фактического запроса пригласить этих друзей

Насколько я понял предоставленную вами ссылку:

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

В качестве ответа вы получаете следующее: 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]
  • вы сохраняете все данные (указанные в TLDR) и проверяете каждый раз, когда новый пользователь присоединяется к вашей игре, есть ли новый идентификатор пользователя в вашем списке упомянутых запросов.

Чтобы проверить, кто его пригласил, вы можете проверить 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}