Readhub App 上架 Google Play Store 實錄及技術要點總結

Readhub 是一個專一於科技新聞實時分享的網站,從一開始發佈到如今一直都是我獲取信息的重要渠道,目前只有網頁端和小程序可用,一次偶然的靈感讓我決定本身作一個客戶端。html

成品展現:JReadHubjava

第一步:抓包

想要獲取數據,首先要知道獲取數據的 API,在沒有任何官方文檔的前提下,只有抓包可以解決這個問題。android

工具: Fidder 4git

使用方法: Fiddler - 超好用的http抓包工具使用介紹github

抓包結果:數據庫

public static final String HOST = "https://api.readhub.me/";

// 熱門話題列表
@GET("topic")
Observable<DataListBean<TopicBean>> getTopicList(
        @Query("lastCursor") Long lastCursor,
        @Query("pageSize") int pageSize
);

// 其它模塊新聞 type
public static final String TYPE_NEWS = "news";// 科技動態
public static final String TYPE_TECHNEWS = "technews";// 開發者資訊
public static final String TYPE_BLOCKCHAIN = "blockchain";// 區塊鏈快訊
public static final String TYPE_JOBS = "jobs";// 招聘詳情

// 其餘模塊新聞列表
@GET("{type}")
Observable<DataListBean<NewsBean>> getNewsList(
        @Path("type") @Constants.Type String type,
        @Query("lastCursor") Long lastCursor,
        @Query("pageSize") int pageSize
);

// 即便查看
@GET("topic/instantview")
Observable<InstantReadBean> getTopicInstantRead(@Query("topicId") String topicId);

// 話題詳情
@GET("topic/{topic_id}")
Observable<TopicDetailBean> getTopicDetail(@Path("topic_id") String topicId);

// 相關話題
@GET("topic/related")
Observable<List<RelevantTopicBean>> getRelateTopic(@Query("entityId") String topicId,
                                                  @Query("eventType") int eventType,
                                                  @Query("order") long order,
                                                  @Query("t") long timeStamp);

// 最新消息
@GET("topic/newCount")
Observable<NewTopicCountBean> getNewTopicCount(@Query("latestCursor") Long lastCursor);
複製代碼

第二步:開發

特色

  • 採用 Google Material Design 風格
  • 採用 MVP + dagger 2 架構進行解耦
  • 網絡請求使用 Retrofit + RxJava
  • 本地數據庫採用 Room + RxJava
  • 主題切換,支持夜間模式
  • 集成 Tinker 並支持應用內更新
  • 側滑返回
  • 支持 CustomTabs
  • 新話題懸浮提示
  • 使用矢量圖減小安裝包體積

項目預覽——夜間模式

起始頁 主菜單 首頁
news
news
drawer
即時查看 話題詳情 文章網頁
news
news
drawer
本地搜索 設置 關於
news
news
drawer

項目預覽——藍色主題(默認)

起始頁 主菜單 首頁
news
news
drawer
即時查看 話題詳情 文章網頁
news
news
drawer
本地搜索 設置 關於
news
news
drawer

使用到的第三方開源庫

項目名稱 簡介
RxJava 一個專一於異步編程與控制可觀察數據(或者事件)流的 API
RxAndroid 在 Android 中使用 RxJava
Retrofit HTTP 請求工具庫
ButterKnife 強大的註解框架,提供視圖和事件綁定
Dagger 依賴注入框架
Fragmentation 強大的 Fragment 管理庫
ExpandableLayout 支持展開和收縮子 View 的 Layout
FlowLayout Android 流式佈局,支持單選、多選等,適合用於產品標籤等
leakcanary 使用於 Android 和 Java 和內存泄漏檢查工具
AgentWeb Android WebView 框架
Android-HeaderAndFooterRecyclerView 支持添加頭部和尾部的 RecyclerView
Android-Debug-Database 用於調試 Android SQLite 和 Shared preferences 的庫
Bugly 幫助開發者快速發現並解決異常,同時掌握產品運營動態,及時跟進用戶反饋
Tinker Android 熱修復解決方案,支持 dex,library 和資源更新且不用從新安裝 app
walle Android Signature V2 Scheme 簽名下的新一代渠道包打包神器

使用到的工具/網站

網站名稱 簡介
Iconfont 阿里巴巴矢量圖標庫,提供了本項目中的大部分矢量圖
aconvert 在線調整圖片大小(PNG, JPG 和 GIF)
convertio 在線圖像文件轉換器,支持 SVG 轉換成 PNG
logoko 在線 logo 設計
圖幫主 在線平面設計
shields metadata 圖標設計
compresspng 在線壓縮 PNG 圖像

感謝

第三步:申請各大應用市場的開發者帳號

要上架到應用市場,必需要申請相應平臺的開發者帳號,目前國內主流的應用市場開發者帳號申請地址以下:編程

  • Google Play (註冊須要綁定一個可用於境外支付的信用卡,費用是 29 美刀)
  • 豌豆莢、PP 助手、YunOS 應用商店等(首先須要實名認證,而後須要申請 App 的軟件著做權或者上傳一份開發者聲明,本 App 由於該平臺不容許我的上架新聞類應用被拒絕。。。)
  • 騰訊應用寶(實名認證 + 軟件著做權)
  • 酷安市場(之因此叫酷安,是由於他們只接受比較庫的應用,再次被拒絕。。。)
  • 小米應用市場(實名認證 + 。。。)

第四步:打包發佈

多渠道打包工具: 強烈推薦多渠道打包神器 —— walle小程序

用法: Walle多渠道打包&Tinker熱修復api

總結

一個 App 從構思到上架,仍是須要花很多精力和時間的,若是沒有充足的業餘時間,即便功能簡單的 App 也是不容易作好的。若是能在這個過程當中感覺到親自打磨產品的激情和樂趣,那將會對產品質量產生無盡的力量,但願每一個開發者都能作出本身心儀的 App!網絡

最後,若是文章內容對你有幫助,歡迎你們到 Github 給我個 Star:JReadHub,或者對這個庫有什麼改進的建議,給我提 Issue 或者 PR,你們共同進步!

相關文章
相關標籤/搜索