博客
关于我
安卓微博登录第三方详解
阅读量:316 次
发布时间:2019-03-03

本文共 5422 字,大约阅读时间需要 18 分钟。

微博作为社交平台之一,自然少不了在应用开发中得到应用。本文将详细介绍如何在Android项目中集成微博登录功能,并展示实现过程中的关键步骤。

效果图

开发完成后,预计界面如下:[图片描述已移除]。界面主要包含一个微博登录按钮和显示微博用户信息的区域。

微博开放平台

进入微博开发者平台,完成应用注册:[步骤描述已移除]。进入“我的应用”后,点击“应用基本信息”,填写包名及签名即可。在应用未上线时,可以填写测试地址(如蒲公英下载链接)或公司官网等。

资源引入

在主项目build.gradle中添加依赖项:[依赖项描述已移除]。具体来说,需添加以下三个依赖:

  • com.sina.weibo.sdk:core:4.3.1:openDefaultRelease@aar(微博SDK)
  • com.squareup.okhttp3:okhttp:3.4.1(网络请求库)
  • com.github.bumptech.glide:glide:4.7.1(图片加载库)

在app build.gradle中添加相应的实现依赖:

implementation 'com.sina.weibo.sdk:core:4.3.1:openDefaultRelease@aar'implementation 'com.squareup.okhttp3:okhttp:3.4.1'implementation 'com.github.bumptech.glide:glide:4.7.1'

代码实现

在自定义Application类中初始化微博SDK。以下是实现代码:

public class MainActivity extends AppCompatActivity {    private SsoHandler ssoHandler;    private ImageView weiboPic;    private TextView weiboName, weiboJson;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        ButterKnife.bind(this);        weiboPic = findViewById(R.id.weibo_pic);        weiboName = findViewById(R.id.weibo_name);        weiboJson = findViewById(R.id.weibo_json);        // 初始化微博SDK        AuthInfo mAuthInfo = new AuthInfo(this, APP_KEY, REDIRECT_URL, "");        WbSdk.install(this, mAuthInfo);        // 微博授权事件        findViewById(R.id.weibo_start).setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                WbAuthUtils.startSinaWeiBo(ssoHandler);            }        });        // 处理授权结果        WbAuthUtils utils = new WbAuthUtils();        utils.setListener(new WbAuthUtils.onSuccessListener() {            @Override            public void onSuccess(final String result, final String icon, final String name) {                runOnUiThread(new Runnable() {                    @Override                    public void run() {                        Glide.with(MainActivity.this).load(icon).into(weiboPic);                        weiboName.setText(name);                        weiboJson.setText(result);                    }                });            }            @Override            public void onFailure(String errorMessage) {                Toast.makeText(Main2Activity.this, errorMessage, Toast.LENGTH_SHORT).show();            }        });    }    @Override    protected void onActivityResult(int requestCode, int resultCode, Intent data) {        super.onActivityResult(requestCode, resultCode, data);        if (ssoHandler != null) {            ssoHandler.authorizeCallBack(requestCode, resultCode, data);        }    }}

回调工具类

创建一个回调工具类来处理微博授权结果:

public class WbAuthUtils {    private static final String TAG = "WbAuthUtils";    private static final String WEIBO_USERINFO_URL = "https://api.weibo.com/2/users/show.json?access_token=";    private static Oauth2AccessToken mAccessToken;    public static void startSinaWeiBo(SsoHandler ssoHandler) {        ssoHandler.authorize(new WbAuthListener() {            @Override            public void onSuccess(Oauth2AccessToken token) {                Log.e(TAG, "onSuccess: " + token.getToken());                Log.e(TAG, "onSuccess: " + token.getUid());                mAccessToken = token;                if (mAccessToken.isSessionValid()) {                    getSinaWeiBoInfo(token.getToken(), token.getUid());                }            }            @Override            public void cancel() {                Log.e(TAG, "微博授权取消: ");            }            @Override            public void onFailure(WbConnectErrorMessage wbConnectErrorMessage) {                Log.e(TAG, "微博授权失败: ");            }        });    }    private static void getSinaWeiBoInfo(String token, String uid) {        String url = WEIBO_USERINFO_URL + token + "&uid=" + uid;        Log.e(TAG, "请求token: " + token);        Log.e(TAG, "请求openId: " + uid);        Request request = new Request.Builder().url(url).build();        OkHttpClient okHttpClient = new OkHttpClient.Builder().build();        Call call = okHttpClient.newCall(request);        call.enqueue(new Callback() {            @Override            public void onFailure(Call call, IOException e) {                listener.onFailure(e.getMessage());            }            @Override            public void onResponse(Call call, Response response) throws IOException {                String result = response.body().string();                try {                    JSONObject jsonObject = new JSONObject(result);                    String name = jsonObject.getString("name");                    String icon = jsonObject.getString("profile_image_url");                    Log.e(TAG, "result: " + result);                    Log.e(TAG, "name: " + name);                    Log.e(TAG, "icon: " + icon);                    listener.onSuccess(result, icon, name);                } catch (JSONException e) {                    e.printStackTrace();                }            }        });    }    private static onSuccessListener listener;    public void setListener(onSuccessListener listener) {        this.listener = listener;    }    public interface onSuccessListener {        void onSuccess(String result, String icon, String name);        void onFailure(String errorMessage);    }}

布局文件

布局文件设计如下:[布局描述已移除]。主要包含一个微博登录按钮和显示微博用户信息的区域。

返回数据

微博登录成功后,会返回大量数据,约120行。[图片描述已移除]。这些数据包括用户基本信息、关注列表等详细信息。

通过以上步骤,可以实现微博登录功能的集成。整个流程涵盖了从开发者平台注册到代码实现的全过程,确保了微博功能的顺利运行。

转载地址:http://qsdl.baihongyu.com/

你可能感兴趣的文章
Python web自动化测试 —— 文件上传!
查看>>
Python Web自动化测试开发环境搭建(附安装包与虚拟机环境)
查看>>
python win32api键盘_Python win32api.keybd_event模拟键盘输入
查看>>
python Windows显示当前鼠标坐标
查看>>
python Workbook 表格宽度
查看>>
python | ggplot,一个超强的 Python 库!
查看>>
python | unoconv,一个超厉害的 Python 库!
查看>>
python | webassets,一个超强的 Python 库!
查看>>
python | werkzeug,一个不可思议的 Python 库!
查看>>
python | xlsxwriter,一个实用的 Python 库!
查看>>
python | xlwings,一个非常实用的 Excel 相关的 Python 库!
查看>>
python读取含中文的json
查看>>
python | 提升代码迭代速度的Python重载方法
查看>>
python | 深入理解Python并发编程中的GIL限制与解决方案
查看>>
Python | 爬虫实战——亚马逊搜索页监控(附详细源码)
查看>>
python | 高效使用Python工具自动生成模块文档的秘诀
查看>>
python 一个list去除另一个list中的值
查看>>
python 三大框架的 介绍。
查看>>
Python 下载的 11 种姿势,一种比一种高级!
查看>>
python读取一个文件夹下所有图片_初学Python-找出文件夹下的所有图片
查看>>