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

代码:

[java] view
plain
copy

  1. public class LoginActivity extends BaseActivity implements OnClickListener {
  2. public static final int END_SINA = 2;
  3. private RelativeLayout third_party_login_xinlang;
  4. public String TAG = "LoginActivity---->";
  5. public static Oauth2AccessToken accessToken;
  6. private Weibo mWeibo;
  7. private SsoHandler mSsoHandler;
  8. private Handler handler = new Handler() {
  9. @Override
  10. public void handleMessage(Message msg) {
  11. case END_SINA:
  12. Log.v(TAG, "sina data loded!!");
  13. isAlreadExist(LoginActivity.loginType);
  14. break;
  15. default:
  16. break;
  17. }
  18. }
  19. };
  20. @Override
  21. protected void onCreate(Bundle savedInstanceState) {
  22. super.onCreate(savedInstanceState);
  23. setContentView(R.layout.login);
  24. initViews();
  25. initData();
  26. }
  27. private void initData() {// 新浪微博实例
  28. mWeibo = Weibo.getInstance(ConstantS.APP_KEY, ConstantS.REDIRECT_URL,
  29. TAG);
  30. }
  31. private void initViews() {
  32. third_party_login_xinlang.setOnClickListener(this);
  33. }
  34. @Override
  35. public void onClick(View v) {
  36. switch (v.getId()) {
  37. case R.id.third_party_login_xinlang:
  38. isThreeLogin("1");
  39. isSinaLogin();
  40. break;
  41. }
  42. }
  43. /**
  44. * 新浪登录
  45. */
  46. private void isSinaLogin() {
  47. mSsoHandler = new SsoHandler(this, mWeibo);
  48. mSsoHandler.authorize(new AuthDialogListener(), null);
  49. }
  50. /**
  51. * 新浪回调
  52. *
  53. * @author Administrator
  54. *
  55. */
  56. private class AuthDialogListener implements WeiboAuthListener {
  57. @Override
  58. public void onCancel() {
  59. }
  60. @Override
  61. public void onComplete(Bundle values) {
  62. String token = values.getString("access_token");
  63. String expires_in = values.getString("expires_in");
  64. final String idstr = values.getString("uid");
  65. LoginActivity.accessToken = new Oauth2AccessToken(token, expires_in);
  66. if (LoginActivity.accessToken.isSessionValid()) {
  67. String date = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss")
  68. .format(new java.util.Date(accessToken.getExpiresTime()));
  69. AccessTokenKeeper.keepAccessToken(LoginActivity.this,
  70. accessToken);
  71. }
  72. new Thread(new Runnable() {
  73. @Override
  74. public void run() {
  75. UserApi userApi = new UserApi(accessToken);
  76. userApi.show(idstr, new SinaRequestListener());
  77. }
  78. }).start();
  79. }
  80. @Override
  81. public void onError(WeiboDialogError arg0) {
  82. }
  83. @Override
  84. public void onWeiboException(WeiboException arg0) {
  85. }
  86. }
  87. /**
  88. * 新浪请求接口
  89. *
  90. * @author Administrator
  91. *
  92. */
  93. private class SinaRequestListener implements RequestListener {
  94. @Override
  95. public void onComplete(String response) {
  96. JsonUtil jsonUtil = new JsonUtil();
  97. JSONObject jsonObject = jsonUtil.getJsonObject(response);
  98. try {
  99. Message msg = Message.obtain();
  100. String idstr = jsonObject.getString("idstr");// 唯一标识符(uid)
  101. String name = jsonObject.getString("name");// 姓名
  102. String avatar_hd = jsonObject.getString("avatar_hd");// 头像
  103. userModel.setUid(idstr);
  104. userModel.setNickname(name);
  105. userModel.setAvatar(avatar_hd);
  106. msg.what = END_SINA;
  107. handler.sendMessage(msg);
  108. } catch (Exception e) {
  109. e.printStackTrace();
  110. }
  111. }
  112. @Override
  113. public void onComplete4binary(ByteArrayOutputStream arg0) {
  114. }
  115. @Override
  116. public void onError(WeiboException arg0) {
  117. }
  118. @Override
  119. public void onIOException(IOException arg0) {
  120. }
  121. }
  122. @Override
  123. protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  124. super.onActivityResult(requestCode, resultCode, data);
  125. if (mSsoHandler != null) {
  126. mSsoHandler.authorizeCallBack(requestCode, resultCode, data);
  127. }
  128. }
  129. }

