文档章节

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

东西南瓜西葫芦
 东西南瓜西葫芦
发布于 2015/12/31 15:12
字数 905
阅读 1.2K
收藏 1

「深度学习福利」大神带你进阶工程师,立即查看>>>

官方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


上一篇: android UI控件
东西南瓜西葫芦
粉丝 1
博文 23
码字总数 7490
作品 0
临沂
程序员
私信 提问
加载中
请先登录后再评论。
浅入浅出Android(003):使用TextView类构造文本控件

基础: TextView是无法供编辑的。 当我们新建一个项目MyTextView时候,默认的布局(/res/layout/activity_main.xml)中已经有了一个TextView: <TextView 运行效果如下: 修改其文本内容...

樂天
2014/03/22
671
1
程序猿媛一:Android滑动翻页+区域点击事件

滑动翻页+区域点击事件 ViewPager+GrideView 声明:博文为原创,文章内容为,效果展示,思路阐述,及代码片段。文尾附注源码获取途径。 转载请保留原文出处“http://my.oschina.net/gluoyer...

花佟林雨月
2013/11/09
4.2K
1
mvc框架--Razor

Razor 是一个轻巧而优雅的servlet mvc框架 # 又一个轮子? no,写就她是为了证实我个人的某些想法,并在这个过程中练练手,这两种冲动碰撞在一起,自然而然地产生了Razor # Razor的现在和未来...

dtubest
2013/01/25
3.1K
0
Android3D应用与游戏开发框架--JQGL

JQGL 是一款针对Android设备上3D应用、游戏的开发框架。 核心功能是OpenGL-ES的使用框架,相对于大部分开发者而已,OpenGL是陌生的,没有专门研究无法进行相关的开发。 本框架针对于Android...

Jping
2013/02/21
1.6K
0
开源渲染器--LuxRender

LuxRender 是一款物理真实的、无偏差的开源渲染器。 LuxRender渲染是根据渲染方程来模拟光的传输,生成物理真实的图像。但LuxRender 只是一款渲染程序而不是3D建模程序,它需要其它3D程序来创...

匿名
2013/03/03
1W
0

没有更多内容

加载失败,请刷新页面

加载更多

如何在IntelliJ中永久启用行号? - How can I permanently enable line numbers in IntelliJ?

问题: 如何在IntelliJ IDEA中永久启用行号? 解决方案: 参考一: https://stackoom.com/question/3Zn/如何在IntelliJ中永久启用行号 参考二: https://oldbug.net/q/3Zn/How-can-I-permane...

法国红酒甜
31分钟前
3
0
Docker镜像加速

vim /etc/docker/daemon.json # 将"registry-mirrors": ["https://......com"] (对应自己的加速地址)复制到文件中 # 重新加载文件和重启dockersudo systemctl daemon-reloadsudo syst......

codeccb
43分钟前
12
0
Android Studio使用lombok

参考:https://github.com/mplushnikov/lombok-intellij-plugin 使用@Setter/@Getter时,刚开始在Structure的函数列表里没有生成响应的函数,且调用set/get的地方也报红,但编译OK。 按网上的...

大熊猫
43分钟前
7
0
Stream数据流

Stream类基础操作 从JDK1.8开始提供了java.yitl.stream数据流的开发板,而Stream就是这个包中提供的一个接口,这个接口主要是通过函数式编程结构实现集合数据的分析,所以在Collection接口张...

哼着我的小调调
48分钟前
13
0
在视图控制器之间传递数据 - Passing Data between View Controllers

问题: I'm new to iOS and Objective-C and the whole MVC paradigm and I'm stuck with the following: 我是iOS和Objective-C以及整个MVC范例的新手,但我坚持以下几点: I have a view th......

fyin1314
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部