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

    本文由来和目的 由来:昨天技术群里有人问到推送,作为一个亲自踩过坑的的人,回答了一些问题,有人就说,你应该写一篇博客啊.其实在做完公司的项目集成之后,是想写的,但是因为懒就一直没写,但昨天经人这么一说 ...

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

    众所周知,移动互联网在这几年经历了蓬勃发展,到目前为止,移动互联网发展仍然很强劲.其中移动设备系统以android占据主导地位,之前是加拿大的黑莓系统占据主导,但后来随着android系统的问世,黑莓 ...

  4. Android开发接入第三方SDK流程

    接多第三方后,慢慢感觉都是有套路可寻的.但是也有很多要注意的地方 一.SDK集成:这是最重要的,最重要的,最重要的.集成一定要把文档看完,不能因为熟而跳过,或者是快速浏览. 不能跳过的是:混淆文件定义 ...

  5. 微信授权APP第三方登陆(Android)

    前几天负责的程序说是要加入第三方登陆的功能,虽然现在有服务商集成了第三方登陆,但是平时所用的也就微信和QQ,就自己看文档写了,其中也遇到了一些问题,然后我把我做这个的流程贴出来,并附上对应的Demo, ...

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

    微信授权登陆接入第三方App(步骤总结) 这几天开发要用到微信授权的功能,所以就研究了一下.可是微信开放平台接入指南里有几个地方写的不清不楚.在此总结一下,以便需要的人. 很多微信公众平台的应用如果移 ...

  7. 新浪微博第三方登陆开发流程及常见问题

    搞一个新浪微博第三方登陆费了我半天时间,现在把它的流程简单写一下,希望读者可以少走弯路. 大部分第三方登陆都是采用OAuth2.0接入方式(详见),我们所开发的网站项目可以使用两种方式进行接入: (1 ...

  8. python的flask实现第三方登录怎么写_关于qq和新浪微博的第三方登陆|python|flask

    前些日子研究了一下qq和新浪微博的第三方登陆的东西,发现其实难度并不大.来给大家分享一下我的经验和流程. 不论是qq还是新浪微博的第三方登陆都是用了Oauth2.0授权流程,唯一不同的是qq多了一个o ...

  9. 新浪微博第三方登陆重定向错误23123

    新浪微博第三方登陆重定向错误23123 2019年06月02日 13:49:43 温室花朵 阅读数:2更多 个人分类: 第三方微博登陆21323 编辑 当我们使用微博第三方登陆的时候,发现登陆出错了, ...

最新文章

  1. 温度自动调节 c语言编写,室内温度自动调节控制系统课程设计(26页)-原创力文档...
  2. Eclipse调试常用技巧
  3. 多选Select排序
  4. P7600-[APIO2021]封闭道路【堆,dp】
  5. matlab 安装jdbc.jar
  6. Java增强之并发编程
  7. nginx ---- 目录结构
  8. python mysql到处excel
  9. larveral开发api源码 php_PHP数据库驱动扩展概述与不同方式连接数据库总结
  10. 利用HTML和CSS做的简历模板
  11. graphpad prism柱状图横坐标斜着_GraphPad Prism绘图教程 | 如何制作对数坐标的图表...
  12. 100个精选Python实战项目案例,送给缺乏练手经验的你
  13. node nvm 安装及使用
  14. 早餐经常喝大米粥,养胃吗?应该抛弃的三种早餐,很多人却爱吃
  15. 几种解决window10睡眠后WLAN打不开(无法通过WiFi图标唤醒或根本没有WLAN图标)问题的方法
  16. linux下javac编译.java文件_Linux下使用javac编译
  17. 论文笔记(七):ROS Reality: A Virtual Reality Framework Using Consumer-Grade Hardware for ROS-Enabled Robot
  18. IPv6技术精要--第9章 无状态地址自动配置SLACC
  19. 【数字设计】芯动科技|芯原科技_2023届_笔试面试题目分享
  20. 【javaWeb微服务架构项目——乐优商城day03】——(搭建后台管理前端,Vuetify框架,使用域名访问本地项目,实现商品分类查询,cors解决跨域,品牌的查询)

热门文章

  1. LwIP 用串口当网卡
  2. 【钉钉-场景化能力包】考勤打卡
  3. 图像处理压缩Huffman编码方法实现
  4. 就近原则:this关键字的用法总结
  5. 如何在centos7中安装QQ
  6. AWS助理架构师认证考试样题答案及解析
  7. 浅谈APO PPDS 与传统MRP的区别(二)
  8. 【python学习】基础篇-编码与解码 decode()方法 将对象元素打包成元组zip()函数
  9. 了解——FIDO认证
  10. 区块链中的智能合约(Smart Contract)