Code-Push入門

一火脉、參考資料

1-1.教程:

https://github.com/Microsoft/code-push/tree/master/cli
https://github.com/Microsoft/react-native-code-push
https://github.com/rccoder/blog/issues/27

1-2.自建server:

https://github.com/lisong/code-push-server
https://github.com/lisong/code-push-web

二缰揪、簡易流程說明

2-1.安裝

npm install -g code-push-cli

2-2.注冊 CodePush

code-push register

會自動打開瀏覽器彈出注冊界面,注冊完成之后會得到一個 token导而,復制后填寫在 Terminal 里面即可。
注冊后對應的有登錄、登出

code-push login
code-push logout

2-3.注冊應用

code-push app add Demo-Android
code-push app add Demo-iOS

每個 APP 都會得到 ProductionStaging 狀態(tài)的兩個 Key:

Demo-iOS
┌────────────┬──────────────────────────────────────────────────────────────────┐
│ Name       │ Deployment Key                                                   │
├────────────┼──────────────────────────────────────────────────────────────────┤
│ Production │ VzNI1ecFmgN8RWukmmqNZOP2B1t_fd416e98-f637-486e-9c2d-26fc45e04c60 │
├────────────┼──────────────────────────────────────────────────────────────────┤
│ Staging    │ uwuP9LlIuNWonIBzQ3OpRxwHCfQ7fd416e98-f637-486e-9c2d-26fc45e04c60 │
└────────────┴──────────────────────────────────────────────────────────────────┘

Demo-android
┌────────────┬──────────────────────────────────────────────────────────────────┐
│ Name       │ Deployment Key                                                   │
├────────────┼──────────────────────────────────────────────────────────────────┤
│ Production │ ERIHSRO-b2fO8wQbvxpPjeLPoxEjfd416e98-f637-486e-9c2d-26fc45e04c60 │
├────────────┼──────────────────────────────────────────────────────────────────┤
│ Staging    │ iB_a1t69Jx_r2MqH0Z9yecw55kFofd416e98-f637-486e-9c2d-26fc45e04c60 │
└────────────┴──────────────────────────────────────────────────────────────────┘

一個是測試環(huán)境导绷、一個是生產環(huán)境,當然也可以自定義名稱

為什么要注冊兩個 APP
CodePush 在發(fā)布新 bundle 的時候目前只能一個一個平臺發(fā)屎飘,為了保證你的 history 看起來不是那么的亂妥曲,建議直接分成兩個 APP 處理

2-4.集成SDK

npm install --save react-native-code-push
react-native link react-native-code-push

期間會提示你輸入 iOS 和 Android 端的 key,這里輸入你用 CodePush 注冊 APP 時產生的 key枚碗,這里我們先可以都輸入每個 Staging 的 key逾一。
如果不幸你忘記了之前產生的 key,可以輸入以下的命令查看:

code-push deployment ls WeHIT-Android

2-5.React Native 源碼集成

import codePush from "react-native-code-push";

class MyApp extends Component {
}

MyApp = codePush(MyApp);

ES7裝飾器

import codePush from "react-native-code-push";

@codePush
class MyApp extends Component {
}

配置

let codePushOptions = { checkFrequency: codePush.CheckFrequency.MANUAL };//出彈窗提示
let codePushOptions = { checkFrequency: codePush.CheckFrequency.ON_APP_RESUME }//自動更新
class MyApp extends Component {
    onButtonPress() {
        codePush.sync({
            updateDialog: true,
            installMode: codePush.InstallMode.IMMEDIATE
        });
    }

    render() {
        return (
            <View>
                <TouchableOpacity onPress={this.onButtonPress}>
                    <Text>Check for updates</Text>
                </TouchableOpacity>
            </View> 
        )
    }
}

MyApp = codePush(codePushOptions)(MyApp);

2-6.發(fā)布

code-push release-react <appName> <platform>

2-6-1 一步發(fā)布

自動默認打包肮雨,在項目根目錄執(zhí)行:

  • Android 推包
code-push release-react Demo-Android android
  • iOS 推包
code-push release-react Demo-ios ios

2-6-2 兩步發(fā)布

我們自己打好包遵堵,再發(fā)布

    1. 打包
      用你自己的方式打包
    1. 發(fā)布
// code-push release <應用名稱> <Bundles所在目錄> <對應的應用版本>
--deploymentName 更新環(huán)境 staging時不需要這個
--description 更新描述
--mandatory 是否強制更新 默認否
    
code-push release Demo-Android ./bundles 1.0.0 --description “Android Update”
code-push release Demo-iOS ./bundles 1.0.0 --description “iOS Update”

更多的參數的使用可見官方文檔

code-push release <appName> <updateContents> <targetBinaryVersion>
[--deploymentName <deploymentName>]
[--description <description>]
[--disabled <disabled>]
[--mandatory]
[--noDuplicateReleaseError]
[--rollout <rolloutPercentage>]
[--privateKeyPath <pathToPrivateKey>]

三、項目特殊業(yè)務

3-1 圖標的熱更新方案

我們項目的圖標庫之前一直用的是iconfont的字體文件怨规,字體是隨著包走的陌宿,無法熱更新。于是在iOS上的解決方案是讓字體動態(tài)加載波丰,也就是我們到bundle里獲取到字體的路徑壳坪,再調用原生提供的方法,讓原生進行加載掰烟。但這個方案在安卓上實現有些困難爽蝴,目前的方案是把字體調整為svg的方式。

?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末纫骑,一起剝皮案震驚了整個濱河市蝎亚,隨后出現的幾起案子,更是在濱河造成了極大的恐慌先馆,老刑警劉巖发框,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異煤墙,居然都是意外死亡梅惯,警方通過查閱死者的電腦和手機宪拥,發(fā)現死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來铣减,“玉大人她君,你說我怎么就攤上這事♂慵撸” “怎么了犁河?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長魄梯。 經常有香客問我,道長宾符,這世上最難降的妖魔是什么酿秸? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮魏烫,結果婚禮上辣苏,老公的妹妹穿的比我還像新娘。我一直安慰自己哄褒,他們只是感情好稀蟋,可當我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著呐赡,像睡著了一般退客。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上链嘀,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天萌狂,我揣著相機與錄音,去河邊找鬼怀泊。 笑死茫藏,一個胖子當著我的面吹牛,可吹牛的內容都是我干的霹琼。 我是一名探鬼主播务傲,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼枣申!你這毒婦竟也來了售葡?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤糯而,失蹤者是張志新(化名)和其女友劉穎天通,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體熄驼,經...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡像寒,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年烘豹,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片诺祸。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡携悯,死狀恐怖,靈堂內的尸體忽然破棺而出筷笨,到底是詐尸還是另有隱情憔鬼,我是刑警寧澤,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布胃夏,位于F島的核電站轴或,受9級特大地震影響,放射性物質發(fā)生泄漏仰禀。R本人自食惡果不足惜照雁,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望答恶。 院中可真熱鬧饺蚊,春花似錦、人聲如沸悬嗓。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽包竹。三九已至耸弄,卻和暖如春荐吉,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工鹊碍, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留击儡,地道東北人袄秩。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓现柠,卻偏偏與公主長得像,于是被迫代替她去往敵國和親双絮。 傳聞我的和親對象是個殘疾皇子浴麻,可洞房花燭夜當晚...
    茶點故事閱讀 44,979評論 2 355

推薦閱讀更多精彩內容