美文网首页
Code-Push入门

Code-Push入门

作者: 哪吒闹海全靠浪 | 来源:发表于2018-07-10 15:52 被阅读0次

    一、参考资料

    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 状态的两个 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 │
    └────────────┴──────────────────────────────────────────────────────────────────┘
    

    一个是测试环境、一个是生产环境,当然也可以自定义名称

    为什么要注册两个 APP
    CodePush 在发布新 bundle 的时候目前只能一个一个平台发,为了保证你的 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.发布

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

    2-6-1 一步发布

    自动默认打包,在项目根目录执行:

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

    2-6-2 两步发布

    我们自己打好包,再发布

      1. 打包
        用你自己的方式打包
      1. 发布
    // code-push release <应用名称> <Bundles所在目录> <对应的应用版本>
    --deploymentName 更新环境 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>]
    

    三、项目特殊业务

    3-1 图标的热更新方案

    我们项目的图标库之前一直用的是iconfont的字体文件,字体是随着包走的,无法热更新。于是在iOS上的解决方案是让字体动态加载,也就是我们到bundle里获取到字体的路径,再调用原生提供的方法,让原生进行加载。但这个方案在安卓上实现有些困难,目前的方案是把字体调整为svg的方式。

    相关文章

      网友评论

          本文标题:Code-Push入门

          本文链接:https://www.haomeiwen.com/subject/unraqftx.html