android 第三方登录---新浪微博

jopen 4年前

官方demo是依赖的方式

我是把包都弄到自己项目里了,这里不多说了

当然别忘了设置你的应用,不设置的话后边会出问题

1,AndroidManiFest.xml设置,这里我只是简单的用授权,获取基本信息,所以只用了这一个

<!--微博-->  <!-- 必须注册在微博授权,分享微博时候用到 -->  <activity      android:name= "com.sina.weibo.sdk.component.WeiboSdkBrowser"      android:configChanges= "keyboardHidden|orientation"      android:exported= "false"      android:windowSoftInputMode="adjustResize" >  </activity >

2,java调用

public static final String SCOPE = "email,direct_messages_read,direct_messages_write,"          + "friendships_groups_read,friendships_groups_write,statuses_to_me_read,"          + "follow_app_official_microblog," + "invitation_write";          public void weibo(){              // 获取当前已保存过的 Token               Oauth2AccessToken mAccessToken = AccessTokenKeeper.readAccessToken(this);              // 快速授权时,请不要传入 SCOPE,否则可能会授权不成功              //11111111换成你自己的app key,第二个就是之前设置那个回调页              AuthInfo mAuthInfo = new AuthInfo(this,"11111111","https://api.weibo.com/oauth2/default.html", SCOPE);              mSsoHandler = new SsoHandler(LoginActivity.this, mAuthInfo);              //Web---网页输入账号密码              //mSsoHandler.authorizeWeb(new AuthListener());              //sso---客户端              mSsoHandler. authorizeClientSso(new AuthListener());              //all In one先调用客户端,如果没有客户端就调用web              mSsoHandler. authorize(new AuthListener());           }

监听--从demo里抠出来的

/**       * 微博认证授权回调类。       * 1. SSO 授权时,需要在 {@link #onActivityResult} 中调用 {@link SsoHandler#authorizeCallBack} 后       *    该回调才会被执行。       * 2. 非 SSO 授权时,当授权结束后,该回调就会被执行。       * 当授权成功后,请保存该 access_token、expires_in、uid 等信息到 SharedPreferences 中。       */      class AuthListener implements WeiboAuthListener {          @Override          public void onComplete(Bundle values) {              // 从 Bundle 中解析 Token              mAccessToken = Oauth2AccessToken.parseAccessToken(values);              //从这里获取用户输入的 电话号码信息              String  phoneNum =  mAccessToken.getPhoneNum();              if (mAccessToken.isSessionValid()) {                  // 显示 Token                  // updateTokenView(false);                  // 保存 Token 到 SharedPreferences                  AccessTokenKeeper.writeAccessToken(LoginActivity.this, mAccessToken);                  Toast.makeText(LoginActivity.this,"授权成功", Toast.LENGTH_SHORT).show();                  //打印信息                  String date = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss").format(                          new java.util.Date(mAccessToken.getExpiresTime()));                  String format = "Token:%1$s \\n有效期:%2$s";                  Log.i("授权成功","信息111:"+String.format(format, mAccessToken.getToken(), date));                  String message = String.format(format, mAccessToken.getToken(), date);                  Log.i("授权成功","信息222:"+message);                  if (true) {                      message = "Token 仍在有效期内,无需再次登录。"+ "\n" + message;                  }                  Log.i("授权成功","信息333:"+message);              } else {                  // 以下几种情况,您会收到 Code:                  // 1. 当您未在平台上注册的应用程序的包名与签名时;                  // 2. 当您注册的应用程序包名与签名不正确时;                  // 3. 当您在平台上注册的包名和签名与您当前测试的应用的包名和签名不匹配时。                  String code = values.getString("code");                  String message = "授权失败";                  if (!TextUtils.isEmpty(code)) {                      message = message + "\nObtained the code: " + code;                  }                  Toast.makeText(LoginActivity.this, message, Toast.LENGTH_LONG).show();              }          }          @Override          public void onCancel() {              Toast.makeText(LoginActivity.this,"取消", Toast.LENGTH_LONG).show();          }          public void onWeiboException(WeiboException e) {              Toast.makeText(LoginActivity.this,                      "Auth exception : " + e.getMessage(), Toast.LENGTH_LONG).show();          }  }

回调---和之前QQ的一样,不能少的

protected void onActivityResult(int requestCode, int resultCode, Intent data) {      if (resultCode == Constants.ACTIVITY_OK){          // SSO 授权回调          // 重要:发起 SSO 登陆的 Activity 必须重写 onActivityResults          if (mSsoHandler != null) {              Log.i("新浪微博登陆返回","返回");              //不能少              mSsoHandler.authorizeCallBack(requestCode, resultCode, data);          }      }      super.onActivityResult(requestCode, resultCode, data);  }

这样授权就有了,下边就是获取授权用户的信息了

3,利用Oauth2AccessToken获取信息

// 获取用户信息接口        //mAccessToken可以是你之前授权获取的那个,也可以        // 获取当前已保存过的 Token        //Oauth2AccessToken mAccessToken = AccessTokenKeeper.readAccessToken(this);        UsersAPI mUsersAPI = new UsersAPI(LoginActivity.this, "你的APP_KEY", mAccessToken);        long uid = Long.parseLong(mAccessToken.getUid());        mUsersAPI.show(uid, mListener);

监听

/**       * 微博 OpenAPI 回调接口。       */      private RequestListener mListener = new RequestListener() {          @Override          public void onComplete(String response) {              if (!TextUtils.isEmpty(response)) {                  //LogUtil.i(TAG, response);                  // 调用 User#parse 将JSON串解析成User对象                  User user = User.parse(response);                  if (user != null) {                      Toast.makeText(LoginActivity.this,                              "获取User信息成功,用户昵称:" + user.screen_name,                              Toast.LENGTH_LONG).show();                  } else {                      Toast.makeText(LoginActivity.this, response, Toast.LENGTH_LONG).show();                  }              }          }            @Override          public void onWeiboException(WeiboException e) {              //LogUtil.e(TAG, e.getMessage());              ErrorInfo info = ErrorInfo.parse(e.getMessage());              Toast.makeText(LoginActivity.this, info.toString(), Toast.LENGTH_LONG).show();          }      };

好了,这样就有了。基本上都是从demo里直接拿出来的

微博官方的demo地址:https://github.com/sinaweibosdk/weibo_android_sdk

这些是从demo直接拿出来的

WeiboSDK

WeiboSDKDemo


来自: http://my.oschina.net/Jieth/blog/595275