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

最近做的android项目中需要接入各种开放平台,实现用QQ、新浪微博、人人网、开心网的账号登录我们的应用。我就简单的总结下每个开放平台提供的SDK吧。

1)首先说说QQ提供的SDK,总的来说,QQ提供的SDK还是可以的,直接导入下载好的jar文件到项目中。因为,我们项目中暂时只需要获取QQ用户的一些个人信息来注册账号。先要鉴权,然后再用SDK提供的TencentOpenAPI类中的方法获取用户的信息,图中

android中各种开放平台接入的总结_第1张图片有两个方法可以获取用户的信息,两个方法都是在回调函数中完成获取信息,这两个方法有什么区别呢?仔细看下,一个获取的是userInfo对象,一个是获取的是userProfile。我们再看看

android中各种开放平台接入的总结_第2张图片

这两个javabean 类,发现原来,userInfo只能获取用户的昵称,而userProfile获取用户的真实姓名和性别。坑爹了,我们项目需要

用户的昵称和性别。腾讯你敢把信息放在一个对象里吗?虽然如此,腾讯提供的SDK还是比较方便的,先鉴权,然后获取accessToken,再获取openId,再获取用户信息。


2)接下来我想吐槽下新浪微博提供的SDK:新浪微博鉴权的时候要设置回调页(weibo.setRedirectUrl),因为我们的应用还没有通过新浪微博的审核,回调页设置为我们公司的网站的时候,总是调不出来授权页面,后来iphone那边的人告诉我,回调页设置为“http://”就可以了。苦苦折腾了一番后,授权后,又出问题了,弹出下面的这个界面

android中各种开放平台接入的总结_第3张图片

我要骂娘了,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:首先是鉴权吧,鉴权完后,直接给我弹出来下面这一样图:

android中各种开放平台接入的总结_第4张图片

运行人人提供的Demo也是这样,去网上百度了一下,是人人SDK源码的问题,这里有个比较好玩的事,

android中各种开放平台接入的总结_第5张图片

图中圈的地方本来是注释掉的,打开注释就好了,这个方法在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,注意一定要大写啊,不然报错。


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

最近应用终于通过新浪微博审核了,貌似之前提的新浪微博源码问题是不存在的。

 


你可能感兴趣的:(android,新浪微博,String,REST,dialog,开放平台)