新浪微薄分享一(授权)

闲来无事,想把项目中用到的第三方组件总结一下,省的以后用到还得重新学习。接下来的一系列文章涉及到的第三方组件有新浪、腾讯、微信等第三方分享和登录,支付宝,个推等。

今天先说一下新浪微薄分享之授权。因为我们一个项目中一般设计到的分享都有好几种,如果都引用对应的sdk的话项目相对比较大。另外sdk官方都推出了Demo,使用起来也比较简单,所以我们这里讲的都是网页接入。

无论是分享还是登录,首先要做的都是获得用户授权。授权目前有两种方式,我们先讲目前推荐的方式,主要分为二步

第一步:请求授权,获取Code

	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.auth);
		web = (WebView) findViewById(R.id.web);
		StringBuffer sb = new StringBuffer("https://open.weibo.cn/oauth2/authorize");
		sb.append("&client_id=" + Constant.TENCONNECT_APP_ID);
		try {
			sb.append("&redirect_uri=" + URLEncoder.encode(Constant.TENCONNECT_REDIRECT_URL, "UTF-8"));
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}
		sb.append("&display=mobile");

		web.getSettings().setJavaScriptEnabled(true);
		web.setWebViewClient(new WebViewClient() {

		@Override
		public boolean shouldOverrideUrlLoading(WebView view, String url) {
		//这里获取的url=http://www.myaddress.com/?code=6f59f37d0212ee969cdc943aa9af9443
			String code = getCodeBySubUrl(url);//通过截取url获取code
			getAccessToken(code);//第二步获取accessToken
		});
		web.loadUrl(sb.toString());
	}

第二步:通过code,发送post请求,获取授权accessToken

public void getAccessToken(final String code) {

	new AsyncTask<Object, Object, String>() {

			@Override
			protected Json doInBackground(Object... params) {
 				Map<String,String> parameters = new HashMap<String, String>
				parameters.put("client_id", client_id);
				parameters.put("client_secret", Contents.REGISTERED_REDIRECT_URI);
				parameters.put("grant_type", "authorization_code");
				parameters.put("code", code);
				parameters.put("redirect_uri",redirect_uri);
				byte[] b = HttpClientConnector.getInstance(AuthWebActivity.this).requestByPost("https://api.weibo.com/oauth2/access_token",parameters);
				String result = new String(b);
				LogInfo.i(TAG, result);
				Json json = new Json(result);
				return json;
			}

			@Override
			protected void onPostExecute(Json result) {

				if (result != null) {
					String accessToken = result.getString("access_token");
				}
				super.onPostExecute(result);
			}

		};

}.execute()

再来讲第二种方式,此种方式可能考虑到安全问题,新浪的api文档上已经没有了,但是依然可以使用,较第一种来说比较简单,只要加上一个字段一步就搞定了。

就是response_type=token,代码如下:

protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.auth);
		web = (WebView) findViewById(R.id.web);
		StringBuffer sb = new StringBuffer("https://open.weibo.cn/oauth2/authorize");
		sb.append("&client_id=" + Constant.TENCONNECT_APP_ID);
		try {
			sb.append("&redirect_uri=" + URLEncoder.encode(Constant.TENCONNECT_REDIRECT_URL, "UTF-8"));
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}
                sb.append("&display=mobile");
		sb.append("&response_type=token");

		web.getSettings().setJavaScriptEnabled(true);
		web.setWebViewClient(new WebViewClient() {

		@Override
		public boolean shouldOverrideUrlLoading(WebView view, String url) {
		//这里获取的url=http://www.myaddress.com/#access_token=2.00JjjRvC3BVyOD9ca2d6e2a2QbkbUE&remind_in=2625243&expires_in=2625243&uid=2678744171
//然后通过字符串截取获取access_token即可

		});
		web.loadUrl(sb.toString());
	}

新浪微薄分享一(授权)

时间: 2024-10-14 08:13:18

新浪微薄分享一(授权)的相关文章

新浪微薄与腾讯微薄的第三方登录

