博客
关于我
安卓微博登录第三方详解
阅读量: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/

你可能感兴趣的文章
PHP获取当前页面的完整URL
查看>>
php获取文件夹中文件的两种方法
查看>>
PHP获取日期的一些方法总结
查看>>
R2学习记录
查看>>
PHP获取本周的每一天的时间
查看>>
php获取网页内容的三种方法
查看>>
R-CNN算法优化策略
查看>>
PHP规范PSR0和PSR4的理解
查看>>
php解析ipa包,获取logo
查看>>
php设置socket超时时间
查看>>
php设计模式 萨莱 pdf,PHP设计模式 建造者模式
查看>>
php设计模式之装饰器模式
查看>>
R&Python Data Science系列:数据处理(5)--字符串函数基于R(一)
查看>>
PHP设计模式:观察者模式
查看>>
php访问mysql(1)
查看>>
php详细学习1
查看>>
php语言优劣
查看>>
PHP语言最优雅的支付SDK扩展包
查看>>
PHP请求https域名发生segment fault段错误
查看>>
PHP读写XML文件
查看>>