微博开放平台
微连接
移动应用
网站接入
电商服务商
电商商家
数据服务
数据服务
合作伙伴
微博支付
轻应用
粉丝服务
文档
推广
我的应用
登录
weibo
开发文档
首页
平台政策与指引
概述
平台公约
新手指南
开发者协议
应用运营管理规范
微连接分级管理办法
应用审核产品指南
应用安全开发注意事项
平台应用设计规范
微服务接入指南
微博登录接入
用微博帐号登录
授权机制
移动应用接入
移动应用介绍
移动应用SSO授权
微博Deep Link
媒体接入平台
头条文章开放接口
视频上传开放接口
电商接入平台
电商服务商接入
电商商家端接入
电商平台能力接口
粉丝服务平台
粉丝服务平台
新手接入指南
微信开发者迁移指南
接收消息
发送消息
自定义菜单
用户管理
生成带参数的二维码
Fans Service Platform
商业接口
商业数据接入指南
订阅服务手册(中文版)
订阅服务手册(英文版)
商业接口-REST API
商业数据常见问题
网站接入
网站接入介绍
微博API
微博API
接口访问频次权限
资源下载
SDK
微博标识下载
常见问题
联系我们
工具箱
链入页面
链出更改
特殊页面
查看源代码
跳转到:
导航
,
搜索
根据下列原因,你没有权限编辑本页:
您刚才请求的操作只有这个用户组中的用户才能使用:
用户
您可以查看并复制此页面的源代码:
==概述== 新浪微博Windows Phone 7平台官方SDK包提供给第三方开发者OAuth和xAuth两种登录方式、默认的发送/分享微博界面及其它Open API的URL请求,大大简化了第三方集成微博相关服务的难度。当前微博SDK开发包仅支持WP7芒果版Beta2 Refresh SDK开发环境。集成的OPEN API版本为V3版,支持XML和JSON两种数据交换格式,以后会随着OPEN API的版本升级而提高更新的微博SDK包。 ==授权模式== '''OAuth 授权:'''OAuth是一种常见的授权模式,用户可以更安全放心的使用用户身份,而不必把用户名和密码透露给第三方。而OAuth2.0是从2006年开始设计OAuth协议的下一个版本,OAuth2.0同时提供Web,桌面和移动应用程序的支持,并较1.0相比整个授权验证流程更简单更安全。也是新浪微博开放平台未来最主要的用户身份验证和授权方式。我们推荐用户使用OAuth2.0鉴权方式,微博SDK对OAuth2.0中的授权页方式和客户端方式(又称用户名密码方式)进行了封装,您只需简单的调用即可获得访问微博接口的授权密钥。 '''授权页方式:'''微博SDK中的 “AuthenticationView.xaml” 页面已经对OAuth2.0的授权网页的鉴权处理进行了封装。使用方法见:使用”SDK实例使用说明—OAuth鉴权” '''客户端方式:'''使用封装于 ”ClientOAuth” 中的 “GetAccessToken()” 和 “RefleshAccessToken()” 函数,详细用法见接口说明和“SDK实例使用说明” ==SDK使用说明== ===环境安装=== 安装Windows Phone 7相关开发环境 ===引入所需SDK类库=== 直接引入dll: 按默认的开发向导新建自己的开发工程,找到SinaBase.dll、WeiboSdk.dll两个文件并添加对它们的引用。 ==接口说明== 接口使用前需进行参数设置,详见 ”设置SDK所需参数” === OAuth2.0鉴权--获取access_token、reflesh_token=== 接口:ClientOAuth.GetAccessToken(string name, string passWord, OAuth2LoginBack callback) <table class="wiki_table" border="0" cellspacing="0" cellpadding="0"> <tr> <th class="wiki_table_thfirst">参数名称 </th><th>作用 </th></tr> <tr> <td class="wiki_table_tdfirst">name </td><td>用户名 </td></tr> <tr> <td class="wiki_table_tdfirst">passWord </td><td>密码 </td></tr> <tr> <td class="wiki_table_tdfirst">callBack </td><td>请求数据后的回调 </td></tr> </table> *1、 需向微博开发者平台申请客户端鉴权的权限方能使用。 *2、 Callback回调函数中已经对无网络、服务器发生的错误进行相应的返回。 ===OAuth2.0鉴权--用reflesh_token更新access_token=== 接口:ClientOAuth. RefleshAccessToken(string refleshCode, OAuth2LoginBack callBack) <table class="wiki_table" border="0" cellspacing="0" cellpadding="0"> <tr> <th class="wiki_table_thfirst">参数名称 </th><th>作用 </th></tr> <tr> <td class="wiki_table_tdfirst">refleshCode </td><td>刷新令牌 </td></tr> <tr> <td class="wiki_table_tdfirst">callBack </td><td>请求数据后的回调 </td></tr> </table> *1、 需向微博开发者平台申请客户端鉴权的权限方能使用。 *2、 Callback回调函数中已经对无网络、服务器发生的错误进行相应的返回。 ===发微博/分享微博界面=== 接口:SdkShare.Show() <table class="wiki_table" border="0" cellspacing="0" cellpadding="0" style="width:100%"> <tr> <th class="wiki_table_thfirst">参数名称 </th><th>作用 </th></tr> <tr> <td class="wiki_table_tdfirst">AccessToken </td><td>OAuth获取到access_token </td></tr> <tr> <td class="wiki_table_tdfirst">PicturePath </td><td>默认需要发送的图片本地地址 </td></tr> <tr> <td class="wiki_table_tdfirst">Message </td><td>微博文字 </td></tr> <tr> <td class="wiki_table_tdfirst">TitleText </td><td>窗口需要显示的标题 </td></tr> </table> Complete 事件返回参数: <table class="wiki_table" border="0" cellspacing="0" cellpadding="0" style="width:100%"> <tr> <th class="wiki_table_thfirst">参数名称 </th><th>作用 </th></tr> <tr> <td class="wiki_table_tdfirst">bool IsSendSuccess </td><td>判定发送微博是否成功 </td></tr> <tr> <td class="wiki_table_tdfirst">SdkErrorCode ErrorCode </td><td>获取枚举类型的错误代号 </td></tr> <tr> <td class="wiki_table_tdfirst">string Response </td><td>显示返回的详情信息 </td></tr> </table> ===常用微博数据请求=== 接口:SdkNetEngine.RequestCmd(SdkRequestType type, SdkCmdBase data, SdkCallBack callBack) <table class="wiki_table" border="0" cellspacing="0" cellpadding="0"> <tr> <th class="wiki_table_thfirst">参数名称 </th><th>作用 </th></tr> <tr> <td class="wiki_table_tdfirst">type </td><td>请求数据枚举类型 </td></tr> <tr> <td class="wiki_table_tdfirst">data </td><td>参数类的对象 </td></tr> <tr> <td class="wiki_table_tdfirst">callBack </td><td>请求数据后的回调 </td></tr> </table> *1、该接口对一些常用微博数据的请求做出封装,用户只需传入类型+赋值好参数的类即可使用,而不用关心具体HTTP的API调用和组包细节。 *2、该接口支持的功能有: *SdkRequestType.FRIENDS_TIMELINE - 批量获取当前登录用户及其所关注用户的最新微博消息 *'''参数类: cmdNormalMessages''' *SdkRequestType.USER_TIMELINE - 批量获取某人的微博 *'''参数类: cdmUserTimeline *SdkRequestType.UPLOAD_MESSAGE - 发送微博 *'''参数类: cmdUploadMessage *SdkRequestType.UPLOAD_MESSAGE_PIC –发送带图片的微博 *'''参数类: cmdUploadPic *SdkRequestType.FRIENDSHIP_CREATE – 关注某用户 *SdkRequestType.FRIENDSHIP_DESDROY – 取消关注 *SdkRequestType.FRIENDSHIP_SHOW – 获取两者关系 *'''参数类: cmdFriendShip *SdkRequestType.AT_USERS - @用户时的联想建议 *'''参数类: cmdAtUsers ===其它微博数据请求=== 接口:SdkNetEngine. SendRequest(RestRequest request, SdkCmdBase data,RequestBack callBack) <table class="wiki_table" border="0" cellspacing="0" cellpadding="0"> <tr> <th class="wiki_table_thfirst">参数名称 </th><th>作用 </th></tr> <tr> <td class="wiki_table_tdfirst">request </td><td>RestRequest对象 </td></tr> <tr> <td class="wiki_table_tdfirst">data </td><td>这里仅需以基类对象形式携带access_token传入就可以了 </td></tr> <tr> <td class="wiki_table_tdfirst">callBack </td><td>请求数据后的回调 </td></tr> </table> *1、 该函数要求用户自行传入接口地址和自行对RestRequest组参,这样可以满足你访问大部分微博的接口,具体使用方法见”SDK实例使用说明”中对其介绍 ==SDK实例使用说明== ===设置SDK所需参数=== SDK使用及修改必须遵守微博开发者协议,以及相关开源软件协议。 使用SDK的各功能前,需要先设置SDK所需的常量。其中AppKey和AppSecret需要http://open.weibo.com申请, RedirectUri为应用地址,在我的应用中可以编辑、UserAgent为UA值。 <pre>// 此处使用自己 AppKey 和 AppSecret,未经 //审核的应用只支持用申请该Appkey的帐号来获取数据 SdkData.AppKey = ""; SdkData.AppSecret = ""; // 您app设置的重定向页,必须一致 SdkData.RedirectUri = ""; </pre> === OAuth鉴权=== '''1、授权页方式''' 用户只需设置一些AuthenticationView的事件,然后跳转到该视图页面就可以了。当用户在授权页 ”点击” 授权后OAuth2VerifyCompleted事件将被触发,可以得到access_token。当用户点取消,则OBrowserCancelled事件将被通知,我们此时可以做隐藏或退出该视图,或跳转到其它页面。 **'''界面效果:''' {{center|http://www.sinaimg.cn/blog/developer/wiki/WP74.png}} **'''示例代码:''' <pre>private void Button_Click(object sender, System.Windows.RoutedEventArgs e) { AuthenticationView.OAuth2VerifyCompleted = (e1, e2, e3) => VerifyBack(e1, e2, e3); AuthenticationView.OBrowserCancelled = new EventHandler(cancleEvent); //其它通知事件... Deployment.Current.Dispatcher.BeginInvoke(() => { NavigationService.Navigate(new Uri("/WeiboSdk;component/PageViews/AuthenticationView.xaml", UriKind.Relative)); }); } private void VerifyBack(bool isSucess, SdkAuthError errCode, SdkAuth2Res response) { if (errCode.errCode == SdkErrCode.SUCCESS) { if (null != response) { App.AccessToken = response.accesssToken; App.RefleshToken = response.refleshToken; } Deployment.Current.Dispatcher.BeginInvoke(() => { NavigationService.Navigate(new Uri("/PageViews/SampleTimeline.xaml", UriKind.Relative)); }); } else if (errCode.errCode == SdkErrCode.NET_UNUSUAL) { Deployment.Current.Dispatcher.BeginInvoke(() => { MessageBox.Show("检查网络"); }); } else if(errCode.errCode == SdkErrCode.SERVER_ERR) { Deployment.Current.Dispatcher.BeginInvoke(() => { MessageBox.Show("服务器返回错误,错误代码:" + errCode.specificCode); }); } else Debug.WriteLine("Other Err."); } </pre> '''2、客户端方式''' **'''获取access_token''' <pre>ClientOAuth.GetAccessToken("username", "password", (e1, e2, e3) => { if (true == e1) { Debug.WriteLine("accessToken:" + e3.accesssToken); Debug.WriteLine("refleshToken:" + e3.refleshToken); Debug.WriteLine("expriesIn:" + e3.expriesIn); } else { if (e2.errCode == SdkErrCode.NET_UNUSUAL) { Debug.WriteLine("测试"); } else if (e2.errCode == SdkErrCode.SERVER_ERR) Debug.WriteLine("服务器返回错误,错误码:" + e2.specificCode); } }); </pre> **'''利用令牌刷新''' <pre>ClientOAuth.RefleshAccessToken("服务器获取的reflesh_token", (e1, e2, e3) => { if (true == e1) { Debug.WriteLine("accessToken:" + e3.accesssToken); Debug.WriteLine("refleshToken:" + e3.refleshToken); Debug.WriteLine("expriesIn:" + e3.expriesIn); } else { if (e2.errCode == SdkErrCode.NET_UNUSUAL) { } else if (e2.errCode == SdkErrCode.SERVER_ERR) Debug.WriteLine("服务器返回错误,错误码:" + e2.specificCode); } }); </pre> ===发送/分享微博界面=== 微博SDK提供了默认发送/分享微博的界面,既可以自己编写发送界面调用SDK发送方法,也可以直接调用SDK提供的发送界面进行发送。 '''界面效果:''' {{center|http://www.sinaimg.cn/blog/developer/wiki/wp72.jpg}} '''示例代码:''' <pre>private void actionButton_Click(object sender, RoutedEventArgs e) { SdkShare sdkShare = new SdkShare { //设置OAuth2.0的access_token AccessToken = App.AccessToken, //AccessTokenSecret = App.AccessTokenSecret, PicturePath = "TempJPEG.jpg", Message = this.messageTextBlock.Text }; sdkShare.Completed = new EventHandler<SendCompletedEventArgs>(ShareCompleted); //show it sdkShare.Show(); } void ShareCompleted(object sender, SendCompletedEventArgs e) { if (e.IsSendSuccess) MessageBox.Show("发送成功"); else MessageBox.Show(e.Response, e.ErrorCode.ToString(), MessageBoxButton.OK); } </pre> ===常用微博数据请求=== 使用SdkCmdBase的子类作为参数包传入接口所需参数。'''实例代码:''' <pre>cmdFriendShip data = new cmdFriendShip { acessToken = "服务器获取的access_token", _sourceScreenName = "预备影帝", _screenName = "鲤鱼叔叔" }; SdkNetEngine net = new SdkNetEngine(); net.RequestCmd(SdkRequestType.FRIENDSHIP_SHOW, data, (e1, e2) => { if (e2.errCode == SdkErrCode.SUCCESS) { Debug.WriteLine(e2.content); } else if(e2.errCode == SdkErrCode.NET_UNUSUAL) { Debug.WriteLine("网络错误"); } else if(e2.errCode == SdkErrCode.SERVER_ERR) { Debug.WriteLine("服务器返回错误,错误码:" + e2.specificCode); } }); </pre> ===其它数据请求=== 此接口可以满足微博平台的大部分http请求,通过设置RestRequest对象的服务器地址、method、和设置Paramers(AddParameter方法)然后传入SendRequest函数,sdk内部会帮你组包并发送请求。 '''实例代码:''' <pre>SdkCmdBase data = new SdkCmdBase { acessToken = "服务器返回的access_token", }; SdkNetEngine net = new SdkNetEngine(); RestRequest request = new RestRequest(); //设置request request.Method = WebMethod.Post; request.Path = "/statuses/update.xml"; request.AddParameter("status", "吹灯,睡觉!"); //发送请求 net.SendRequest(request, data, (e1) => { if (e1.errCode == SdkErrCode.SUCCESS) { Debug.WriteLine(e1.content); } else if (e1.errCode == SdkErrCode.SERVER_ERR) { Debug.WriteLine("服务器返回错误,错误码:" + e1.specificCode); } else if (e1.errCode == SdkErrCode.NET_UNUSUAL) { Debug.WriteLine("当前无网络"); } }); </pre> ==返回数据处理及错误处理== '''错误类型''' <pre>public enum SdkErrCode { //参数错误 XPARAM_ERR = -1, //成功 SUCCESS = 0, //网络不可用 NET_UNUSUAL, //服务器返回异常 SERVER_ERR, //访问超时 TIMEOUT, //用户请求被取消 USER_CANCEL } </pre> 如果errCode为SdkErrCode.ERR时,访问服务器时发送错误。此时错误码会保存在specificCode字段。错误码的详细意义请参见:http://open.weibo.com/wiki/Help/error '''处理数据请求时的回调样例代码:''' <pre>void SdkCallBack(SdkRequestType type, SdkResponse response) { switch(type) { case SdkRequestType.FRIENDS_TIMELINE: { switch(response.errCode) { case SdkErrCode.SUCCESS: { //这里代表正确的接收了服务器返回的数据 } break; case SdkErrCode.NET_UNUSUAL: { //网络状况不正常请检查网络 Debug.WriteLine(“网络状况不正常.”); } break; case SdkErrCode.XPARAM_ERR: { //参数传递错误 Debug.WriteLine(string.Format(“参数错误,原因:{0}”, reponse.content)); } break; case SdkErrCode.SERVER_ERR: { Debug.WriteLine(string.Format(“服务器访问错误,错误码:{0}”, reponse.specificCode)); } break; } } break; case SdkRequestType.FREE_LOOK_OPEN: { //…. } break; default: break; } } </pre> ==问题反馈== 如果您在调用此SDK上有问题,请先参考我们提供的调用范例WeiboSdkSample工程代码,并且WeiboSDK工程本身我们是开源的,这样方便大家了解这个SDK的工作原理,但我们不推荐您修改WeiboSDK工程中的代码,因为随着SDK开发包的升级维护,我们会对这个工程代码进行同步升级。如果有问题可在微博上发含“@预备影帝” 加具体问题内容,或者找到我的微博地址(http://weibo.com/luckytime) 后私信我。 也可以直接加入开发者交流微群http://q.weibo.com/381841 进行交流。
返回到
WP7 SDK说明文档
。
反馈
分享
顶部