Windows8 Metro应用中Facebook 功能的简单应用
来源:互联网 发布:大数据的真实性 编辑:程序博客网 时间:2024/06/10 15:00
最近在学习Windows8 Metro应用的开发, 由于是本职是iOS开发,所以很多切入点都是参照iOS平台。
iOS应用中,经常会加入Facebook 、Twitter、微博等交互相关功能,因此首先就研究了一下在Windows8 Metro平台下相对应功能的实现方法。
iOS平台上Facebook功能的实现很方便,直接使用Facebook 官方的SDK For iOS就可以了,但对于Windows8 Metro环境,目前没有官方SDK。
这里用到了第三方开发的开源包Facebook C# SDK, 能够支持.Net Framework3.5、.Net Framework4.0、.Net Framework4.5、
Windows 8 Store Apps、Silverlight 5、Windows Phone 7.1 (Mango)。
开发者提供了通俗易懂的实例程序facebook-windows8-sample。
在运行程序以前,注意需要先将FacebookLoginPage.xaml.cs文件中的AppId的值设定为你为自己的应用所申请的值。
否则,运行时会直接变成网页版的Facebook,而不会调用到应用的画面。
程序结构非常简单,HomePage只有一个按钮,点击迁移到FacebookLoginPage画面,准备用户登录Facebook。
登录完成后,会提示用户许可3操作权限:
- user_about_me
- read_stream
- publish_stream
之后,就到了FacebookInfoPage,可以向涂鸦墙上发送文字信息。
关键的实现代码:
FacebookLoginPage.xaml.cs
使用AppId并指定附加权限extendedPermissions,请求facebook认证页面。
private Uri GetFacebookLoginUrl(string appId, string extendedPermissions) { dynamic parameters = new ExpandoObject(); parameters.client_id = appId; parameters.redirect_uri = "https://www.facebook.com/connect/login_success.html"; parameters.response_type = "token"; parameters.display = "popup"; // add the 'scope' parameter only if we have extendedPermissions. if (!string.IsNullOrWhiteSpace(extendedPermissions)) { // A comma-delimited list of permissions parameters.scope = extendedPermissions; } return _fb.GetLoginUrl(parameters); }
用户登录后,验证登录成功与否,成功的场合取得acsessToken字串,迁移到FacebookInfoPage画面。
private void WebView1_LoadCompleted(object sender, Windows.UI.Xaml.Navigation.NavigationEventArgs e) { FacebookOAuthResult oauthResult; if (!_fb.TryParseOAuthCallbackUrl(e.Uri, out oauthResult)) { return; } if (oauthResult.IsSuccess) { var accessToken = oauthResult.AccessToken; LoginSucceded(accessToken); } else { // user cancelled } } private async void LoginSucceded(string accessToken) { dynamic parameters = new ExpandoObject(); parameters.access_token = accessToken; parameters.fields = "id"; dynamic result = await _fb.GetTaskAsync("me", parameters); parameters = new ExpandoObject(); parameters.id = result.id; parameters.access_token = accessToken; Frame.Navigate(typeof(FacebookInfoPage), (object)parameters); }
FacebookInfoPage.xaml.cs
这份代码中主要实现取得了用户的一些信息以及发送文字信息的功能。取得信息的功能不再赘述,主要看看发送功能的实现。
如果只需要单纯发送文字信息,只需要向message项目内设定文字串就可以很简单地实现:
private async void PostToWall_Click(object sender, RoutedEventArgs e) { try { dynamic parameters = new ExpandoObject(); parameters.message = txtMessage.Text; dynamic result = await _fb.PostTaskAsync("me/feed", parameters); _lastMessageId = result.id; txtMessage.Text = string.Empty; btnDeleteLastMessage.IsEnabled = true; } catch (FacebookApiException ex) { // handle error message } }
当需要上传网络图片时,相似的对picture项目设定图片的URL就可以实现:
private async void PostToWall_Click(object sender, RoutedEventArgs e) { try { dynamic parameters = new ExpandoObject(); parameters.message = txtMessage.Text; parameters.picture = "http://idea1983.com/wp-content/uploads/2011/08/clip_image0312.jpg"; dynamic result = await _fb.PostTaskAsync("me/feed", parameters); _lastMessageId = result.id; txtMessage.Text = string.Empty; btnDeleteLastMessage.IsEnabled = true; } catch (FacebookApiException ex) { // handle error message } }
当需要上传本地图片是,稍微麻烦一点,首先将本地文件读取成为byte数组,然后通过picture或者source项目,发送到me/photos。
下面的代码演示了 从项目中的文件夹读取图片后上传:
private async void PostToWall_Click(object sender, RoutedEventArgs e) { try { dynamic parameters = new ExpandoObject(); parameters.message = txtMessage.Text; StorageFile imageFile = await Windows.Storage.StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///Assets/pcz.jpg")); IRandomAccessStream fileStream = await imageFile.OpenAsync(FileAccessMode.Read); var reader = new Windows.Storage.Streams.DataReader(fileStream.GetInputStreamAt(0)); await reader.LoadAsync((uint)fileStream.Size); byte[] pixels = new byte[fileStream.Size]; reader.ReadBytes(pixels); parameters.picture = new FacebookMediaObject { ContentType = "image/jpeg", FileName = "pcz.jpg", }.SetValue(pixels); dynamic result = await _fb.PostTaskAsync("me/photos", parameters); _lastMessageId = result.id; txtMessage.Text = string.Empty; btnDeleteLastMessage.IsEnabled = true; } catch (FacebookApiException ex) { // handle error message } }
在应用程序中队Facebook功能的调用,最常见的就是以上的几个功能了,其实这个SDK支持的远远不止这些,接下来在运用中,还需要好好发掘学习。
- Windows8 Metro应用中Facebook 功能的简单应用
- Windows8 Metro应用中使用Twitter功能简介
- Windows8 Metro/Modern 官方应用
- windows8开发-metro应用中页面渐入效果(透明度)
- Windows 8 Metro应用中 Google Analytics功能的使用
- 解决windows8 metro应用不能联网
- windows8开发-metro应用之Popup窗口
- windows8开发-metro应用中使用xml+json作为数据存储方式
- Windows8.1 中MultipleViews的应用
- windows8开发-关于wp7应用迁移到win8 metro风格
- windows8开发-关于wp7应用迁移到win8 metro风格
- 用javascript创建第一个windows8 metro应用
- Windows 8 Metro应用中使用调摄像头截图、截视频的功能
- 在Metro风格的Windows 8应用中试用SQLite
- 在windows8 metro中计算TextBox的实际宽度ActualWidth
- 跟燕青一起学Windows8应用开发:创建HTML5 Metro应用程序
- Metro 风格应用的导航设计
- 尝试开发METRO-UI的企业应用
- 胡锦涛就西哈努克去世向柬埔寨国王太后致唁电-西哈努克太皇-柬埔寨独立-西哈努克
- 移动互联网的杀手级应用在哪里--技术篇
- 关于Android SDK manager 更新缓慢的问题解决啦
- 并发和并行的区别
- framebuffer的fb文件open失败解决方法
- Windows8 Metro应用中Facebook 功能的简单应用
- 用户口令管理(profile)
- jQuery中extend和fn.extend
- 莫言被央视追问“你幸福吗” 回答:我不知道-你幸福吗-我不知道-莫言
- 如何去掉IE8浏览器中的Bing搜索栏
- Linux内核0.12——8086中断
- android 当工程建立完成以后不要给生成的java文件改名字
- 菜鸟眼中的silverlight
- ExtJs资料