前言

至简微博客户端APP根据微博开放品台API获取微博内容,UI展示
主要功能点:

  • 好友微博列表
  • 公共微博列表
  • 微博详情
  • 用户个人信息
  • 微博个人信息
  • 微博评论列表
  • 每日一图
  • 粉丝列表
  • 关注列表
  • 关注数、粉丝数、微博数、收藏数等

效果图





源码下载

如果需要源码,请联系我邮箱 nyyin@vip.qq.com

开发环境

  • kotlin
  • Retrofit
  • Rxjava
  • MVP
  • AndroidX
  • Glide

具体实现

一 微博平台

官网: https://open.weibo.com/wiki/%E9%A6%96%E9%A1%B5
打开微博平台官网注册,因为是开发APP,所以选择移动应用

这里开发AndroidAPP,选择Android SDK下载
这个SDK主要是微博分享、微博授权等功能的具体实现的工具,微博提供了这一个方便的SDK方便开发者开发。

而对于微博API的具体调用,SDK中并没有什么帮助,需自己调用,文中开发的APP使用Retrofit + Rxjava来实现。

创建应用完成后如图:

应用注册成功后,会生成对应的appkey和appsecret值。另外需要设置的值有授权回调页。
授权回调页默认设置为:https://api.weibo.com/oauth2/default.html

二 集成SDK

AS中构建Android APP工程,集成微博SDK

api 'com.sina.weibo.sdk:core:2.0.3:openDefaultRelease@aar'

三 授权

 private fun launchScope() {if (this.isFinishing) {return}val mAccessToken = AccessTokenKeeper.readAccessToken(this);if (mAccessToken.isSessionValid) {BlogApplication.mAccessToken = mAccessTokenlaunchMain()return}getToken()}private fun getToken() {mSsoHandler = SsoHandler(this)mSsoHandler.authorize(object : WbAuthListener {override fun onSuccess(token: Oauth2AccessToken?) {LogUtil.i(token?.toString())val isValid = token?.isSessionValidif (isValid == true) {BlogApplication.mAccessToken = tokenAccessTokenKeeper.writeAccessToken(this@LoginActivity, token)launchMain()}}override fun onFailure(p0: WbConnectErrorMessage?) {LogUtil.i("err code:" + p0?.errorCode + ", err msg:" + p0?.errorMessage)UiUtil.toast(this@LoginActivity, "授权失败,请重试")}override fun cancel() {LogUtil.i("on cancel.")UiUtil.toast(this@LoginActivity, "授权已取消")}})}private fun launchMain() {val intent = Intent(this, MainActivity::class.java)startActivity(intent)finish()}override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {super.onActivityResult(requestCode, resultCode, data)mSsoHandler.authorizeCallBack(requestCode, resultCode, data)}

微博授权过程,以上代码即可实现。

以上授权成功后,AccessTokenKeeper类 会获取到四个值:

 private static final String KEY_UID = "uid";private static final String KEY_ACCESS_TOKEN = "access_token";private static final String KEY_EXPIRES_IN = "expires_in";private static final String KEY_REFRESH_TOKEN = "refresh_token";

uid、token、expires_in、refresh_token
这四个值其中token和uid尤为重要,其他不重要。授权过程中需要用户在登录页输入用户名和密码,但是APP是获取不到这些信息的,这些信息的页面不受APP控制,由微博登录页显示获取,然后,微博根据用户名和密码返回给APP以上四个值,这样一来APP与用户密码信息隔离,这就是auth2.0认证的大致过程了

四 调用微博API

interface WeiboRequest {@GET("https://api.weibo.com/2/statuses/home_timeline.json")fun getStatusesHomeTimeLineMore(@Query("since_id") since_id: String, @Query("count") count: Int): Observable<StatusesResponse>@GET("https://api.weibo.com/2/statuses/home_timeline.json")fun getStatusesHomeTimeLineRefresh(@Query("max_id") max_id: String, @Query("count") count: Int): Observable<StatusesResponse>@GET("https://api.weibo.com/2/short_url/share/counts.json")fun getShortUrlExpand(@Query("url_short") url_short: String): Observable<ShortUrlResponse>// 必须是自己发出的微博@GET("https://api.weibo.com/2/statuses/show.json")fun getDetailInfo(@Query("id") id: String): Observable<StatusesDetailResponse>@GET("https://api.weibo.com/2/comments/show.json")fun getComments(@Query("id") id: String, @Query("since_id") since_id: String, @Query("max_id") max_id: String): Observable<CommentsResponse>@GET("https://api.weibo.com/2/users/show.json")fun getUserInfo(@Query("uid") uid: String, @Query("screen_name") screenName: String): Observable<UserInfoResponse>@GET("https://api.weibo.com/2/friendships/friends.json")fun getFollowList(@Query("uid") uid: String, @Query("cursor") cursor: Long): Observable<FollowListResponse>@GET("https://api.weibo.com/2/friendships/followers.json")fun getFollowerList(@Query("uid") uid: String, @Query("cursor") cursor: Long): Observable<FollowListResponse>@GET("https://api.weibo.com/2/statuses/public_timeline.json")fun getPublicTimeLine(@Query("page") page: Long): Observable<StatusesResponse>
}

