Android应用接入第三方登陆之新浪微博
众所周知,移动互联网在这几年经历了蓬勃发展,到目前为止,移动互联网发展仍然很强劲。其中移动设备系统以android占据主导地位,之前是加拿大的黑莓系统占据主导,但后来随着android系统的问世,黑莓手机操作系统逐渐被android蚕食,目前,全球最为流行的移动操作系统有Google公司的android、苹果(Apple)公司的ios、微软(Microsoft)公司的windows Phone,以上三者形成手机操作系统三足鼎立之势,其中Google的android占据市场的百分之六十几的份额,苹果(Apple)占据百分之十八点几的份额,而微软(Microsoft)的Windows
 Phone占据全球仅仅只有百分之三点几的份额,好了,我们开始进入正题吧。
随着3G手机的广泛普及,移动应用开始了井喷式的发展,这些移动应用公司如雨后春笋越来越多,一些刚刚起来的小公司开发的应用(大部分一些电商、社交等之类的)为了提高其知名度,不得不依附大公司的庞大的用户群来进行推广,比如像腾讯(Tencent),新浪(sina),人人网,脸谱网(Facebook)等,这些公司提供接口API供开发者调用。今天呢,我要说的就是新浪登录,至于我为什么要说新浪,是因为新浪写的接口文档太可恶了,走了不少弯路,为了大家少走弯路,我决定写这篇博文,如果写的不好,请批评指正。
要想在移动应用上使用sina登录,第一步需要注册成为开发者,说白了,就是一个新浪微博帐号,如果有了的话,就不要注册了,直接登录即可,那么在那里去注册成为开发者呢?下面的图会告诉你:在地址栏中输入 t.sina.com.cn --> 它会要求你登录(如果没登录)
经过以上第一步,我们进入了新浪的开放平台,如图:
第三步,创建应用,获得授权资格,这里需要你去填写一些重要的信息,这些东西在以后会用到,如图(创建应用):
第四步,当我们点击了创建应用,你需要填写以下信息,如图:
好了,现在剩下最后一步了,填写完以上信息之后,提交信息,完了,此时还还会有些信息需要你填写,例如,回调地址,其实就是网站地址,可填新浪默认的,如果你自己有的话,也可以填写你自己的网站地址,如图:
记住,以上画红线部分,千万不要泄露出去,因为会对公司造成安全隐患,特别是Android签名、App Secret,如果App Secret不小心泄露出去的话,你可以点击该条目,进入编辑页,进行重置,其中android签名是根据新浪提供的一个app_signatures.apk生成的一串MD5加密字符串,然后填上去,就哦了!下面是一个示例,还要记住的是,要想使用此工具生成一串MD5加密字符串,那你就必须将该应用安装到你的手机上,因为该MD5加密字符串是根据包名及xx.keystore生成的,Eclipse集成开发工具Run
 as 所使用的是debug.keystore 所以当你在发布你的APP的时候,一定要根据你自己公司的 .keystore 生成MD5加密字符串填到android签名哪一项上去,如果你填的是你通过Eclipse集成开发工具中的Run as 安装到手机上去的debug.keystore生成的MD5加密字符串的话,那么会导致无法授权登录问题产生。所以,一旦你要发布APP时,一定要更正回来,一般来说,一个公司keystore只有一份,根据报名产生的MD5加密字符串效果图如下:
