知名遊戲不做、知名應用軟體的團隊也不願意做,或是做半套意思意思就好,
連 Facebook 也沒有官方的 SDK 可以用,
如果在 Windows Phone 上面想要介接 Facebook 的服務,目前沒有官方 SDK 可以用,
最辛苦的方式就是自己接 Facebook API,再來偷懶一點可以選擇 Facebook C# SDK
這裡簡單的示範怎麼在 Windows Phone 的應用程式中使用 Facebook C# SDK
並且示範如何利用該 SDK 來達到登入、發佈動態消息的流程,
當然, Facebook C# SDK 不是官方的,但它也是非常多人選用的開源程式庫,
安裝程式庫套件的方法很多,這裡僅記錄最簡單的使用 NuGet 安裝,
如果 Visual Studio 還沒有安裝 NuGet 可以在 Extension Manager 裡面找到。
先看一下這次的主角,Facebook C# SDK
http://csharpsdk.org/
http://nuget.org/packages/Facebook/
原始碼可在此下載:https://github.com/facebook-csharp-sdk/facebook-csharp-sdk
有了 NuGet 後,在欲加入 C# Facebook SDK 的專案按右鍵,點選管理 NuGet 套件,
在線上搜尋 facebook 後,左側搜尋結果會列出多項結果,
安裝名為 Facebook 的套件,應該會在第一個,icon 上印著 fb C#
此時 Facebook SDK 應該就會出現在專案參考之中,
接下來就可以利用 Facebook namespace 下的類別介接 facebook api
基本上大多數的功能都集中在 FacebookClient 這個類別裡,
以下是一個簡單的登入、更新動態範例
MainPage.xaml 中我放置了兩個按鍵,一個用來顯示 facebook 網頁的 WebBrowser 元件
<phone:PhoneApplicationPage
x:Class="FacebookEx.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:controls="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
mc:Ignorable="d" d:DesignWidth="480" d:DesignHeight="768"
FontFamily="{StaticResource PhoneFontFamilyNormal}"
FontSize="{StaticResource PhoneFontSizeNormal}"
Foreground="{StaticResource PhoneForegroundBrush}"
SupportedOrientations="Portrait" Orientation="Portrait"
shell:SystemTray.IsVisible="True">
<StackPanel x:Name="ContentPanel" Margin="12,0,12,0">
<Button Content="Login" Click="OnLoginButtonClick"/>
<Button Content="Post" Click="OnPostButtonClick"/>
<controls:WebBrowser Height="500" x:Name="Browser"/>
</StackPanel>
</phone:PhoneApplicationPage>
MainPage.xaml.cs 針對按鍵做處理,並處理 WebBrowser 的導覽過程
public partial class MainPage : PhoneApplicationPage
{
public const String FACEBOOK_APP_ID = "1357902468";
public readonly String[] PERMISSIONS = new String[] { "email", "publish_stream", "user_about_me", "publish_actions" };
private String _accessToken;
private FacebookClient _facebook = new FacebookClient();
public MainPage()
{
InitializeComponent();
Browser.Navigated += OnWebBrowserNavigated;
}
private void OnLoginButtonClick(object sender, RoutedEventArgs e)
{
Dictionary<String, Object> parameters = new Dictionary<String, Object>();
parameters.Add("client_id", FACEBOOK_APP_ID);
parameters.Add("response_type", "token");
parameters.Add("display", "touch");
parameters["redirect_uri"] = "https://www.facebook.com/connect/login_success.html";
String scope = String.Join(",", PERMISSIONS);
parameters["scope"] = scope;
Uri loginUrl = _facebook.GetLoginUrl(parameters);
Browser.Navigate(loginUrl);
}
private void OnWebBrowserNavigated(object sender, System.Windows.Navigation.NavigationEventArgs e)
{
FacebookOAuthResult result;
Boolean bSuccess = _facebook.TryParseOAuthCallbackUrl(e.Uri, out result);
if (bSuccess)
{
_accessToken = result.AccessToken;
}
}
private void OnPostButtonClick(object sender, RoutedEventArgs e)
{
FacebookClient facebook = new FacebookClient(_accessToken); // 使用 Token 建立一個 FacebookClient
var parameters = new Dictionary<String, Object>();
facebook.PostCompleted += OnFacebookPostCompleted;
parameters["message"] = "Test Post (Windows Phone)";
facebook.PostAsync("me/feed", parameters);
}
private void OnFacebookPostCompleted(object sender, FacebookApiEventArgs e)
{
// 發文成功
}
}
沒有留言:
張貼留言