以上是APP中用到的微博的一部分API,网络请求使用Retrofit+Rxjava来实现的

请求关注好友的微博列表,代码如下:

override fun getStatusesHomeLineLoad() {RetrofitClient.instance.create(WeiboRequest::class.java).getStatusesHomeTimeLineMore(sinceId, COUNT).subscribeOn(Schedulers.newThread()).observeOn(AndroidSchedulers.mainThread()).subscribe(object : AbstractObserver<StatusesResponse>() {override fun onSuc(t: StatusesResponse) {LogUtil.i("statuses response :${t}")iView?.setStatuses(t.statuses)}override fun onFail(e: Throwable) {}})}

以上代码获取微博列表,返回json信息,微博对象如下:

class Statuses: Serializable {var visible: Visible? = nullvar created_at: String? = nullvar id: Long = 0var idstr: String? = nullvar mid: String? = nullvar can_edit: Boolean = falsevar version: Int = 0var show_additional_indication: Int = 0var text: String? = nullvar textLength: Int = 0var source_allowclick: Int = 0var source_type: Int = 0var source: String? = nullvar favorited: Boolean = falsevar truncated: Boolean = falsevar in_reply_to_status_id: String? = nullvar in_reply_to_user_id: String? = nullvar in_reply_to_screen_name: String? = nullvar pic_urls: List<PicUrls>? = nullvar thumbnail_pic: String? = nullvar bmiddle_pic: String? = nullvar original_pic: String? = nullvar geo: Geo? = nullvar is_paid: Boolean = falsevar mblog_vip_type: Int = 0var user: User? = nullvar retweeted_status: Statuses? = nullvar annotations: List<Annotations>? = nullvar reposts_count: Int = 0var comments_count: Int = 0var attitudes_count: Int = 0var pending_approval_count: Int = 0var isLongText: Boolean = falsevar reward_exhibition_type: Int = 0var hide_flag: Int = 0var mlevel: Int = 0var biz_feature: Long = 0var expire_time: Long = 0var page_type: Int = 0var hasActionTypeCard: Int = 0var darwin_tags: List<String>? = nullvar hot_weibo_tags: List<String>? = nullvar text_tag_tips: List<String>? = nullvar mblogtype: Int = 0var userType: Int = 0var extend_info: ExtendInfo? = nullvar more_info_type: Int = 0var cardid: String? = nullvar number_display_strategy: NumberDisplayStrategy? = nullvar positive_recom_flag: Int = 0var content_auth: Int = 0var gif_ids: String? = nullvar is_show_bulletin: Int = 0var comment_manage_info: CommentManageInfo? = nullvar pic_num: Int = 0
}

五 UI展示

获取微博列表后,UI展示:

具体UI描述:

  • 头像
  • 名字
  • 微博发布时间
  • 微博内容
  • 微博图片
  • 转发数
  • 评论数
  • 点赞数
  • 转发微博内容等

个人信息展示:

  • 头像
  • 名字
  • 用户描述
  • 省市
  • 注册时间
  • 收藏数、微博数、关注数、粉丝数
  • 认证原因
  • 博客地址
  • 信用分数

声明

代码仅作为学习之用,严禁商业之用。
如有任何问题,不负责任!!


欢迎关注公众号:技术印象