哦,对了,在最后一步我们提到了回调地址,那么该回调地址有什么用呢?该回调地址相对用户来说是不可见的,这个回调地址是用来生成accessToken的,通过这个accessToken可以去请求接口,获得相关用户的信息。带回一张图就可以让你明白,我上面所提到字段的意思。如图:
完了,这就是新浪登录的过程,下面贴上一段代码,第三方登录的代码,这里有一个请求接口的类,我觉得吧他写成内部类更好一点,因为这样可以更好的传数据。特别提一点,我使用的SSO登录,我相信,Oauth2.0 认证应该是一样的吧。
新浪微博SDK下载:http://open.weibo.com/wiki/SDK
代码:
- public class LoginActivity extends BaseActivity implements OnClickListener {
 - public static final int END_SINA = 2;
 - private RelativeLayout third_party_login_xinlang;
 - public String TAG = "LoginActivity---->";
 - public static Oauth2AccessToken accessToken;
 - private Weibo mWeibo;
 - private SsoHandler mSsoHandler;
 - private Handler handler = new Handler() {
 - @Override
 - public void handleMessage(Message msg) {
 - case END_SINA:
 - Log.v(TAG, "sina data loded!!");
 - isAlreadExist(LoginActivity.loginType);
 - break;
 - default:
 - break;
 - }
 - }
 - };
 - @Override
 - protected void onCreate(Bundle savedInstanceState) {
 - super.onCreate(savedInstanceState);
 - setContentView(R.layout.login);
 - initViews();
 - initData();
 - }
 - private void initData() {// 新浪微博实例
 - mWeibo = Weibo.getInstance(ConstantS.APP_KEY, ConstantS.REDIRECT_URL,
 - TAG);
 - }
 - private void initViews() {
 - third_party_login_xinlang.setOnClickListener(this);
 - }
 - @Override
 - public void onClick(View v) {
 - switch (v.getId()) {
 - case R.id.third_party_login_xinlang:
 - isThreeLogin("1");
 - isSinaLogin();
 - break;
 - }
 - }
 - /**
 - * 新浪登录
 - */
 - private void isSinaLogin() {
 - mSsoHandler = new SsoHandler(this, mWeibo);
 - mSsoHandler.authorize(new AuthDialogListener(), null);
 - }
 - /**
 - * 新浪回调
 - *
 - * @author Administrator
 - *
 - */
 - private class AuthDialogListener implements WeiboAuthListener {
 - @Override
 - public void onCancel() {
 - }
 - @Override
 - public void onComplete(Bundle values) {
 - String token = values.getString("access_token");
 - String expires_in = values.getString("expires_in");
 - final String idstr = values.getString("uid");
 - LoginActivity.accessToken = new Oauth2AccessToken(token, expires_in);
 - if (LoginActivity.accessToken.isSessionValid()) {
 - String date = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss")
 - .format(new java.util.Date(accessToken.getExpiresTime()));
 - AccessTokenKeeper.keepAccessToken(LoginActivity.this,
 - accessToken);
 - }
 - new Thread(new Runnable() {
 - @Override
 - public void run() {
 - UserApi userApi = new UserApi(accessToken);
 - userApi.show(idstr, new SinaRequestListener());
 - }
 - }).start();
 - }
 - @Override
 - public void onError(WeiboDialogError arg0) {
 - }
 - @Override
 - public void onWeiboException(WeiboException arg0) {
 - }
 - }
 - /**
 - * 新浪请求接口
 - *
 - * @author Administrator
 - *
 - */
 - private class SinaRequestListener implements RequestListener {
 - @Override
 - public void onComplete(String response) {
 - JsonUtil jsonUtil = new JsonUtil();
 - JSONObject jsonObject = jsonUtil.getJsonObject(response);
 - try {
 - Message msg = Message.obtain();
 - String idstr = jsonObject.getString("idstr");// 唯一标识符(uid)
 - String name = jsonObject.getString("name");// 姓名
 - String avatar_hd = jsonObject.getString("avatar_hd");// 头像
 - userModel.setUid(idstr);
 - userModel.setNickname(name);
 - userModel.setAvatar(avatar_hd);
 - msg.what = END_SINA;
 - handler.sendMessage(msg);
 - } catch (Exception e) {
 - e.printStackTrace();
 - }
 - }
 - @Override
 - public void onComplete4binary(ByteArrayOutputStream arg0) {
 - }
 - @Override
 - public void onError(WeiboException arg0) {
 - }
 - @Override
 - public void onIOException(IOException arg0) {
 - }
 - }
 - @Override
 - protected void onActivityResult(int requestCode, int resultCode, Intent data) {
 - super.onActivityResult(requestCode, resultCode, data);
 - if (mSsoHandler != null) {
 - mSsoHandler.authorizeCallBack(requestCode, resultCode, data);
 - }
 - }
 - }
 
Android应用接入第三方登陆之新浪微博的更多相关文章
- Android第三方登陆之新浪微博Weibo篇(原生登陆授权)
		
前言 Android第三方登录可以说是非常的常见,今天主要先说一下新浪微博第三方登陆授权. SDK版本支持 SDK v3.0已经发布了支持iPhone和Android的版本. 须将你的应用的包名签名信 ...
 - Android 中实现分享和第三方登陆---以新浪微博为例
		
第三方登陆和分享功能在目前大部分APP中都有,分享功能可以将自己觉得有意义的东西分享给身边的朋友,而第三方登陆可以借助已经有巨大用户基础的平台(如QQ和新浪微博)的账号,让用户在使用自己APP的时候不 ...
 - 为Android游戏接入第三方登录功能
		
