安卓微博登录以及遇到的21338问题

添加以下依赖:

implementation 'com.sina.weibo.sdk:core:2.0.3:[email protected]'
implementation 'com.zhy:okhttputils:2.6.2'
 implementation 'com.alibaba:fastjson:1.1.56.android'
implementation 'com.vise.xiaoyaoyou:viselog:1.0.0'

再在build.gradle(project)添加

allprojects {
    repositories {
        maven { url "https://dl.bintray.com/thelasterstar/maven/" }//新浪微博SDK
        google()
        jcenter()
    }
}

之后再编写类

//key
    public static final String APP_KEY_SINA = "2345336312";
    //新浪AppSecret值
    public static final String APP_SECRET_SINA = "42373c935380173a88c395e9694e674c";
    /**
     * WeiboSDKDemo 应用对应的权限,第三方开发者一般不需要这么多,可直接设置成空即可。
     * 详情请查看 Demo 中对应的注释。
     */
    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 static final String REDIRECT_URL = "http://www.sina.com";
    //注意,这里的回调页应该和官网的回调页一致,不然会报21322错误
    public static final String REDIRECT_URL = "http://sns.whalecloud.com/sina2/callback";
    private SsoHandler mSsoHandler;
    /** 封装了 "access_token","expires_in","refresh_token",并提供了他们的管理功能  */
    private Oauth2AccessToken mAccessToken;

在oncreate初始化sdk

WbSdk.install(this,new AuthInfo(this, APP_KEY_SINA, REDIRECT_URL,
        SCOPE));
//新浪微博
mSsoHandler = new SsoHandler(MainActivity.this);

编写onActivityResult方法

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    //新浪 login
    if(mSsoHandler!=null){
        mSsoHandler.authorizeCallBack(requestCode,resultCode,data);
    }
    super.onActivityResult(requestCode, resultCode, data);
}

之后编写监听

 private class SelfWbAuthListener implements com.sina.weibo.sdk.auth.WbAuthListener{
        @Override
        public void onSuccess(final Oauth2AccessToken token) {
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    mAccessToken = token;
                    if (mAccessToken.isSessionValid()) {
                        // 显示 Token
//                        updateTokenView(false);
                        // 保存 Token 到 SharedPreferences
//                        AccessTokenKeeper.writeAccessToken(LoginActivity.this, mAccessToken);
         Toast.makeText(MainActivity.this,"授权成功",Toast.LENGTH_SHORT).show();
                        //获取个人资料
                        //https://api.weibo.com/2/users/show.json
                        OkHttpUtils.get()
                                .url("https://api.weibo.com/2/users/show.json")
                                .addParams("access_token",mAccessToken.getToken())
                                .addParams("uid",mAccessToken.getUid())
                                .build()
                                .execute(new StringCallback() {
                                    @Override
                                    public void onError(okhttp3.Call call, Exception e, int id) {
                                        ViseLog.d("获取失败:"+e.getMessage());
                                        e.printStackTrace();
                                    }

                                    @Override
                                    public void onResponse(String response, int id) {
                                        ViseLog.d("response:"+response);
                                        com.alibaba.fastjson.JSONObject jsonObject = JSON.parseObject(response);
                                        String headUrl = jsonObject.getString("profile_image_url");
//                                        Glide.with(MainActivity.this).load(headUrl).into(ivHead);
                                    }
                                });

                    }
                }
            });
        }

        @Override
        public void cancel() {
            ViseLog.d("取消授权---sinal---");
        }

        @Override
        public void onFailure(WbConnectErrorMessage errorMessage) {
            Toast.makeText(MainActivity.this, errorMessage.getErrorMessage(), Toast.LENGTH_LONG).show();
        }
    }

这样就好了。

如果出现21338错误是因为你在微博开发者平台未签名

安卓微博登录以及遇到的21338问题

下载那个签名工具签名后再填写回平台。

如果出现21322错误是因为平台上未配置回调接口,配置方法如下

安卓微博登录以及遇到的21338问题