至简微博Android客户端APP开发以及源码相关推荐

  1. 开源 AR 安卓APP:android AR app 开发及源码

    开发环境: android studio2.3.1 已经安装好了 android SDK.JDK.NDK. 测试环境: 模拟器:Genymotion(API 21) 真机(android版本6.0) ...

  2. 网上超市app开发现成源码对接

    网上超市app开发,网上超市app开发现成源码,网上超市app开发源码对接.针对很多人而言,便捷的消费方法,能让客户寻找自已必须的产品.网上超市APP开发设计产品,客户可以网上购买酒水饮品.日用百货商 ...

  3. 思维导图APP开发独立源码部署

    思维导图APP开发,思维导图APP开发独立源码部署.思维模式决策了为人处事的高效率,逻辑思维导图给很多人产生过益处,乃至可以说成取得成功的重要.逻辑思维导图APP不但能让用户线上开创观念导图,还可以把 ...

  4. Vue.js 3.0快速入门(附电影购票APP开发实战源码)

    前言 文档笔记来源:kuangshenstudy,清华大学出版社,结合视频资源食用更佳,相关资源源码在文末,有需要自取. 一.概述 Vue是什么? Vue.js是基于JavaScript的一套MVVC ...

  5. Android笔记 Android客户端从服务器获取源码乱码demo

    1构建web工程 新建web dynamic项目在login.jsp body体随便写一些中文 <%@ page language="java" contentType=&q ...

  6. 习题宝典Android版App展示及源码

    涉及知识点 sqlite数据库(用于存储习题) HelloCharts 开源库 截屏分享至qq.微信等 Bmob后端云 TextView显示HTML内容(目的是使用< img> 标签显示图 ...

  7. 婚恋交友约会app源码一对一一对多直播APP源码+android客户端+java服务端源码

    一对一直播"它是移动直播时代的产物,随着5G移动互联网时代的到来,和智能手机普及化,以前被压抑的全民直播需求,尚需一个引爆点引爆,一对多的直播模式已不能满足大众的需求,他们渴望更多的互动性与 ...

  8. (基于安卓的毕业设计)日语学习软件APP开发(附源码+论文)

    大家好!我是职场程序猿,感谢您阅读本文,欢迎一键三连哦.

  9. android 腾讯微博授权,5腾讯微博Android客户端开发获取请求用户授权Request Token.pdf...

    腾讯微博Android客户端开发 博客:/coolszy Android Android 腾讯微博AAnnddrrooiidd客户端开发 RequestToken RequestToken --获取请 ...

最新文章

  1. android 8.0 ,9.0 静态广播不显示问题处理
  2. (原创)不带模板的DOI输出EXCEL
  3. 【LeetCode-面试算法经典-Java实现】【109-Convert Sorted List to Binary Search Tree(排序链表转换成二叉排序树)】...
  4. java笔试题(一):斐波那契数列
  5. 开源中国 OsChina Android 客户端源码分析(7)二维码生成对话框
  6. 《Python Cookbook 3rd》笔记(4.10):序列上索引值迭代
  7. 从入门到精通 pdf_【推荐】铅笔素描从入门到精通pdf|素描基础教程电子书下载!...
  8. PPDet:减少Anchor-free目标检测中的标签噪声,小目标检测提升明显
  9. 发送当前IP到我的手机
  10. android视频壁纸源码,Android 视频壁纸
  11. linux 之 查看文件夹大小(du),Linux查看文件或文件夹大小du命令
  12. 第五章-畅销书排行榜
  13. 树莓派监测CPU温度
  14. 无线桥连后不能访问服务器,路由器设置无线桥接后不能登录副路由器怎么办?...
  15. 华为云mysql教程_华为云+NextCloud(私人云盘搭建)
  16. 安徽师大附中%你赛day6 T3 Hamsters [POI2010]CHO-Hamsters 解题报告
  17. 下周一直播 | 深度学习算法可视化调优实战演示
  18. 阿里巴巴国际站如何发布高质量的产品?
  19. python pygame 简单小游戏
  20. TCP/IP网络简介(来自与51CTO学院视频授课内容)

热门文章

  1. 锌矿如何计算机每吨价格,锌精矿价格计算方法
  2. 怎样把手机搜索的计算机放到桌面上,手机便签记事本内容怎么发送到电脑桌面上?...
  3. 利用ps制作一些好看的渐变图
  4. PDF-XChange编辑器可快速添加笔记!自定义快捷键!保姆级教程!
  5. 2020联通光猫超级管理密码 - PT952G
  6. c++ promer和c++ primer Pluse下载
  7. Android 设备通过WIFI传输数据 - 点对点传输
  8. 用Java代码实现类似Excel单变量求解的功能(Case study-Facebook User Base Growth )
  9. 网络安全-DNS欺骗与钓鱼网站
  10. messenger下载_MSN Messenger 50泄漏其他人有没有其他人知道如何通过下载MSN Messenger的副本到他们的...