1. “游戏客户端”调用“SDK客户端”的登录功能向“SDK服务端”进行身份认证 2. 验证通过后,“游戏客户端”可得到用户信息,根据游戏逻辑可将用户信息传给“游戏服务器”进行验证 3. “游戏服务器 ...
 - cocos2d-x android工程接入第三方支付宝SDK
		
1. 首先去支付宝官网下载开发者文档 2. 然后按着开发者文档将支付宝的sdk导入到你的工程中,并关联到工程中,步骤入下图: (1)将从支付宝官方网站获得的支付宝的sdk的jar包拷贝到工程中的lib ...
 - 微信授权登陆接入第三方App(步骤总结)Android
		
微信授权登陆接入第三方App(步骤总结)Android Android App实现第三方微信登录
 - 网站添加第三方登陆(PHP版)
		
这两周正在写毕业设计,我做的是一个问答网站.先介绍一下这个网站:这是一个关于大学生在线问答的网站,类似知乎和百度知道,不过功能没有人家多,毕竟这个网站我一个人在做.网站部署在阿里云,网站包括API,W ...
 - Oauth2.0 QQ&微信&微博实现第三方登陆
		
一.写在前面 目前对于大多数的App或Web网站都支持有第三方登陆这个功能,用户可使用 QQ/ 微信/ 微博 帐号快速登录你的网站,降低注册门槛,为你的网站带来海量新用户.最近在新项目上刚好用到了,在 ...
 - 第三方登录:新浪微博登录(OAuth2.0)
		
在<Github第三方登录--通用化的第三方登陆实现>中我们实现了一个通用化的第三方登录框架,其中包括OAUth的基本流程以及最简单的用户注册.但是不同的第三方登录因为其细节不同还是有很多 ...
 - C#网站实现QQ第三方登陆# C#快速开发教程
		
C#网站实现QQ第三方登陆 说起在网站上面可以直接使用QQ登录功能大家并不陌生.但翻其官方提供的SDK包中却没有C#方向的. 但是我们有个牛人叫张善友,做了一个民间SDK.下面我们就是用他所写的SDK ...
 
随机推荐
- APP 自动化测试封装结构模式
			
原文出处http://www.toutiao.com/a6268089772108333314/ 做过UI自动化测试同学,都会深深体会几个痛点:维护量大.适配量大.编写代码巨大等.基于这些问题,大家都 ...
 - 搭建Mac OS X下cocos2d-x的Android开发环境
			
版本 Cocos2d-x: cocos2d-2.1beta3-x-2.1.1 OS X: 10.8 Android ADT Bundle: v21.1.0 Android NDK: android-n ...
 - 单元测试JUnit 4
			
介绍 JUnit 4.x 是利用了 Java 5 的特性(Annotation)的优势,使得测试比起 3.x 版本更加的方便简单,JUnit 4.x 不是旧版本的简单升级,它是一个全新的框架,整个 ...
 - Oracle---------coalesce的用法介绍
			
COALESCE (expression_1, expression_2, ...,expression_n)依次参考各参数表达式,遇到非null值即停止并返回该值.如果所有的表达式都是空值,最终将返 ...
 - 【Head First Servlets and JSP】笔记24:include指令与include动作 & param动作 & foward动作
			
include指令与include动作 1.样例代码 <%@ page contentType="text/html;charset=UTF-8" language=&quo ...
 - 微信小程序快速开发
			
微信小程序快速开发 一.注册小程序账号,下载IDE 1.官网注册https://mp.weixin.qq.com/,并下载IDE. 2.官方文档一向都是最好的学习资料. 注意:1)注册账号之后会有一个 ...
 - java没有指针
			
先说结论:java没有指针,它使用对象引用来替代指针 备注:c/c++的引用和java的引用完全不是一个东西 c/c++的引用是同一块内存的不同名字 java的引用指向一个对象,引用本身也占用了内存 ...
 - Convolutional Neural Network
			
Why CNN for Image 图片是由像素点组成的,可以这样来解释深度神经网络对图片的处理. 第一层的layer是最基本的分类器,区分一些基本的特征,比如颜色.是否有斜线. 第二层的layer会 ...
 - PHP7的五大新特性
			
如果你使用的是基于 composer 和 PSR-4 的框架,这种写法是否能成功的加载类文件?其实是可以的,composer 注册的自动加载方法是在类被调用的时候根据类的命名空间去查找位置,这种写法对 ...
 - java object 转为 json
			
JSONObject jsonObject=JSONObject.fromObject(map) 执行到这的时候没有任何反应的原因及解决办法 http://blog.csdn.net/tjcyjd/a ...
 
			
		