本文共 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/