WP7 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)

参数名称 作用
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事件将被通知,我们此时可以做隐藏或退出该视图,或跳转到其它页面。

    • 界面效果:
WP74.png
    • 示例代码:
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提供的发送界面进行发送。

界面效果:

wp72.jpg

示例代码:

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;
	}
}

问题反馈