安卓微博登录以及遇到的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错误是因为你在微博开发者平台未签名
下载那个签名工具签名后再填写回平台。
如果出现21322错误是因为平台上未配置回调接口,配置方法如下