Windows8 Metro应用中Facebook 功能的简单应用

最近在学习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支持的远远不止这些,接下来在运用中,还需要好好发掘学习。 


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值