新浪微薄第三方登录其实在api上本没有涉及,说到底其实根本没有真正的第三方登录.我们平常所看到的第三方登录其实本质上是通过授权机制,获取uid,存储到服务端作为唯一标识来做的. 这样看来第三方登录就比较简单了,前面我们已经讲了新浪微薄的授权机制,只需要将授权完成之后返回的uid存储到服务端即可.这里需要注意的一个问题是为什么存储uid而不存储accessToken? 原因就是accessToken会失效,一般的有效期为七天,之后就会发生变化.而uid是不会变的,所以只能存储uid作为该用户的唯一

QQ,微信,新浪原生分享

提要: QQ ,微信分享 ,新浪分享(需要授权后分享) QQ开发者平台登录网址:(免登录分享) http://open.qq.com/login 微博分享:(如果只需要分享功能不需要审核) 1.注册开发者账号 进入新浪微博提供的开放平台 注册新浪账号:http://open.weibo.com/ 在管理中心需要创建一个应用,得到Appkey,如果只是实现分享的功能也不需要提交审核. 2.应用信息 基本信息页面:需要填写Android签名 签名工具下载地址:https://github.com/m

iOS实例下载:使用腾讯的SDK将新浪微薄嵌入到应用中

最近在做应用中添加SNS分享功能,只需要分享功能,腾讯的SDK和Demo还是挺直观的,看了下基本上就能用了,而新浪的Oauth认证看了个例子是跳出程序到Web上去认证的,体验很不好.不过Oauth认证这个过程都差不多,所以就直接将QQ的做了写修改,使用比较方便. 1:把Delegate中下的key和secret改成自己的,如果你喜欢在模拟器中输入可以不写 ! 2:把QVerifyWebViewController中的VERIFY_URL改成新浪的 http://api.t.sina.com.cn

QQ 微信 新浪 无法 分享 收集

1.网络请求报错.升级Xcode 7.0发现网络访问失败.输出错误信息 The resource could not be loaded because the App Transport Security policy requires the use of a secure connection. 原因:iOS9引入了新特性App Transport Security (ATS).详情:App Transport Security (ATS)新特性要求App内访问的网络必须使用HTTPS协议

腾讯微薄分享一(授权)

前两节说了新浪微薄的授权和分享,接下来两篇说下腾讯微薄的授权和分享. 腾讯微薄的分享与新浪的区别在于除了获取accessToken之外还需要获取openId @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.auth); web = (WebView) findViewById(R.id.web); S

001_汽车之家,新浪和360之间的交流

记addops两次分享交流 本着开放共赢的精神,addops团队分别组织并参加了与"汽车之家"."新浪"的技术交流分享会.此次交流不同于传统技术大会的形式,我们只讨论干货,在具体技术点上做了非常细致的讨论.在与这两个团队的技术分享讨论中,我们互相"碰撞出思维的火花","互相参考学习",可以说收获满满. 同时也欢迎其它公司运维团队积极与我们联系,共同交流,相互成长学习. 汽车之家 我们邀请了汽车之家运维团队来我司进行技术交流.

新浪分享 Insufficient app permissions!

简介 我们在使用新浪分享的时候,可能会遇到很多问题. 比如: java.lang.Throwable: {"error":"{\"error\":\"Insufficient app permissions!\",\"error_code\":10014,\"request\":\"\/2\/statuses\/upload_url_text.json\"}",&qu

andriod 实现新浪、QQ空间、微信朋友圈、微信好友分享功能

前言:自己在学习的过程中的一些操作过程,对分享的一些理解.下面就讲解一下: 下载地址:http://download.csdn.net/detail/u014608640/7490357 首先,我们需要去ShareSdk官方网站http://sharesdk.cn/ 去下载ShareSDK ,然后我们会有4个文件: 根据我自己在学习的过程中只用到了第一个文件夹的 libs目录的2个项目,这2个是必须要的,是ShareSdk提供的,然后需要将这2个放入到自己做的项目当中去,在Res目录下有一个 S

andriod 实现新浪、QQ场地、朋友微信圈、微信朋友分享功能

前言:在自己的学习过程中的一些操作,分享一些理解. 下面将说明什么: 下载链接:http://download.csdn.net/detail/u014608640/7490357 首先.我们须要去ShareSdk官方站点http://sharesdk.cn/ 去下载ShareSDK ,然后我们会有4个文件: 依据我自己在学习的过程中仅仅用到了第一个目录的 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxNDYwODY0MA==/font/5a6