[Windows Phone]解决人人网SDK上传照片失败问题
2013-03-23 21:48
316 查看
本文纯属本人粗心所致人人SDK For Window PHone调用一键上传照片,按照官方提供的文档
唉,怪我粗心呢还是文档说的不够明白
private void btn_share_renren_Click(object sender, EventArgs e) { api = new RenrenAPI(AppID, AppKey, AppSecret); if (api.IsAccessTokenValid() == false) { api.Login(this, renren_LoginCompletHandler); } else { Stream stream = App.GetResourceStream( new Uri("Background.png", UriKind.Relative)).Stream; BitmapImage bitmap = new BitmapImage(); bitmap.SetSource(stream); api.PublishPhotoSimple(bitmap, "test", "test"); } }出现上传失败,也不提示任何错误代码,无奈只好查看源代码经调试,找到错误代码为202:需要用户授予[photo_upload]权限,上网查了一下,原来是OAuth授权的时候缺少权限设置官方文档中说明
默认情况下,会要求用户授予用于访问基本信息的权限,例如用户公共信息、好友关系等。如果应用需要的权限超过基本信息权限,就需要要求用户授予深层次的权限。这个过程是通过添加人人OAuth 2.0 'scope'请求参数实现的: scope:非必须参数。以空格分隔的权限列表,若不传递此参数,代表请求用户的默认权限。全部权限请参考'权限列表'。 下面的例子展示了如何要求用户授予访问用户的相册、新鲜事的权限: https://graph.renren.com/oauth/authorize? client_id=YOUR_API_KEY&redirect_uri=YOUR_CALLBACK_URL&response_type=code&scope=ScopeCode+ScopeCode ScopeCode是权限对应的代码,如下 获取信息类权限 权限 描述 read_user_blog 获取用户日志时需要用户授予的权限。 read_user_checkin 获取用户报到信息时需要用户授予的权限。 read_user_feed 获取用户新鲜事时需要用户授予的权限。 read_user_guestbook 获取用户留言板时需要用户授予的权限。 read_user_invitation 获取用户被邀请的状况时需要用户授予的权限。 read_user_like_history 获取用户喜欢的历史信息时需要用户授予的权限。 read_user_message 获取用户站内信时需要用户授予的权限。 read_user_notification 获取用户已收到的通知时需要用户授予的权限。 read_user_photo 获取用户相册相关信息时需要用户授予的权限。 read_user_status 获取用户状态相关信息时需要用户授予的权限。 read_user_album 获取用户相册相关信息时需要用户授予的权限。 read_user_comment 获取用户评论相关信息时需要用户授予的权限。 read_user_share 获取用户分享相关信息时需要用户授予的权限。 read_user_request 获取用户好友请求、圈人请求等信息时需要用户授予的权限。 发布信息类权限 权限 描述 publish_blog 以用户身份发布日志时需要用户授予的权限。 publish_checkin 以用户身份发布报到时需要用户授予的权限。 publish_feed 以用户身份发送新鲜事时需要用户授予的权限。 publish_share 以用户身份发送分享时需要用户授予的权限。。 write_guestbook 以用户身份进行留言时需要用户授予的权限。 send_invitation 以用户身份发送邀请时需要用户授予的权限。 send_request 以用户身份发送好友申请、圈人请求等时需要用户授予的权限。 send_message 以用户身份发送站内信时需要用户授予的权限。 send_notification 以用户身份发送通知(user_to_user)时需要用户授予的权限。 photo_upload 以用户身份上传照片时需要用户授予的权限。 status_update 以用户身份发布状态时需要用户授予的权限。 create_album 以用户身份发布相册时需要用户授予的权限。 publish_comment 以用户身份发布评论时需要用户授予的权限。 operate_like 以用户身份执行喜欢操作时需要用户授予的权限。 其他权限 权限 描述 admin_page 以用户的身份,管理其可以管理的公共主页的权限。源代码中
RenrenAPI.Login()有+3重重载,分别为
/// <summary> /// 用户名密码方式,无权限 /// </summary> /// <param name="username">用户名</param> /// <param name="password">密码</param> /// <param name="callback">回调</param> public void LogIn(string username, string password, LoginCompletedHandler callback)
/// <summary> /// 用户名密码方式,有权限 /// </summary> /// <param name="username">用户名</param> /// <param name="password">密码</param> /// <param name="scope">权限列表</param> /// <param name="callback">回调</param> public void LogIn(string username, string password, List<string> scope, LoginCompletedHandler callback) /// <summary> /// 登录,页面方式,无权限设置 /// </summary> /// <param name="page">当前显示页面</param> /// <param name="redirectUri">转向</param> /// <param name="callback">回调</param> public void LogIn(PhoneApplicationPage page, string redirectUri, LoginCompletedHandler callback) /// <summary> /// 登录,页面方式,有权限设置 /// </summary> /// <param name="page">当前显示页面</param> /// <param name="scope">权限列表</param> /// <param name="redirectUri">转向</param> /// <param name="callback">回调</param> public void LogIn(PhoneApplicationPage page, List<string> scope, string redirectUri, LoginCompletedHandler callback)我们调用的是第三重载
api.Login(this, renren_LoginCompletHandler);//redirect_Uri在SDK中已设置而第三重载内部是调用第四重载
/// <summary> /// 登录,页面方式,无权限设置 /// </summary> /// <param name="page">当前显示页面</param> /// <param name="redirectUri">转向</param> /// <param name="callback">回调</param> public void LogIn(PhoneApplicationPage page, string redirectUri, LoginCompletedHandler callback) { LogIn(page, null, redirectUri, callback); }第四重载
/// <summary> /// 登录,页面方式,有权限设置 /// </summary> /// <param name="page">当前显示页面</param> /// <param name="scope">权限列表</param> /// <param name="redirectUri">转向</param> /// <param name="callback">回调</param> public void LogIn(PhoneApplicationPage page, List<string> scope, string redirectUri, LoginCompletedHandler callback) { if (loginViewBS == null) { loginViewBS = new LoginViewBS(); } loginViewBS.CleanLoginEvent(); loginViewBS.LoginCompleted += callback; loginViewBS.InitView(page); loginViewBS.Login(redirectUri, scope); }最后一行 loginViewBS.Login(redirectUri, scope);的定义如下
public void Login(string redirect_uri, List<string> scope) { if (redirect_uri == null) { return; } string uri = ConstantValue.LoginAuth; uri += "client_id=" + ConstantValue.ApiKey + "&" + "response_type=token"; if (scope != null && scope.Count > 0) { string[] arrScope = scope.ToArray<string>(); string scopeString = String.Join(" ", arrScope); uri += "&" + "scope=" + scopeString; } uri += "&" + "redirect_uri=" + redirect_uri + "&display=touch"; if (browserControl != null) { browserControl.SetUri(uri); browserControl.LoadCompleted -= new BrowserControl.LoadCompletedEventHandler(RenrenBrowser_LoadCompleted); browserControl.LoadCompleted += new BrowserControl.LoadCompletedEventHandler(RenrenBrowser_LoadCompleted); } else { return; } }第三重载传进来的scope是null,导致OAuth授权的url中没有scope参数看到这里,问题该怎么解决已经很明显-了,
List<string> scope = new List<string>() { "photo_upload" }; api.Login(this,scope, renren_LoginCompletHandler);刚刚重新看了一SDK文档,其中有提到设置权限,
唉,怪我粗心呢还是文档说的不够明白
相关文章推荐
- 【ecmall】解决无法上传店铺logo和banner照片问题 (转)
- Android SDK Manager解决谷歌服务器连接失败导致下载失败的问题
- 解决ajax XMLHttpRequest 跨域上传文件失败问题
- 解决集成百度自动更新SDK和360自动更新SDK上传市场审核失败的坑
- 基于java在服务端解决手机上传竖拍照片旋转90度问题
- java解决手机等移动设备中照片上传至服务器方向不正确的问题
- joomla jce editor 解决上传中文名文件失败问题
- 解决android sdk manager更新失败问题
- Android 彻底解决sdk下载慢(失败)的问题
- ueditor1_2_6_1-utf8-net传解决本地图片上传失败问题
- 织梦上传服务器后数据连接失败问题的解决方法
- Liferay 集群中在一个节点上上传照片另外一个节点无法看到的问题的解决
- 利用exif.js解决ios手机上传竖拍照片旋转90度问题
- 对接支付宝接口时,不使用SDK,调用成功但是返回的数据一直验签失败问题解决方案
- 解决Android SDK Manager更新失败或更新速度慢的问题
- 【ecmall】解决无法上传店铺logo和banner照片问题
- 解决Android Studio Fetching Android SDK component information失败问题【转】
- 利用exif.js解决ios手机上传竖拍照片旋转90度问题
- 解决Android SDK Mananger 连接失败问题