admin管理员组

文章数量:1536750

Windows 10 UWP/Mobile 的微博分享实现

  前一阵做关于西邮图书馆的分享,目前已经完成,微信,微博,还有本机的共享,微博分享差点恶心死我了,关键没有SDK,更可恶的是, 没有Windows Phone 的SDK。但是人家怎么做手机端分享的,例如IT之家。有次不小心,关注了一个网址 http://wwwblogs/ms-uap ,这是微软UAP团队的博客园地址,在里面看到关于微博分享的实现,大家可以去看看。我自己按照他们做了一部分,但是有一些部分没有做,就实现了微博分享。

第一步

  下载微博SDK源码,既然新浪不给咱们手机做SDK,那咱们自己做,源码网址:http://weibowinrtsdk.codeplex/SourceControl/latest
进入之后,看到这部分

Download 下载下来,当你下载之后,先解压,打开

选中项目。我用的是VS2015,如果你打开,这个时候VS有这个界面提醒

因为新浪微博做的是Windows 8 基于Runtime实现的,开发人员应该了解,8.1/phone8.1都可以用Runtime的,还有自我感觉Windows 10能用8.1很多东西,所以就尝试,把8.0的SDK定位到8.1。很多事情尝试之后才能知道。

下来开始定位到8.1。

继续右键属性


目标,点击更改是不是,有我们想要的东西呢?哈哈选择Windows Phone 8.1/Windows 8.1,

看看现在变成了可移植的了。
这样,手机和PC都能用了,可是基于Windows 10是,全平台的,万一不能用怎么办呢,咱们试试么,如果你得应用程序要发布,选择Release,不要选择Debug。然后在生成里面 选择生成解决方案,生成 WeiboSDK。

下来另建一个工程项目,我就以我自己的项目 西邮图书馆为例,在 引用哪里添加引用,然后浏览你的自制WeiBoSDK,如果你是Debug模式下生成的SDK,就在你的SDK路径下找bin/Debug文件夹,如果是Release,就找相对应的文件夹


然后就直接引用SDK就行了。

下来我们正式的开启代码之旅了。
我在分享的页面 OnNavigatedTo方法重写,实现一下代码` ,这里就是进入页面,如果没有实现授权,首先授权,然后才能分享,如果授权,不弹出授权界面

ClientOAuth oauthClient = new ClientOAuth();
// 判断是否已经授权或者授权是否过期.
if (oauthClient.IsAuthorized == false)
{
oauthClient.LoginCallback += (isSucces, err, response) =>
{

                if (isSucces)
                {
                   //这里是授权回调成功的执行代码
                }
                else
                {
                   //授权失败 回调执行代码
                }
            };
            oauthClient.BeginOAuth();//异步方法,如果需要在之后执行代码,请加到上面的LoginCallback中
        }`

然后实现分享功能,在分享按钮,我实现如下代码

  private async void ShareWeiBo()
        {

            Autho();
            await Task.Delay(1000);
            try
             {                
                SdkResponse result = null;
                var engine = new SdkNetEngine();
                //如果没有图片,则发送文字消息
                if (!string.IsNullOrWhiteSpace(info[1]))
                {
                    //微博分享图文消息,图片URI必须在本地,所以只能先下载
                    List<byte> arrayByte = new List<byte>();

                    var photoStorageFile = await KnownFolders.PicturesLibrary.CreateFileAsync("scan.jpg", CreationCollisionOption.ReplaceExisting);
                    //开始异步下载图片
                    HttpClient client = new HttpClient();
                    Stream stream = await client.GetStreamAsync(info[1]);
                    byte[] buffer = new byte[1000];
                    int read = 0;
                    while ((read = stream.Read(buffer, 0, 1000)) > 0)
                    {
                        arrayByte.AddRange(buffer);
                    }
                    await FileIO.WriteBytesAsync(photoStorageFile, arrayByte.ToArray());
                    var status = await CachedFileManager.CompleteUpdatesAsync(photoStorageFile);

                    client.Dispose();
                    stream.Dispose();

                    if (status == Windows.Storage.Provider.FileUpdateStatus.Complete)
                    {
                    //带有图片的分享
                        ISdkCmdBase cmdBase = new WeiboSDKForWinRT.CmdPostMsgWithPic()
                        {
                            Status =info[0],
                            /*这里是图片的URI,记得,图片URI一定是你本机的图片路径,也就是说,如果网上有一张图片,你必须下载下来,然后获取路径*/
                            PicPath = photoStorageFile.Path
                        };
                        result = await engine.RequestCmd(SdkRequestType.POST_MESSAGE_PIC, cmdBase);

                        await photoStorageFile.DeleteAsync(StorageDeleteOption.PermanentDelete);
                    }
                }
                else
                {
                //不带有图片的分享
                    ISdkCmdBase cmdBase = new WeiboSDKForWinRT.CmdPostMessage()
                    {
                        Status = info[0]                    
                    };
                    result = await engine.RequestCmd(SdkRequestType.POST_MESSAGE, cmdBase);
                }

                if (result.errCode == SdkErrCode.SUCCESS)
                {
                    TB_Prompt.Text = "分享成功";
                    PromptStoryboard.Begin();
                }
                else if (result.errCode == SdkErrCode.NET_UNUSUAL)
                {
                    TB_Prompt.Text = "网络不可用";
                    PromptStoryboard.Begin();
                }
                else if (result.errCode == SdkErrCode.SERVER_ERR)
                {
                    TB_Prompt.Text = "服务器异常";

                }
                else if (result.errCode == SdkErrCode.TIMEOUT)
                {
                    TB_Prompt.Text = "发送超时";

                }
                else
                {
                    TB_Prompt.Text = "分享失败";

                }
            }
            catch(Exception ex)
            {
                TB_Prompt.Text = "分享失败";

            }


        }

对了,在授权之前,一定要进行密钥初始化,密钥申请,可以去新浪开放平台

 private void InitData()
        {
            // TODO:编译运行之前需要开放平台参数.

            SdkData.AppKey = "";

            SdkData.AppSecret = "";

            //一般这个不需要更改的
            SdkData.RedirectUri = "https://api.weibo/oauth2/default.html";

        }

手机运行效果图


PC运行效果图


最后给大家分享一下我做这个SDK,查询的资料,都是链接

微软UAP的微博分享资料

http://wwwblogs/ms-uap/p/4222425.html

一个网上大牛写的(我是小菜鸟嘎嘎)

http://blog.csdn/xiahn1a/article/details/49026627

最后感谢他们分享的知识。

本文标签: WindowsMobileUWP