当前位置: 代码迷 >> Android >> android中各种开放平台接入的小结
  详细解决方案

android中各种开放平台接入的小结

热度:57   发布时间:2016-05-01 17:54:10.0
android中各种开放平台接入的总结

最近做的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);	}

这里需要注意的是,第三个参数要传入null,第四个参数要传入 GET,注意一定要大写啊,不然报错。


终于写完了,也算是对自己总结了一下。


1楼yyyandroid前天 12:58
不错 很实用 n但是能不能再说具体一点n一步一步来 n嘿嘿
Re: zj_133前天 13:48
回复yyyandroid因为我只是总结了一下具体有哪些问题,具体怎么获取信息,可以参考各个开放平台的demo
  相关解决方案