Запросы, инициированные пользователем, не удаляются

#facebook #facebook-graph-api #apprequests

#Facebook #facebook-graph-api #запросы приложений

Вопрос:

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

Запросы отправляются нормально, и приглашенные пользователи могут вернуться в мое приложение. Проблема, с которой я сталкиваюсь, заключается в удалении запросов после возвращения пользователя.

Во-первых, когда пользователь нажимает на запрос, я хотел бы удалить его, независимо от того, взаимодействуют они с моим приложением или нет. Это потребовало бы отправки УДАЛЕНИЯ этому объекту на графике: request-id_recipient-id. Однако, поскольку пользователь, возможно, не взаимодействовал с моим приложением, у меня нет его идентификатора пользователя, поэтому я не могу этого сделать — пользователю остается самостоятельно выполнить мой запрос (нехорошо).

Во-вторых, даже когда пользователь взаимодействует с моим приложением, я получаю его идентификатор пользователя и выполняю вызов для УДАЛЕНИЯ запроса-id_recipient-id Я получаю этот ответ:

(#200) Объект (класс EntAppRequest), поддерживаемый идентификатором 267270596647001, не может быть виден текущему просмотрщику 500****** (Идентификационный номер: 267270596647001)

Это говорит о том, что у получателя запроса нет разрешения на его удаление с помощью своего токена доступа? Это правильно, потому что мне кажется, что это немного назад. Или это ситуация, в которой мне требуется расширенное разрешение manage_requests? Это тоже показалось бы мне странным, потому что это добавило бы дополнительные разрешения в поле авторизации, которые пользователь может отклонить.

РЕДАКТИРОВАТЬ — Забыл упомянуть о своем новом приложении, поэтому его использование запросов 2.0 и запросов 2.0 эффективно

Любая помощь будет оценена.

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

1. Вышеуказанная ошибка возникала при использовании JS SDK. С тех пор я попытался использовать скрипт PHP для обработки запросов на удаление, который, похоже, работает нормально. Поэтому проблема, по-видимому, связана с JS SDK или, возможно, с используемыми токенами доступа. Я не уверен, в каких ситуациях PHP и JS SDK решают, использовать ли токены доступа к приложению или пользователю, но, возможно, это проблема. Первая проблема, описанная выше, остается нерешенной

Ответ №1:

По первой проблеме. Учитывая, что у вас нет идентификатора пользователя для пользователей, которые не взаимодействовали с вашим приложением, похоже, нет способа удалить отправленный им запрос. Похоже, что в дизайне запросов Facebook есть «дыра».

Однако, похоже, есть один обходной путь для очистки запросов. Когда вы отправляете запрос с помощью Javascript, у вас есть доступ к идентификаторам пользователей всех пользователей, которым был отправлен запрос:

 {
  request: ‘request_id’
  to:[array of user_ids]
}
  

Вы можете кэшировать это и после некоторого заранее определенного периода просто удалить эти запросы для всех пользователей.

Обновление: [12 января 2012] Эта ошибка была принята и назначена здесь https://developers.facebook.com/bugs/202883726463009

Обновление: ошибка была помечена как по замыслу

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

1. Спасибо за ссылку на ошибку. Я подозревал, что это так

Ответ №2:

Не видя точно, что вы делаете, трудно понять, но вот несколько возможных решений:

Во-первых, вашему приложению всегда нужно будет удалять запрос, в отличие от запросов старого стиля, приложение отвечает за очистку запросов после их принятия, и они не удаляются автоматически, потому что пользователь их принял — это описано здесь: https://developers.facebook.com/docs/reference/dialogs/requests/#deleting

Вы должны иметь возможность использовать токен доступа к приложению для удаления запроса, отправленного вашим приложением, независимо от того, какие разрешения у вас есть для пользователя-получателя (хотя, исходя из вашего описания выше, вы должны иметь право использовать токен доступа пользователя, который у вас есть для получателя):

Если вы включили параметры миграции для «эффективных» запросов, УДАЛЕНИЕ имеет следующий формат DELETE https://graph.facebook.com/[<request_id>_<user_id>]?access_token=[USER or APP ACCESS TOKEN]

Если вы этого не сделали, он будет иметь следующий формат

DELETE https://graph.facebook.com/[request_id]?access_token=[USER OR APP ACCESS_TOKEN]

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

1. Спасибо Igy. Это инструкции, которым я следовал, и мне удалось заставить его работать исключительно в среде PHP. Попытка тех же вызовов api удаления с помощью JS SDK (та же конечная точка graph тот же токен доступа) приводит к ошибке в моем сообщении выше. Возможная ошибка? Знаете ли вы какой-либо способ решить мою первую проблему и удалить запрос без «установки» пользователем моего приложения вообще? У меня возникли проблемы с получением их идентификатора пользователя для размещения в вызове api УДАЛЕНИЯ

2. Если пользователь не установил ваше приложение, вам придется использовать токен доступа к приложению. Кроме того, если вы не можете отправить запрос на удаление в javascript, вы можете сделать запрос GET и добавить method=delete к вызову, и API обработает его как запрос на УДАЛЕНИЕ

Ответ №3:

1) Вы можете удалить запрос, как только пользователь авторизовал приложение. В противном случае у вас не было бы возможности узнать, кто является приглашенным, и, следовательно, запросить идентификатор

2) Кажется, вы пытаетесь удалить уже удаленный запрос

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

1. 1) Я думал, что это так. В этом случае мне просто придется оставить пользователя для очистки самих запросов. 2) Запросы не удаляются в тот момент, когда я получал эту ошибку. Если я делаю тот же запрос, используя PHP SDK вместо JS SDK, он работает нормально, и запрос удаляется