Android应用接入第三方登陆之新浪微博的更多相关文章

  1. Android第三方登陆之新浪微博Weibo篇(原生登陆授权)

    前言 Android第三方登录可以说是非常的常见,今天主要先说一下新浪微博第三方登陆授权. SDK版本支持 SDK v3.0已经发布了支持iPhone和Android的版本. 须将你的应用的包名签名信 ...

  2. Android 中实现分享和第三方登陆---以新浪微博为例

    第三方登陆和分享功能在目前大部分APP中都有,分享功能可以将自己觉得有意义的东西分享给身边的朋友,而第三方登陆可以借助已经有巨大用户基础的平台(如QQ和新浪微博)的账号,让用户在使用自己APP的时候不 ...

  3. 为Android游戏接入第三方登录功能

    1. “游戏客户端”调用“SDK客户端”的登录功能向“SDK服务端”进行身份认证 2. 验证通过后,“游戏客户端”可得到用户信息,根据游戏逻辑可将用户信息传给“游戏服务器”进行验证 3. “游戏服务器 ...

  4. cocos2d-x android工程接入第三方支付宝SDK

    1. 首先去支付宝官网下载开发者文档 2. 然后按着开发者文档将支付宝的sdk导入到你的工程中,并关联到工程中,步骤入下图: (1)将从支付宝官方网站获得的支付宝的sdk的jar包拷贝到工程中的lib ...

  5. 微信授权登陆接入第三方App(步骤总结)Android

    微信授权登陆接入第三方App(步骤总结)Android Android App实现第三方微信登录

  6. 网站添加第三方登陆(PHP版)

    这两周正在写毕业设计,我做的是一个问答网站.先介绍一下这个网站:这是一个关于大学生在线问答的网站,类似知乎和百度知道,不过功能没有人家多,毕竟这个网站我一个人在做.网站部署在阿里云,网站包括API,W ...

  7. Oauth2.0 QQ&微信&微博实现第三方登陆

    一.写在前面 目前对于大多数的App或Web网站都支持有第三方登陆这个功能,用户可使用 QQ/ 微信/ 微博 帐号快速登录你的网站,降低注册门槛,为你的网站带来海量新用户.最近在新项目上刚好用到了,在 ...

  8. 第三方登录:新浪微博登录(OAuth2.0)

    在<Github第三方登录--通用化的第三方登陆实现>中我们实现了一个通用化的第三方登录框架,其中包括OAUth的基本流程以及最简单的用户注册.但是不同的第三方登录因为其细节不同还是有很多 ...

  9. C#网站实现QQ第三方登陆# C#快速开发教程

    C#网站实现QQ第三方登陆 说起在网站上面可以直接使用QQ登录功能大家并不陌生.但翻其官方提供的SDK包中却没有C#方向的. 但是我们有个牛人叫张善友,做了一个民间SDK.下面我们就是用他所写的SDK ...

随机推荐

  1. android adb devices offline的解决办法

    在做Android开发时经常出现android adb devices offline,解决办法如下: 1 重启adb服务 adb kill-server adb start-server linux ...

  2. 运用SQLAlchemy

    result = engine.execute(s) for row in result: Info["UserId"]=row[0] Info["UserTitle&q ...

  3. python全栈开发从入门到放弃之列表的内置方法

    1.列表切片 l=['a','b','c','d','e','f'] print(l[1:5]) # 根据索引号来切片,但顾头不顾尾 ['b', 'c', 'd', 'e'] print(l[1:5: ...

  4. Spring框架学习之IOC(二)

    Spring框架学习之IOC(二) 接着上一篇的内容,下面开始IOC基于注解装配相关的内容 在 classpath 中扫描组件 <context:component-scan> 特定组件包 ...

  5. Android平台Camera实时滤镜实现方法探讨(三)--通过Shader实现YUV转换RBG

    http://blog.csdn.net/oshunz/article/details/50055057 文章例如该链接通过将YUV分成三个纹理,在shader中取出并且经过公式变换,转换成RGB.我 ...

  6. Forward Proxy vs Reverse Proxy

    Overview We've talked about reverse proxy servers and how they can really be good at protecting the ...

  7. Apache 防盗链配置

    盗链 网站内有许多的图片地址,或一些我们可以用到的资源,在这种情况下,我可以通过赋值其他图片链接地址,到我自己的平台上,这样相当于盗取了一张图片的链接,那么盗链会有什么危害呢? 当我们盗取一张图片链接 ...

  8. java:java静态代理与动态代理简单分析

    java静态代理与动态代理简单分析 转载自:http://www.cnblogs.com/V1haoge/p/5860749.html 1.动态代理(Dynamic Proxy) 代理分为静态代理和动 ...

  9. Mysql导出导入数据库

    1. 导出数据库:mysqldump -u 用户名 -p 数据库名 > 导出的文件名 mysqldump -u root -p database > database.sql 2. 导入数 ...

  10. 织梦DedeCMS实现 三级栏目_二级栏目_一级栏目_网站名称 的效果代码

    1.将官方原来的排列方式反过来,找到include/typelink.class.php第164行 $this->valuePositionName = $tinfos['typename']. ...