WP7 SDK说明文档
(→OAuth2.0鉴权--获取access_token、reflesh_token) |
|||
(未显示1个用户的67个中间版本) | |||
第1行: | 第1行: | ||
==概述== | ==概述== | ||
− | + | ;微博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实例使用说明” | + | ;'''客户端方式:'''使用封装于 ”ClientOAuth” 中的 “GetAccessToken()” 和 “RefleshAccessToken()” 函数,详细用法见接口说明和“SDK实例使用说明” |
− | + | ||
==SDK使用说明== | ==SDK使用说明== | ||
===环境安装=== | ===环境安装=== | ||
− | 安装Windows Phone 7相关开发环境 | + | ;安装Windows Phone 7相关开发环境 |
===引入所需SDK类库=== | ===引入所需SDK类库=== | ||
− | 直接引入dll: | + | ;直接引入dll: |
按默认的开发向导新建自己的开发工程,找到SinaBase.dll、WeiboSdk.dll两个文件并添加对它们的引用。 | 按默认的开发向导新建自己的开发工程,找到SinaBase.dll、WeiboSdk.dll两个文件并添加对它们的引用。 | ||
==接口说明== | ==接口说明== | ||
− | 接口使用前需进行参数设置,详见 ”设置SDK所需参数” | + | ;接口使用前需进行参数设置,详见 ”设置SDK所需参数” |
=== OAuth2.0鉴权--获取access_token、reflesh_token=== | === OAuth2.0鉴权--获取access_token、reflesh_token=== | ||
− | 接口:ClientOAuth.GetAccessToken(string name, string passWord, OAuth2LoginBack | + | ;接口:ClientOAuth.GetAccessToken(string name, string passWord, OAuth2LoginBack CallBack) |
− | <table class="wiki_table" border="0" cellspacing="0" cellpadding="0"> | + | <table class="wiki_table" border="0" cellspacing="0" cellpadding="0" style="width:100%"> |
<tr> | <tr> | ||
− | <th class="wiki_table_thfirst">参数名称 | + | <th class="wiki_table_thfirst" style="width:150px">参数名称 |
</th><th>作用 | </th><th>作用 | ||
</th></tr> | </th></tr> | ||
<tr> | <tr> | ||
− | <td class="wiki_table_tdfirst"> | + | <td class="wiki_table_tdfirst">Name |
</td><td>用户名 | </td><td>用户名 | ||
</td></tr> | </td></tr> | ||
<tr> | <tr> | ||
− | <td class="wiki_table_tdfirst"> | + | <td class="wiki_table_tdfirst">PassWord |
</td><td>密码 | </td><td>密码 | ||
</td></tr> | </td></tr> | ||
<tr> | <tr> | ||
− | <td class="wiki_table_tdfirst"> | + | <td class="wiki_table_tdfirst">CallBack |
</td><td>请求数据后的回调 | </td><td>请求数据后的回调 | ||
</td></tr> | </td></tr> | ||
</table> | </table> | ||
− | + | ;1、 需向微博开发者平台申请客户端鉴权的权限方能使用。 | |
− | + | ;2、 CallBack回调函数中已经对无网络、服务器发生的错误进行相应的返回。 | |
===OAuth2.0鉴权--用reflesh_token更新access_token=== | ===OAuth2.0鉴权--用reflesh_token更新access_token=== | ||
+ | ;接口:ClientOAuth. RefleshAccessToken(string refleshCode, OAuth2LoginBack CallBack) | ||
+ | <table class="wiki_table" border="0" cellspacing="0" cellpadding="0" style="width:100%"> | ||
+ | <tr> | ||
+ | <th class="wiki_table_thfirst" style="width:150px">参数名称 | ||
+ | </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" style="width:150px">参数名称 | ||
+ | </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 事件返回参数: | + | ;Complete 事件返回参数: |
− | + | <table class="wiki_table" border="0" cellspacing="0" cellpadding="0" style="width:100%"> | |
+ | <tr> | ||
+ | <th class="wiki_table_thfirst" style="width:150px">参数名称 | ||
+ | </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" style="width:100%"> | ||
+ | <tr> | ||
+ | <th class="wiki_table_thfirst"" style="width:150px">参数名称 | ||
+ | </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" style="width:100%"> | ||
+ | <tr> | ||
+ | <th class="wiki_table_thfirst"" style="width:150px">参数名称 | ||
+ | </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实例使用说明== | ||
第65行: | 第193行: | ||
SDK使用及修改必须遵守微博开发者协议,以及相关开源软件协议。 | SDK使用及修改必须遵守微博开发者协议,以及相关开源软件协议。 | ||
使用SDK的各功能前,需要先设置SDK所需的常量。其中AppKey和AppSecret需要http://open.weibo.com申请, RedirectUri为应用地址,在我的应用中可以编辑、UserAgent为UA值。 | 使用SDK的各功能前,需要先设置SDK所需的常量。其中AppKey和AppSecret需要http://open.weibo.com申请, RedirectUri为应用地址,在我的应用中可以编辑、UserAgent为UA值。 | ||
+ | <pre>// 此处使用自己 AppKey 和 AppSecret,未经 | ||
+ | //审核的应用只支持用申请该Appkey的帐号来获取数据 | ||
+ | SdkData.AppKey = ""; | ||
+ | SdkData.AppSecret = ""; | ||
+ | |||
+ | // 您app设置的重定向页,必须一致 | ||
+ | SdkData.RedirectUri = ""; | ||
+ | </pre> | ||
=== OAuth鉴权=== | === OAuth鉴权=== | ||
'''1、授权页方式''' | '''1、授权页方式''' | ||
− | 用户只需设置一些AuthenticationView的事件,然后跳转到该视图页面就可以了。当用户在授权页 ”点击” | + | 用户只需设置一些AuthenticationView的事件,然后跳转到该视图页面就可以了。当用户在授权页 ”点击” 授权后OAuth2VerifyCompleted事件将被触发,可以得到Access_token。当用户点取消,则OBrowserCancelled事件将被通知,我们此时可以做隐藏或退出该视图,或跳转到其它页面。 |
− | + | ||
− | + | ||
+ | **'''界面效果:'''[http://www.sinaimg.cn/blog/developer/wiki/wp7001.jpg] | ||
**'''示例代码:''' | **'''示例代码:''' | ||
+ | <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、客户端方式''' | '''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> | ||
===发送/分享微博界面=== | ===发送/分享微博界面=== | ||
第84行: | 第305行: | ||
'''界面效果:''' | '''界面效果:''' | ||
− | + | [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的子类作为参数包传入接口所需参数。 | 使用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方法) | + | 此接口可以满足微博平台的大部分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上有问题,可发送私信到微博地址(http://weibo.com/luckytime) 。 | |
+ | ;也可以直接加入开发者交流微群http://q.weibo.com/381841 进行交流。 |
2014年3月27日 (四) 16:40的最后版本
目录 |
概述
- 微博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事件将被通知,我们此时可以做隐藏或退出该视图,或跳转到其它页面。
- 界面效果:[1]
- 示例代码:
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提供的发送界面进行发送。
界面效果: [2]
示例代码:
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 进行交流。