Получить профиль Facebook из клиента Xamarin

Я хотел бы получить основную информацию о пользователе от Facebook после того, как пользователь вошел в систему.

Я просмотрел документацию в Как работать с аутентификацией и в разделе "Как: получить информацию о аутентифицированном пользователе" показано, как это сделать из Серверный код .NET с использованием HttpClient для выполнения вызова с помощью AccessToken:

var fbRequestUrl = "https://graph.facebook.com/me/feed?access_token=" 
        + credentials.AccessToken;

Поскольку у мобильного клиента есть accessToken, который мы получаем от MobileServices, может ли клиент сделать вызов непосредственно на конечную точку Facebook, или клиентский SDK предоставляет нам какие-либо встроенные функции?

Я следил за проектом Xamarin.Forms Sport и тем, как они получают информация о пользователе от Google жестко закодирована в конечной точке Google и сделать звонок, чтобы получить информацию о пользователе.

Примечание. Xamarin.Forms Sport использует мобильные службы, а не мобильное приложение, поэтому не уверен, что это имеет значение.


person Cloud SME    schedule 05.02.2016    source источник


Ответы (1)


Похоже, вы выполняете вход в систему, управляемый сервером: вы звоните своему бэкэнду, чтобы танцевать вход в систему с Facebook. В этом случае ваше клиентское приложение выполняет вызов GET для .auth/login/facebook, который открывает браузер или Web Authentication Broker, где вы вводите свои учетные данные. В результате вы получите токен доступа Zumo (отличный от токена доступа Facebook).

Вы не можете использовать токен доступа Zumo для доступа к API Facebook самостоятельно. В «Как:», на который вы ссылаетесь, мы покажем вам, как использовать GetAppServiceIdentityAsync из серверной части, чтобы получить токен доступа Facebook. Это возможно, потому что вы сохранили свой идентификатор клиента Facebook через портал, который доступен для серверной части.

Преимущество такой аутентификации заключалось в том, что вам не нужно развертывать свой идентификатор клиента Facebook с вашими мобильными приложениями. Однако если вы хотите получить доступ к API Facebook из клиента, вам необходимо передать токен Facebook клиенту.

Несколько способов могу предложить:

  1. Позвоните .auth/me из вашего клиента. В ответ вы получите объект JSON, который вы можете проанализировать и который должен включать токен FB, связанный с вашим токеном Zumo.

  2. Напишите собственный API с набором атрибутов [Authorize], который будет выполнять GetAppServiceIdentityAsync и отвечать значением токена доступа facebook. Затем вы можете проанализировать ответ от вашего клиента. Это в основном то, что делает .auth/me, но вы можете написать его, чтобы вернуть только ваш токен доступа FB.

  3. Используйте Facebook .NET SDK http://facebooksdk.net/ для входа в систему с помощью клиента. Вы получите токен Facebook на своем клиенте, а затем сможете использовать наш метод LoginAsync(Facebook, access_token) для получения токена Zumo, чтобы ваш клиент мог получить доступ как к Facebook, так и к серверной части вашего мобильного приложения. Недостаток, как я упоминал ранее, заключается в том, что вам придется развернуть свой идентификатор клиента FB с вашим приложением.

person Aziel    schedule 05.02.2016
comment
Я понятия не имел, что токен не был токеном доступа к Facebook! Мне больше всего нравится подход №1. Итак, получив токен доступа FB, я звоню на graph.facebook.com/me конечная точка от клиента для получения информации о пользователе? - person Cloud SME; 06.02.2016
comment
И последний вопрос: если срок действия токена доступа FB истек, как мне получить новый токен доступа с помощью токена обновления? - person Cloud SME; 07.02.2016
comment
Привет, Квети. В настоящее время мы не поддерживаем обновление для Facebook. Причина в том, что токены, которые мы получаем от facebook, являются расширенными токенами. В настоящее время нет поддержки обновления расширенных токенов. Перейдите по этой ссылке для получения дополнительной информации о расширенных токенах: link . Похоже, что после истечения срока действия продления ваш пользователь снова войдет в систему, но ему не нужно будет повторно вводить учетные данные. - person Aziel; 08.02.2016