Получение пользовательских данных приложения в graph api v2 с использованием глобальных идентификаторов

#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, и это даст вам результат. Должно быть, вы делаете что-то не так в своем коде.