Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Social Framework предоставляет единый API для взаимодействия с социальными сетями, включая Twitter и Facebook, а также SinaWeibo для пользователей в Китае.
Использование Social Framework позволяет приложениям взаимодействовать с социальными сетями из одного API без необходимости управлять проверкой подлинности. Он включает в себя системный контроллер представления для создания записей, а также абстракции, которая позволяет использовать API каждой социальной сети по протоколу HTTP.
Подключение в Twitter
Учетная запись Twitter Параметры
Чтобы подключиться к Twitter с помощью Социальной платформы, необходимо настроить учетную запись в параметрах устройства, как показано ниже:
После ввода и проверки учетной записи с помощью Twitter любое приложение на устройстве, использующее классы Social Framework для доступа к Twitter, будет использовать эту учетную запись.
Отправка твитов
Социальная платформа включает в себя контроллер, который SLComposeViewController представляет системное представление для редактирования и отправки твита. На следующем снимка экрана показан пример этого представления:
Чтобы использовать SLComposeViewController Twitter, необходимо создать экземпляр контроллера, вызвав FromService метод, SLServiceType.Twitter как показано ниже:
var slComposer = SLComposeViewController.FromService (SLServiceType.Twitter);
SLComposeViewController После возврата экземпляра его можно использовать для представления пользовательского интерфейса для публикации в Twitter. Однако первое, что нужно сделать, — проверка доступность социальной сети, Twitter в этом случае путем вызоваIsAvailable:
if (SLComposeViewController.IsAvailable (SLServiceKind.Twitter)) {
...
}
SLComposeViewController никогда не отправляет твит напрямую без взаимодействия с пользователем. Однако его можно инициализировать с помощью следующих методов:
SetInitialText— добавляет исходный текст для отображения в твите.AddUrl— добавляет URL-адрес в твит.AddImage— добавляет изображение в твит.
После инициализации вызов PresentVIewController отображает представление, созданное элементом SLComposeViewController. Затем пользователь может изменить и отправить твит или отменить отправку. В любом случае контроллер должен быть уволен в том CompletionHandlerместе, где результат также может быть проверка, чтобы узнать, был ли твит отправлен или отменен, как показано ниже:
slComposer.CompletionHandler += (result) => {
InvokeOnMainThread (() => {
DismissViewController (true, null);
resultsTextView.Text = result.ToString ();
});
};
Пример твита
Следующий код демонстрирует использование SLComposeViewController представления, используемого для отправки твита:
using System;
using Social;
using UIKit;
namespace SocialFrameworkDemo
{
public partial class ViewController : UIViewController
{
#region Private Variables
private SLComposeViewController _twitterComposer = SLComposeViewController.FromService (SLServiceType.Twitter);
#endregion
#region Computed Properties
public bool isTwitterAvailable {
get { return SLComposeViewController.IsAvailable (SLServiceKind.Twitter); }
}
public SLComposeViewController TwitterComposer {
get { return _twitterComposer; }
}
#endregion
#region Constructors
protected ViewController (IntPtr handle) : base (handle)
{
}
#endregion
#region Override Methods
public override void ViewWillAppear (bool animated)
{
base.ViewWillAppear (animated);
// Update UI based on state
SendTweet.Enabled = isTwitterAvailable;
}
#endregion
#region Actions
partial void SendTweet_TouchUpInside (UIButton sender)
{
// Set initial message
TwitterComposer.SetInitialText ("Hello Twitter!");
TwitterComposer.AddImage (UIImage.FromFile ("Icon.png"));
TwitterComposer.CompletionHandler += (result) => {
InvokeOnMainThread (() => {
DismissViewController (true, null);
Console.WriteLine ("Results: {0}", result);
});
};
// Display controller
PresentViewController (TwitterComposer, true, null);
}
#endregion
}
}
Вызов API Twitter
Социальная платформа также включает поддержку отправки HTTP-запросов в социальные сети. Он инкапсулирует запрос в SLRequest классе, который используется для назначения API конкретной социальной сети.
Например, следующий код отправляет запрос на Twitter для получения общедоступного временная шкала (путем расширения кода, указанного выше):
using Accounts;
...
#region Private Variables
private ACAccount _twitterAccount;
#endregion
#region Computed Properties
public ACAccount TwitterAccount {
get { return _twitterAccount; }
}
#endregion
#region Override Methods
public override void ViewWillAppear (bool animated)
{
base.ViewWillAppear (animated);
// Update UI based on state
SendTweet.Enabled = isTwitterAvailable;
RequestTwitterTimeline.Enabled = false;
// Initialize Twitter Account access
var accountStore = new ACAccountStore ();
var accountType = accountStore.FindAccountType (ACAccountType.Twitter);
// Request access to Twitter account
accountStore.RequestAccess (accountType, (granted, error) => {
// Allowed by user?
if (granted) {
// Get account
_twitterAccount = accountStore.Accounts [accountStore.Accounts.Length - 1];
InvokeOnMainThread (() => {
// Update UI
RequestTwitterTimeline.Enabled = true;
});
}
});
}
#endregion
#region Actions
partial void RequestTwitterTimeline_TouchUpInside (UIButton sender)
{
// Initialize request
var parameters = new NSDictionary ();
var url = new NSUrl("https://api.twitter.com/1.1/statuses/user_timeline.json?count=10");
var request = SLRequest.Create (SLServiceKind.Twitter, SLRequestMethod.Get, url, parameters);
// Request data
request.Account = TwitterAccount;
request.PerformRequest ((data, response, error) => {
// Was there an error?
if (error == null) {
// Was the request successful?
if (response.StatusCode == 200) {
// Yes, display it
InvokeOnMainThread (() => {
Results.Text = data.ToString ();
});
} else {
// No, display error
InvokeOnMainThread (() => {
Results.Text = string.Format ("Error: {0}", response.StatusCode);
});
}
} else {
// No, display error
InvokeOnMainThread (() => {
Results.Text = string.Format ("Error: {0}", error);
});
}
});
}
#endregion
Давайте подробно рассмотрим этот код. Во-первых, он получает доступ к Магазину учетных записей и получает тип учетной записи Twitter:
var accountStore = new ACAccountStore ();
var accountType = accountStore.FindAccountType (ACAccountType.Twitter);
Затем он спрашивает пользователя, может ли ваше приложение иметь доступ к учетной записи Twitter и, если доступ предоставлен, учетная запись загружается в память и обновленный пользовательский интерфейс:
// Request access to Twitter account
accountStore.RequestAccess (accountType, (granted, error) => {
// Allowed by user?
if (granted) {
// Get account
_twitterAccount = accountStore.Accounts [accountStore.Accounts.Length - 1];
InvokeOnMainThread (() => {
// Update UI
RequestTwitterTimeline.Enabled = true;
});
}
});
Когда пользователь запрашивает данные временная шкала (нажав кнопку в пользовательском интерфейсе), приложение сначала формирует запрос на доступ к данным из Twitter:
// Initialize request
var parameters = new NSDictionary ();
var url = new NSUrl("https://api.twitter.com/1.1/statuses/user_timeline.json?count=10");
var request = SLRequest.Create (SLServiceKind.Twitter, SLRequestMethod.Get, url, parameters);
Этот пример ограничивает возвращенные результаты последними десятью записями, включив ?count=10 в URL-адрес. Наконец, он присоединяет запрос к учетной записи Twitter (которая была загружена выше) и выполняет вызов Twitter для получения данных:
// Request data
request.Account = TwitterAccount;
request.PerformRequest ((data, response, error) => {
// Was there an error?
if (error == null) {
// Was the request successful?
if (response.StatusCode == 200) {
// Yes, display it
InvokeOnMainThread (() => {
Results.Text = data.ToString ();
});
} else {
// No, display error
InvokeOnMainThread (() => {
Results.Text = string.Format ("Error: {0}", response.StatusCode);
});
}
} else {
// No, display error
InvokeOnMainThread (() => {
Results.Text = string.Format ("Error: {0}", error);
});
}
});
Если данные были успешно загружены, необработанные данные JSON будут отображаться (как в примере выходных данных ниже):
В реальном приложении результаты JSON можно проанализировать как обычные и результаты, представленные пользователю. Дополнительные сведения о синтаксическом анализе JSON см. в статье "Введение в веб-службы ".
Подключение в Facebook
Учетная запись Facebook Параметры
Подключение на Facebook с социальной платформой почти идентичен процессу, используемому для Twitter, показанному выше. Учетная запись пользователя Facebook должна быть настроена в параметрах устройства, как показано ниже:
После настройки любое приложение на устройстве, использующее Social Framework, будет использовать эту учетную запись для подключения к Facebook.
Публикация в Facebook
Поскольку Social Framework — это единый API, предназначенный для доступа к нескольким социальным сетям, код остается почти идентичным независимо от используемой социальной сети.
Например, можно использовать именно так, SLComposeViewController как в приведенном ранее примере Twitter, единственное другое — переход на параметры и параметры, относящиеся к Facebook. Например:
using System;
using Foundation;
using Social;
using UIKit;
namespace SocialFrameworkDemo
{
public partial class ViewController : UIViewController
{
#region Private Variables
private SLComposeViewController _facebookComposer = SLComposeViewController.FromService (SLServiceType.Facebook);
#endregion
#region Computed Properties
public bool isFacebookAvailable {
get { return SLComposeViewController.IsAvailable (SLServiceKind.Facebook); }
}
public SLComposeViewController FacebookComposer {
get { return _facebookComposer; }
}
#endregion
#region Constructors
protected ViewController (IntPtr handle) : base (handle)
{
}
#endregion
#region Override Methods
public override void ViewWillAppear (bool animated)
{
base.ViewWillAppear (animated);
// Update UI based on state
PostToFacebook.Enabled = isFacebookAvailable;
}
#endregion
#region Actions
partial void PostToFacebook_TouchUpInside (UIButton sender)
{
// Set initial message
FacebookComposer.SetInitialText ("Hello Facebook!");
FacebookComposer.AddImage (UIImage.FromFile ("Icon.png"));
FacebookComposer.CompletionHandler += (result) => {
InvokeOnMainThread (() => {
DismissViewController (true, null);
Console.WriteLine ("Results: {0}", result);
});
};
// Display controller
PresentViewController (FacebookComposer, true, null);
}
#endregion
}
}
При использовании с Facebook SLComposeViewController отображается представление, которое выглядит почти идентично примеру Twitter, показывающее Facebook в качестве названия в этом случае:
Вызов API Graph Для Facebook
Как и в примере Twitter, объект Social Framework SLRequest можно использовать с API графа Facebook. Например, следующий код возвращает сведения из API графа об учетной записи Xamarin (путем расширения кода, указанного выше):
using Accounts;
...
#region Private Variables
private ACAccount _facebookAccount;
#endregion
#region Computed Properties
public ACAccount FacebookAccount {
get { return _facebookAccount; }
}
#endregion
#region Override Methods
public override void ViewWillAppear (bool animated)
{
base.ViewWillAppear (animated);
// Update UI based on state
PostToFacebook.Enabled = isFacebookAvailable;
RequestFacebookTimeline.Enabled = false;
// Initialize Facebook Account access
var accountStore = new ACAccountStore ();
var options = new AccountStoreOptions ();
var options.FacebookAppId = ""; // Enter your specific Facebook App ID here
accountType = accountStore.FindAccountType (ACAccountType.Facebook);
// Request access to Facebook account
accountStore.RequestAccess (accountType, options, (granted, error) => {
// Allowed by user?
if (granted) {
// Get account
_facebookAccount = accountStore.Accounts [accountStore.Accounts.Length - 1];
InvokeOnMainThread (() => {
// Update UI
RequestFacebookTimeline.Enabled = true;
});
}
});
}
#endregion
#region Actions
partial void RequestFacebookTimeline_TouchUpInside (UIButton sender)
{
// Initialize request
var parameters = new NSDictionary ();
var url = new NSUrl ("https://graph.facebook.com/283148898401104");
var request = SLRequest.Create (SLServiceKind.Facebook, SLRequestMethod.Get, url, parameters);
// Request data
request.Account = FacebookAccount;
request.PerformRequest ((data, response, error) => {
// Was there an error?
if (error == null) {
// Was the request successful?
if (response.StatusCode == 200) {
// Yes, display it
InvokeOnMainThread (() => {
Results.Text = data.ToString ();
});
} else {
// No, display error
InvokeOnMainThread (() => {
Results.Text = string.Format ("Error: {0}", response.StatusCode);
});
}
} else {
// No, display error
InvokeOnMainThread (() => {
Results.Text = string.Format ("Error: {0}", error);
});
}
});
}
#endregion
Единственное реальное различие между этим кодом и версией Twitter, представленной выше, — это требование Facebook для получения конкретного идентификатора разработчика или приложения (который можно создать на портале разработчика Facebook), который необходимо задать в качестве параметра при выполнении запроса:
var options = new AccountStoreOptions ();
var options.FacebookAppId = ""; // Enter your specific Facebook App ID here
...
// Request access to Facebook account
accountStore.RequestAccess (accountType, options, (granted, error) => {
...
});
Сбой установки этого параметра (или использование недопустимого ключа) приведет к ошибке или без возврата данных.
Итоги
В этой статье показано, как использовать социальные платформы для взаимодействия с Twitter и Facebook. В нем показано, где настроить учетные записи для каждой социальной сети в параметрах устройства. Он также обсудил, как использовать SLComposeViewController единое представление для публикации в социальных сетях. Кроме того, он изучил SLRequest класс, используемый для вызова API каждой социальной сети.




