#php #facebook #facebook-php-sdk #facebook-graph-api-v2.0
#php #Facebook #facebook-php-sdk #facebook-graph-api-v2.0
Вопрос:
Таким образом, версия 2 graph API Facebook вводит идентификаторы, зависящие от приложения, для защиты конфиденциальности пользователей от спама или чего-то подобного. Но они сказали, что пользователи, которые добавили ваше приложение в v1 с использованием глобального идентификатора, будут продолжать отправлять вам свой глобальный идентификатор в v2, чтобы сохранить обратную совместимость вашего приложения.
Это все хорошо, но v2 api также запрещает получение пользовательских данных с глобальными идентификаторами. Вызов graph с глобальными идентификаторами из приложения canvas выдает исключение, в котором говорится, что вместо этого используется идентификатор, специфичный для приложения.
Я здесь в растерянности. Я пытаюсь получить основную информацию о случайном подмножестве пользователей моего приложения для отображения текущему пользователю, который не обязательно является другом. Но большинство моих пользователей имеют глобальные идентификаторы, хранящиеся в моей базе данных, потому что они присоединились давным-давно. Похоже, что если бы мое приложение было новым, все идентификаторы, хранящиеся в моей базе данных, были бы специфичны для приложения, и поэтому я мог бы получить их информацию. Это указывает мне на то, что Facebook не намерен запрещать мне получать нужные мне данные. Для меня это просто невозможно из-за неудачной ситуации со старым приложением.
Есть ли у меня какой-нибудь способ получить эти данные? Я знаю, что могу вернуться к v1 графика, но это исчезнет 30 апреля 2015 года. Мне нужна только самая основная информация, и я показываю только имена.
Я использую версию 4 PHP SDK. Мой запрос выглядит следующим образом:
(new FacebookRequest(
self::$session, 'GET', '',
array('ids' => implode(',', $userIds))
))->execute()->getGraphObjectList(GraphUser::className());
Мой сеанс происходит от вызова getSession
FacebookCanvasLoginHelper
, как показано в их документах, поэтому у меня есть новый токен доступа и подписанный запрос.
Редактировать
Итак, я отменяю свой вопрос, потому что я тупой. Сахил прав. Моя проблема заключалась в том, что я работаю в отдельном приложении для тестирования (не в официальном тестовом приложении, а в приложении, которое я создал давным-давно для тестирования), поэтому идентификаторы приложений, о которых идет речь, на самом деле не добавили приложение, поэтому я не могу получить их информацию. Упс. Хорошая причина для перехода на официальное тестовое приложение.
отредактируйте еще раз
Я отменяю свой вопрос. Facebook тупой. Я создал официальное тестовое приложение, привязанное к моему реальному приложению, и оно дает мне идентификатор для конкретного приложения, а не тот, который указан для основного приложения. Я просматриваю страницу, с которой у меня были проблемы раньше, и то же исключение:
FacebookFacebookAuthorizationException: The global ID 693041250 is not allowed.
Please use the application specific ID instead.
На странице разработки тестовых приложений указано:
- Тестовые приложения используют то же пространство имен идентификаторов пользователя в приложении, что и ваше производственное приложение, что упрощает отладку проблем с идентификаторами в приложении или в тех случаях, когда вы используете копию своей производственной базы данных для разработки.
Это кажется вопиюще неправильным. Я использую копию своей производственной базы данных. Я знаю свой идентификатор Facebook. Это даже не дало бы мой собственный идентификатор, который был указан для производственного приложения, не говоря уже о чьем-либо еще. Работает ли эта новая вещь только для совершенно новых приложений или что-то в этом роде? На данный момент я почти готов отказаться от разработки Facebook для подобных вещей.
Комментарии:
1. Какой вызов API вы выполняете и какой токен доступа вы используете?
Ответ №1:
Вы правы, говоря, что-
пользователи, которые добавили ваше приложение в v1 с использованием глобального идентификатора, продолжат отправлять вам свой глобальный идентификатор в v2, чтобы сохранить обратную совместимость вашего приложения.
Но это неверно: но v2 api также запрещает получение пользовательских данных с глобальными идентификаторами. Вызов graph с глобальными идентификаторами из приложения canvas выдает исключение, в котором говорится, что вместо этого используется идентификатор, специфичный для приложения.
Конечно, вы получите пользовательские данные с идентификатором, возвращаемым API v2 (будь то global-id или app-specific-id).
Извините, но я не совсем понимаю синтаксис SDK, который вы использовали (мне не нравится использовать SDK), но я уверен, что это сработает. Вы даже можете протестировать это в Graph API Explorer, просто выберите свое приложение из выпадающего списка (верхний-средний) и вызовите /v2/{user-id}
пользователя v1, и это даст вам результат. Должно быть, вы делаете что-то не так в своем коде.