最近做的android项目中需要接入各种开放平台,实现用QQ、新浪微博、人人网、开心网的账号登录我们的应用。我就简单的总结下每个开放平台提供的SDK吧。
1)首先说说QQ提供的SDK,总的来说,QQ提供的SDK还是可以的,直接导入下载好的jar文件到项目中。因为,我们项目中暂时只需要获取QQ用户的一些个人信息来注册账号。先要鉴权,然后再用SDK提供的TencentOpenAPI类中的方法获取用户的信息,图中
有两个方法可以获取用户的信息,两个方法都是在回调函数中完成获取信息,这两个方法有什么区别呢?仔细看下,一个获取的是userInfo对象,一个是获取的是userProfile。我们再看看
这两个javabean 类,发现原来,userInfo只能获取用户的昵称,而userProfile获取用户的真实姓名和性别。坑爹了,我们项目需要
用户的昵称和性别。腾讯你敢把信息放在一个对象里吗?虽然如此,腾讯提供的SDK还是比较方便的,先鉴权,然后获取accessToken,再获取openId,再获取用户信息。
2)接下来我想吐槽下新浪微博提供的SDK:新浪微博鉴权的时候要设置回调页(weibo.setRedirectUrl),因为我们的应用还没有通过新浪微博的审核,回调页设置为我们公司的网站的时候,总是调不出来授权页面,后来iphone那边的人告诉我,回调页设置为“http://”就可以了。苦苦折腾了一番后,授权后,又出问题了,弹出下面的这个界面
我要骂娘了,iphone那边授权后妥妥的,android这边就出问题。后台也没报错啊,这个怎么找,难道是因为我们的应用没有审核通过的原因吗?还好新浪微博的SDK提供源码,我只有苦逼的去看源码,幸好有iphone开发的同事一起帮我看,想问题出现在哪里。
后来我发现,图中的文字很像是一个链接,但是链接中的http后少了个“/”,难道是授权后新浪微博返回给我的地址有问题?没办法,去看源码,发现原来图中的Dialog内嵌的是一个WebView,用过WebView的人都知道,WebView在跳转地址的时候一定要添加重写的WebViewClient,然而源码中重写WebViewClient 在每次跳转的时候,都会将新浪返回给我的地址(也就是图中的地址)和前面提到的回调地址判断一下,是否以回调地址开头,如果是的话,就才会跳转页面并且dismiss这个Dialog。找到问题所在就好解决了,我先改了下回调地址为“http:/”,结果授权页面又弹不出来了。我只好把源码中的判断改为“url.startsWith("http:/")”,url就是新浪返回的地址,后面的地址本来是回调地址。修改完后,终于能获取到accessToken的值了。不过,到现在我还不清楚是什么原因。源码写的应该没错,新浪返回的地址应该有问题,难道是因为我们的应用没审核通过,所以返回的地址有问题?有知道的同学,可以在下面留言。
接下来,用SDK里提供的weibo.request方法获取用户的“uid”,然后通过uid获取用户的信息,不知道怎么做的,可以看看新浪提供的API。
3) 第三个要说的人人的SDK:首先是鉴权吧,鉴权完后,直接给我弹出来下面这一样图:
运行人人提供的Demo也是这样,去网上百度了一下,是人人SDK源码的问题,这里有个比较好玩的事,
图中圈的地方本来是注释掉的,打开注释就好了,这个方法在RenrenListenerFactory类中。这个注释让我情何以堪。
授权后,用UsersGetInfoHelper类中getUsersInfo方法,这个方法需要传入一个UsersGetInfoRequestParam,再看看这个类的构造方法
public UsersGetInfoRequestParam(String[] uids) { this.uids = uids; }需要传入uids,如果你只查当前用户的个人信息的话,传入null就可以了,我在这个地方纠结了半天,看API也纠结,接下来就比较简单了,获取用户个人信息。
4)最后再说说开心网的SDK:使用开心的SDK时候,我一直没找到怎么添加API_KEY和SECRET_KEY,开心网的这两个值,要在源码中添加,然后再把SDK加入到项目中去。授权后,获取用户个人信息,是用Kaixin类中的request的方法,
/** * 调用kaixin rest apis * * @param context * 应用环境 * @param restInterface * rest api接口 * @param params * key-value形式的参数集,key为参数名,value为参数值,数据类型可以是String或byte[] * @param httpMethod * GET 或 POST * @return 服务器返回的JSON串 * @throws FileNotFoundException * @throws MalformedURLException * @throws IOException */ public String request(Context context, String restInterface, Bundle params, String httpMethod) throws FileNotFoundException, MalformedURLException, IOException { if (params == null) { params = new Bundle(); } params.putString("access_token", getAccessToken()); return Util.openUrl(context, KX_REST_URL + restInterface, httpMethod, params, null); }
终于写完了,也算是对自己总结了一下。
最近应用终于通过新浪微博审核了,貌似之前提的新浪微博源码问题是不存在的。