这几天因为项目需要,一直在搞IOS的第三方登录授权与分享,包括新浪微博登录授权分享,QQ登录授权,腾讯微博分享,人人网登录授权与分享。
其实单纯想想的话,实现起来可能很简单,无非是去各个平台分别申请AK与SK,然后创建应用,而且都需要审核。但是真正做起来就会遇到这样那样的问题,而且这几个平台的客服都不理人或是回答不及时,没起到什么作用。问答系统的上提问的话,也几乎没有人回。无奈一遍遍地看文档,看Demo,看API。最后终于基本搞定登录分享大体部分问题。但是还有几个奇葩的问题有待继续调查。希望有这方面经验的前辈能不吝赐教,非常感谢。
1.新浪微博SDK和人人网SDK引入后,实现该实现的协议,调用等,没有安装相应客户端时,点击登录打不开Web登录页面。
具体:Demo中当安装了新浪微博客户端的时候,是可以进行授权的,可以调起相应的代理方法。如果没有安装新浪微博客户端是跳转到Web登录页面的。随后我把SDK嵌入到工程中,其他都参照API文档及demo的使用方法调试自己的应用。但是如果没有客户端时,虽然也执行了[WeiboSDK sendRequest:request];这句话,但是就是打不开登录页面。另外我把Demo中的App key换成自己的,虽然页面没有完全加载出来,但是可以调起相应的代理方法的。我不明白为什么放到自己的应用中就打不开登录页面呢。关于此问题,网上也调查了好久,但是都没有可行的方案。
解决方案:通过一点点转移工程,终于发现在我的工程中,设置主窗口时,调用了这句[self.winAlertmakeKeyWindow];导致。
去掉的话就能打开登录页面了。另外,貌似[self.windowmakeKeyAndVisible];也对登录页面的打开有影响。
遗留问题:到现在我也没有弄清楚到底为什么会有这样的影响。
2.QQ登录,在没有客户端的情况下,会提示用户下载。
具体:Demo中,如果安装了客户端的话,会调用客户端进行授权登录,如果没有客户端的话,会打开Web页面进行授权登录。我一步步按照Demo和API文档来做。可是最后的结果竟然是打开下载画面。如果我把Demo中的AppId换成自己的,依然是提示用户进行下载。从网上搜到,貌似是今年5月,腾讯为了安全起见,已经都改为客户端授权了,不再支持Wep授权。如果想继续使用Wep授权的话,可能要与客服联系,或申请相应接口。
遗留问题:因为联系不上客服,也没有可行的方案,至今保持提示用户下载页面。
3.新浪微博分享时,用Demo中方法会打开微博客户端的分享界面进行发送,而我想直接在自己的应用中分享。
具体:Demo中如下调用:
WBAuthorizeRequest *authRequest = [WBAuthorizeRequestrequest];
authRequest.redirectURI =kRedirectURI;
authRequest.scope =@"all";
WBSendMessageToWeiboRequest *request = [WBSendMessageToWeiboRequestrequestWithMessage:[selfmessageToShare]authInfo:authRequestaccess_token:myDelegate.wbtoken];
request.userInfo =@{@"ShareMessageFrom":@"SendMessageToWeiboViewController",
@"Other_Info_1": [NSNumbernumberWithInt:123],
@"Other_Info_2": @[@"obj1",@"obj2"],
@"Other_Info_3":@{@"key1": @"obj1", @"key2": @"obj2"}};
[WeiboSDKsendRequest:request];
而且文档中代码中也没有写清楚,不调用客户端的话,怎么分享。无奈只能回过头自己看API。
解决方案:换成下面的接口就可以不经过微博客户端直接发微博。
[WBHttpRequestrequestWithAccessToken:self.module_context.wbtoken
url:@"https://api.weibo.com/2/statuses/update.json"
httpMethod:@"POST"
params:@{@"status":text}
delegate:self
withTag:nil];
遗留问题:不清楚如果上传图片的话,该怎么给params传值。
4.腾讯微博,分享时一直报100031,app has no privilege to use this api.
具体:调用接口为:addShareWithParams。用Demo试了下是同时往QQ空间和腾讯微博分享。把Demo中的AppId换成自己的AppId,也是报同样的错误。貌似是申请的AppId缺少权限。使用说明中有说addShareWithParams接口已经废弃。废弃了为什么最新的Demo中还在使用。误导啊。
解决方案:把调用接口改为通用接口sendAPIRequest并实现代理方法:- (void)cgiRequest:(TCAPIRequest *)request didResponse:(APIResponse *)response。就可以不经过QQ客户端直接往腾讯微博上发微博。
5.人人网分享时还带一条评论。
具体:使用如下
PutShareUrlParam *param = [[PutShareUrlParamalloc] init];
param.comment =@"分享测试";
param.url =@"http://rrurl.cn/f0Q51C";
[RennClientsendAsynRequest:param delegate:self];
遗留问题:分享后的人人网画面中分享内容是有了,但是在该分享下确多了条评论。待解决。