关于安卓项目引入微博SDK

第一步:http://open.weibo.com/?sudaref=www.baidu.com&retcode=6102 登录微博账号 申请为开发者 

第二步:

下载SDK 解压 

项目中src->main->目录下新建一个目录 命名为jniLibs

将weiboSDKCore_3.1.4.jar 拷贝到该文件夹下 

在应用微博入口处 登录按钮定义登录事件 

//这里的APP_Key 是唯一分配给APP的  REDIRECT_URL是自己在微博开放平台定义的 

/**
//新浪微博
public static final String APP_KEY = "这里是我的APP_KEY";

public static final String REDIRECT_URL = "http://www.sina.com";

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";
*/
AuthInfo mAuthInfo= new AuthInfo(this, MyConstant.APP_KEY, MyConstant.REDIRECT_URL, MyConstant.SCOPE);
SsoHandler mSsoHandler = new SsoHandler(WeiBoActivity.this, mAuthInfo);
findViewById(R.id.weibo_login_btn).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mSsoHandler.authorizeClientSso(new AuthListener());
            }
        });

AuthListener定义: (copy的SDK demo中的)

/**
     * 当 SSO 授权 Activity 退出时,该函数被调用。
     *
     */
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        // SSO 授权回调
        // 重要:发起 SSO 登陆的 Activity 必须重写 onActivityResults
        if (mSsoHandler != null) {
            mSsoHandler.authorizeCallBack(requestCode, resultCode, data);
        }
    }

 

/**
     * 微博认证授权回调类。
     * 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 到 SharedPreferences
                AccessTokenKeeper.writeAccessToken(WeiBoActivity.this, mAccessToken);
//                Toast.makeText(WeiBoActivity.this,
//                        "保存 Token 到 SharedPreferences成功", Toast.LENGTH_SHORT).show();
                // 显示 Token
                updateTokenView(false);

            } else {
                // 以下几种情况,您会收到 Code:
                // 1. 当您未在平台上注册的应用程序的包名与签名时;
                // 2. 当您注册的应用程序包名与签名不正确时;
                // 3. 当您在平台上注册的包名和签名与您当前测试的应用的包名和签名不匹配时。
                String code = values.getString("code");
                String message = "失败";
                if (!TextUtils.isEmpty(code)) {
                    message = message + "\nObtained the code: " + code;
                }
                Toast.makeText(WeiBoActivity.this, message, Toast.LENGTH_LONG).show();
            }
        }



        @Override
        public void onCancel() {
            Toast.makeText(WeiBoActivity.this,
                    "取消", Toast.LENGTH_LONG).show();
        }

        @Override
        public void onWeiboException(WeiboException e) {
            Toast.makeText(WeiBoActivity.this,
                    "Auth exception : " + e.getMessage(), Toast.LENGTH_LONG).show();
        }
    }
 
 /**
     * 显示当前 Token 信息。
     *
     * @param hasExisted 配置文件中是否已存在 token 信息并且合法
     */
    private void updateTokenView(boolean hasExisted) {
        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";
//        mTokenText.setText(String.format(format, mAccessToken.getToken(), date));

        String message = String.format(format, mAccessToken.getToken(), date);
        if (hasExisted) {
            message = "Token 仍在有效期内,无需再次登录。"+ "\n" + message;
        }
        Toast.makeText(WeiBoActivity.this,
               "登录成功", Toast.LENGTH_LONG).show();
        handler.sendEmptyMessageDelayed(1,1000);
    }

这里我的微博认证授权回调成功之后 handler发送一个emptymsg 延迟2秒跳转到另一个界面了

 

posted @ 2017-04-11 09:56  程序员大亨  阅读(784)  评论(0编辑  收藏  举报