Pull to refresh

Работа с Facebook API из приложений UWP

Development of mobile applicationsDevelopment for Windows PhoneFacebook APIDevelopment for Windows

Люди, как правило, существа очень забывчивые. Для того чтобы не заставлять пользователей запоминать новый пароль при регистрации в вашем приложении UWP, можно использовать аккаунты сторонних платформ. При этом, можно не заставляя заполнять длиннющие анкеты получить доступ к какой-либо полезной информации и характеристикам пользователя. О том, что публикация контента в социальных сетях повышает конверсию даже и упоминать не буду, это и так понятно. Если хотите разобраться, как работать с самой пока что популярной сетью в мире из C#/XAML приложений UWP, не куря мануалы, то добро пожаловать под кат.

Создание связи приложения Facebook с приложением UWP


Для того, чтобы приложение UWP могло работать с Facevook API нужно создать приложение Facebook. Это делается через портал https://developers.facebook.com/apps/ нажатием кнопки "+ Добавьте новое приложение"



Заполняем поля названия приложения и контактного адреса, а также классифицируем приложение, выбрав категорию.



Далее нам необходима функция входа через facebook



Выстраиваем переключатели таким образом, чтобы как минимум клиентская авторизация OAuth, веб-авторизация OAuth и авторизация OAuth, встроенная в браузер были включены



и выбираем платформу, нажав на platform settings



Получаем окошко:



в котором выбираем Приложение для Windows

Теперь можно сделать какие-то настройки, но они не критичные. Зато впоследствии понадобится идентификатор приложения facebook.



То, что нам действительно нужно заполнить, находится немного ниже:



Значение идентификатора безопасности магазина Windows (SID) можно получить разными способами.
Более простой способ это из кода с помощью:

WebAuthenticationBroker.GetCurrentApplicationCallbackUri().ToString();

Эта строка вернет нам ms-app://SID (ms-app:// необходимо будет удалить)

Второй способ требует, чтобы приложение было связано с Store. В таком случае можно зайти в панель управления, далее в App management приложения и выбрать App identity. Значение PackageSID это и есть то, что нужно.



Работа с Facebook API с помощью Windows SDK for Facebook


Используем библиотеку от Microsoft с труднопроизносимым сокращенным названием winsdkfb. Полное название выговорить гораздо проще — Windows SDK for Facebook. Это самый удобный способ использовать API фейсбука из приложений UWP. Скачать и установить ее можно с NuGet

В C# код страницы XAML добавим пространство имен

using winsdkfb;

Код аутентификации такой:

     string[] requested_permissions = {"public_profile", "email", "user_friends"};

     FBSession session = FBSession.ActiveSession;
     session.WinAppId = WebAuthenticationBroker.GetCurrentApplicationCallbackUri().ToString();
     session.FBAppId = "229583744102151";

     FBPermissions permissions = new FBPermissions(requested_permissions);
     FBResult result = await session.LoginAsync(permissions);
     if (result.Succeeded)
     {
        // здесь мы можем что-то полезное сделать
     }
     else
     {
	// не получилось получить доступ к аккаунту facebook
     }

Первая строка задает разрешения, доступ к которым получит приложение. В примере упомянуто 3 разрешения, на которые facebook не запрашивает дополнительных подтверждений пользователя.
Полный список находится по ссылке Справка по разрешениям: «Вход через Facebook»
Два параметра, которые необходимо задать для подключения, это уже упомянутый SID и идентификатор созданного приложения facebook.

В результате получим следующее встроенное окно:



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

     FBSession sess = FBSession.ActiveSession;
     await sess.LogoutAsync();

Простые данные пользователя можно получить из объекта session.User

     string username = session.User.Name; // имя пользователя
     string locale = session.User.Locale; // локаль пользователя

Что можно сделать полезное? Например, можно добавить в свое приложение возможность размещения в ленту сообщения с результатом/рекордом игры или приглашением присоединиться

     PropertySet parameters = new PropertySet();
     parameters.Add("title", "Угадай MP3");
     parameters.Add("link", "https://www.microsoft.com/ru-ru/store/p/Угадай-mp3/9wzdncrdkwgv");
     parameters.Add("description", "Прикольная игра а-ля угадай мелодию для компании");
     parameters.Add("message", "Попробуй тоже эту прикольную игру");
 
     string path = "/" + session.User.Id + "/feed";

     var factory = new FBJsonClassFactory(s =>
     {
         return JsonConvert.DeserializeObject<FBReturnObject>(s);
     });

     var singleValue = new FBSingleValue(path, parameters, factory);
     var fbresult = await singleValue.PostAsync();
     if (fbresult.Succeeded)
     {
         var response = fbresult.Object as FBReturnObject;
     }
     else
     {
         // Попытка запостить оказалась неудачной
     }

Данный сниппет выполняется в случае, если if (result.Succeeded) возвращает true (то есть после успешной аутентификации). Он использует популярный парсер JSON под названием NewtonSoft.JSON, который нужно установить из NuGet.

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

     public class FBReturnObject
     {
         public string Id { get; set; }
         public string Post_Id { get; set; }
     }

Есть вариант разместить сообщение в ленте, при этом отобразив диалоговое окно, в котором пользователь сможет добавить комментарий. Код немного проще:

     PropertySet parameters = new PropertySet();
     parameters.Add("title", "ТесТ");
     parameters.Add("link", "https://www.microsoft.com/ru-RU/store/p/take-a-test/9wzdncrdkwgx");
     parameters.Add("description", "Нескучная программа для проведения тестирований");
     parameters.Add("message", "Я прошел тест с отличным результатом");
         
     FBResult fbresult = await session.ShowFeedDialogAsync(parameters);
     if (fbresult.Succeeded)
     {
         var response = fbresult.Object as FBReturnObject;
     }
     else
     {
         // Попытка запостить оказалась неудачной
     }

С помощью следующего небольшого сниппета, пользователь может отправить ссылку кому-нибудь из друзей и добавить к ней какое-либо сообщение:

     PropertySet parameters = new PropertySet();
     parameters.Add("link", "http://www.habrahabr.ru");
     FBResult fbresult = await session.ShowSendDialogAsync(parameters);

Примеры приложений, использующих winsdkfb, находятся на GitHub, но для C# пока что пример только один и то не особо понятный.

Более-менее нормальная документация находится по ссылке
В частности кроме уже рассмотренных способов взаимодействия с fb рассматриваются следующие возможности: загрузка фото/видео, отправка приглашения друзьям (только для игр), лайк какого-либо объекта или ссылки.
Tags:facebook apiwindows 10uwpC#xamlfacebookфейсбук
Hubs: Development of mobile applications Development for Windows Phone Facebook API Development for Windows
Total votes 17: ↑16 and ↓1 +15
Views11.2K

Popular right now

  • Ugly API

    Total votes 1: ↑1 and ↓0 +1
    Views1.1K
    Comments 0

Top of the last 24 hours