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

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

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

2,java调用

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

监听--从demo里抠出来的

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

回调

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

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

3,利用Oauth2AccessToken获取信息

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

监听

 1 /**
 2      * 微博 OpenAPI 回调接口。
 3      */
 4     private RequestListener mListener = new RequestListener() {
 5         @Override
 6         public void onComplete(String response) {
 7             if (!TextUtils.isEmpty(response)) {
 8                 //LogUtil.i(TAG, response);
 9                 // 调用 User#parse 将JSON串解析成User对象
10                 User user = User.parse(response);
11                 if (user != null) {
12                     Toast.makeText(LoginActivity.this,
13                             "获取User信息成功,用户昵称:" + user.screen_name,
14                             Toast.LENGTH_LONG).show();
15                 } else {
16                     Toast.makeText(LoginActivity.this, response, Toast.LENGTH_LONG).show();
17                 }
18             }
19         }
20 
21         @Override
22         public void onWeiboException(WeiboException e) {
23             //LogUtil.e(TAG, e.getMessage());
24             ErrorInfo info = ErrorInfo.parse(e.getMessage());
25             Toast.makeText(LoginActivity.this, info.toString(), Toast.LENGTH_LONG).show();
26         }
27     };

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

WeiboSDK

WeiboSDKDemo


posted @ 2016-01-26 14:41  西瓜皮不甜  阅读(563)  评论(0编辑  收藏  举报