WP7 SDK说明文档
(→返回数据处理及错误处理) |
(→其它数据请求) |
||
第362行: | 第362行: | ||
===其它数据请求=== | ===其它数据请求=== | ||
− | 此接口可以满足微博平台的大部分http请求,通过设置RestRequest对象的服务器地址、method、和设置Paramers(AddParameter方法) | + | 此接口可以满足微博平台的大部分http请求,通过设置RestRequest对象的服务器地址、method、和设置Paramers(AddParameter方法)然后传入SendRequest函数,SDK会帮你组包并发送请求。 |
'''实例代码:''' | '''实例代码:''' |
2012年2月10日 (五) 18:46的版本
目录 |
概述
新浪微博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)
参数名称 | 作用 |
---|---|
name | 用户名 |
passWord | 密码 |
callBack | 请求数据后的回调 |
- 1、 需向微博开发者平台申请客户端鉴权的权限方能使用。
- 2、 Callback回调函数中已经对无网络、服务器发生的错误进行相应的返回。
OAuth2.0鉴权--用reflesh_token更新access_token
接口:ClientOAuth. RefleshAccessToken(string refleshCode, OAuth2LoginBack callBack)
参数名称 | 作用 |
---|---|
refleshCode | 刷新令牌 |
callBack | 请求数据后的回调 |
- 1、 需向微博开发者平台申请客户端鉴权的权限方能使用。
- 2、 Callback回调函数中已经对无网络、服务器发生的错误进行相应的返回。
发微博/分享微博界面
接口:SdkShare.Show()
参数名称 | 作用 |
---|---|
AccessToken | OAuth获取到access_token |
PicturePath | 默认需要发送的图片本地地址 |
Message | 微博文字 |
TitleText | 窗口需要显示的标题 |
Complete 事件返回参数:
参数名称 | 作用 |
---|---|
bool IsSendSuccess | 判定发送微博是否成功 |
SdkErrorCode ErrorCode | 获取枚举类型的错误代号 |
string Response | 显示返回的详情信息 |
常用微博数据请求
接口:SdkNetEngine.RequestCmd(SdkRequestType type, SdkCmdBase data, SdkCallBack callBack)
参数名称 | 作用 |
---|---|
type | 请求数据枚举类型 |
data | 参数类的对象 |
callBack | 请求数据后的回调 |
- 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)
参数名称 | 作用 |
---|---|
request | RestRequest对象 |
data | 这里仅需以基类对象形式携带access_token传入就可以了 |
callBack | 请求数据后的回调 |
- 1、 该函数要求用户自行传入接口地址和自行对RestRequest组参,这样可以满足你访问大部分微博的接口,具体使用方法见”SDK实例使用说明”中对其介绍
SDK实例使用说明
设置SDK所需参数
SDK使用及修改必须遵守微博开发者协议,以及相关开源软件协议。 使用SDK的各功能前,需要先设置SDK所需的常量。其中AppKey和AppSecret需要http://open.weibo.com申请, RedirectUri为应用地址,在我的应用中可以编辑、UserAgent为UA值。
// 此处使用自己 AppKey 和 AppSecret,未经 //审核的应用只支持用申请该Appkey的帐号来获取数据 SdkData.AppKey = ""; SdkData.AppSecret = ""; // 您app设置的重定向页,必须一致 SdkData.RedirectUri = "";
OAuth鉴权
1、授权页方式 用户只需设置一些AuthenticationView的事件,然后跳转到该视图页面就可以了。当用户在授权页 ”点击” 授权后OAuth2VerifyCompleted事件将被触发,可以得到access_token。当用户点取消,则OBrowserCancelled事件将被通知,我们此时可以做隐藏或退出该视图,或跳转到其它页面。
- 界面效果:
- 示例代码:
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."); }
2、客户端方式
- 获取access_token
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); } });
- 利用令牌刷新
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); } });
发送/分享微博界面
微博SDK提供了默认发送/分享微博的界面,既可以自己编写发送界面调用SDK发送方法,也可以直接调用SDK提供的发送界面进行发送。
界面效果:
示例代码:
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); }
常用微博数据请求
使用SdkCmdBase的子类作为参数包传入接口所需参数。实例代码:
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); } });
其它数据请求
此接口可以满足微博平台的大部分http请求,通过设置RestRequest对象的服务器地址、method、和设置Paramers(AddParameter方法)然后传入SendRequest函数,SDK会帮你组包并发送请求。
实例代码:
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("当前无网络"); } });
返回数据处理及错误处理
错误类型
public enum SdkErrCode { //参数错误 XPARAM_ERR = -1, //成功 SUCCESS = 0, //网络不可用 NET_UNUSUAL, //服务器返回异常 SERVER_ERR, //访问超时 TIMEOUT, //用户请求被取消 USER_CANCEL }
- 如果errCode为SdkErrCode.ERR时,访问服务器时发送错误。此时错误码会保存在specificCode字段。
- 错误码的详细意义请参见:http://open.weibo.com/wiki/Help/error
处理数据请求时的回调样例代码:
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; } }
问题反馈
- 如果您在调用此SDK上有问题,可发送私信到微博地址(http://weibo.com/luckytime) 。
- 也可以直接加入开发者交流微群http://q.weibo.com/381841 进行交流。