众所周知,移动互联网在这几年经历了蓬勃发展,到目前为止,移动互联网发展仍然很强劲。其中移动设备系统以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() {@Overridepublic void handleMessage(Message msg) {case END_SINA:Log.v(TAG, "sina data loded!!");isAlreadExist(LoginActivity.loginType);break;default:break;}}};@Overrideprotected 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);}@Overridepublic 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 {@Overridepublic void onCancel() {}@Overridepublic 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() {@Overridepublic void run() {UserApi userApi = new UserApi(accessToken);userApi.show(idstr, new SinaRequestListener());}}).start();}@Overridepublic void onError(WeiboDialogError arg0) {}@Overridepublic void onWeiboException(WeiboException arg0) {}}/** * 新浪请求接口 *  * @author Administrator *  */private class SinaRequestListener implements RequestListener {@Overridepublic 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();}}@Overridepublic void onComplete4binary(ByteArrayOutputStream arg0) {}@Overridepublic void onError(WeiboException arg0) {}@Overridepublic void onIOException(IOException arg0) {}}@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);if (mSsoHandler != null) {mSsoHandler.authorizeCallBack(requestCode, resultCode, data);}}}

好了,到此,已完结!如果认为好的话,想要转载,请注明出处,谢谢!

更多相关文章

  1. Android判断字符串中是否含字母、中文或数字
  2. android通过Location API显示地址信息的实现方法
  3. Android(安卓)Bluetooth Address
  4. 很好的一些开源项目
  5. Android(安卓)Says Bonjour
  6. Android(安卓)Geocoder异常现象
  7. Android(安卓)学习项目开发案例
  8. Android(安卓)整合新浪微博SDK问题
  9. Android(安卓)LogCat 日志记录

随机推荐

  1. LowMemoryKiller in Android
  2. android 监听软键盘 回车键
  3. [android]-记录日志到sd卡
  4. Android系统启动——SystemServer进程启
  5. Talking about Android(安卓)Process
  6. android代码实现ScaleAnimation动画(附原
  7. android收发短信
  8. 自定义的Spinner文字居中
  9. Android(安卓)prototype Q&A video and t
  10. Android(安卓)studio怎样隐藏标题栏