Android应用接入第三方登录之新浪登录

原创 2013年12月02日 16:03:27


众所周知,移动互联网在这几年经历了蓬勃发展,到目前为止,移动互联网发展仍然很强劲。其中移动设备系统以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 认证应该是一样的吧。

代码:

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);
		}
	}

}

好了,到此,已完结!如果认为好的话,想要转载,请注明出处,谢谢!
版权声明:本文为博主原创文章,未经博主允许不得转载。

网站使用第三方登录--用新浪博客登录

1.引入指定js:2.增加点击登录按钮:新浪3.点击按
  • u013810758
  • u013810758
  • 2016年05月09日 19:15
  • 2999

Android-使用Android Studio实现第三方QQ登录

现在的第三方登录很普遍如QQ,微博,微信,今天我们就来实现如何接入QQ登录到我们的项目中 要想使用QQ登录我们需要到腾讯开放平台注册账号获取开发者资格地址:http://open.qq.com/ 注...
  • SandyRan
  • SandyRan
  • 2016年11月24日 14:28
  • 10291

实现QQ第三方登录、网站接入

1.注册账号: http://connect.qq.com/ 2.网站接入: http://wiki.connect.qq.com/%E7%BD%91%E7%AB%99%E6%8E%A5%E5%8...
  • u010678947
  • u010678947
  • 2016年01月06日 22:19
  • 4288

新浪微博第三方登录1:申请接入(OAuth2.0协议)

1. 微博登录OAuth2.0协议开发流程与QQ登录略有不同 申请接入,获取appid和appkey; 开发应用,设置协作者账号,上线之前只有协作者才能进行第三方登录 放置微博登录按钮(这个自己可以用...
  • the_victory
  • the_victory
  • 2016年01月25日 11:42
  • 2558

Android QQ第三方登录详解

Android QQ第三方登录详解
  • Ye_Nuo
  • Ye_Nuo
  • 2017年06月03日 13:44
  • 1972

android新浪微博登录获取用户信息

第一步:准备工作 在新浪微博开发者平台http://open.weibo.com/apps/注册并上传应用各种信息(比较多)获取到appkey,关于签名信息最好使用新浪提供的工具省心些,默认的授权...
  • zrj244265428
  • zrj244265428
  • 2017年04月11日 15:19
  • 1070

Android平台接入Facebook登录

官方教程地址: https://developers.facebook.com/docs/android/getting-started开发环境为Android Studio,官方要求SDK最低版本...
  • liuweiballack
  • liuweiballack
  • 2015年11月13日 17:21
  • 12503

Android微信第三方登录接入

微信开放平台地址:https://open.weixin.qq.com/ 一、首先注册微信开放平台账户,并创建应用,目前支持三种:Android、IOS、WP8        创建完应用后需要审核...
  • duliqiang1987
  • duliqiang1987
  • 2015年03月30日 20:07
  • 1580

Android FaceBook 第三方登录开发摘要

个人开发笔记,大神绕路。 由于Facebook 是外国人常用的软件 所以 翻墙是必须的(VPN) 在此不赘述FaceBook登录开发文档 https://developers.facebook.c...
  • wujian543
  • wujian543
  • 2016年01月18日 11:23
  • 3316

java 第三方登录之QQ登录

刚刚做了一个第三方登录的网站,之前没有做过,在网上找前辈们的杰作,但都没有找到,只好自己摸索,做出来QQ第三方登录。 1、要做QQ第三方登录,首先得在QQ互联(http://wiki.con...
  • qq_30420315
  • qq_30420315
  • 2016年04月21日 11:21
  • 5548
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android应用接入第三方登录之新浪登录
举报原因:
原因补充:

(最多只允许输入30个字)