Горячее обновление CodePush для React Native

React Native

Введение в CodePush

Несмотря на то, что в качестве кроссплатформенной среды разработки приложений React Native обеспечивает основу для динамического обновления с точки зрения динамического обновления, технология динамического обновления не так совершенна, как предполагалось. К счастью, Microsoft разработала CodePush, чтобы заполнить пробел в динамических обновлениях приложений React Native.

CodePush — это набор услуг горячего обновления для React Native и Cordova, предоставляемых Microsoft. С помощью CodePush разработчики могут напрямую развертывать обновления мобильных приложений и быстро внедрять горячие обновления кода. Официальный адрес CodePush: https://microsoft.github.io/ код-толчок/.

CodePush действует как центральный репозиторий, куда разработчики могут отправлять обновления в режиме реального времени, а клиентские приложения могут затем запрашивать обновления при запуске приложения. С помощью CodePush можно устранять ошибки и добавлять новые функции без необходимости повторной проверки и установки приложения. CodePush поддерживает следующие функции: • Поддержка развертывания обновлений кода непосредственно для пользователей; • Управление альфа-, бета- и производственными приложениями; • Поддержка горячего обновления кроссплатформенной технологии React Native и Cordova; • Поддержка обновления файлов JavaScript и ресурсов изображений;

Установка CodePush и регистрация аккаунта

Перед использованием CodePush необходимо установить инструмент командной строки CodePush и зарегистрировать учетную запись и приложение CodePush.Команда установки выглядит следующим образом:

  npm install -g code-push-cli

После завершения установки вы можете использовать команду code-push -v для проверки. Затем введите команду code-push register в терминале, и откроется страница регистрации, на которой разработчик может выбрать авторизованную учетную запись, как показано на рисунке 11-11.

在这里插入图片描述
После прохождения авторизации CodePush сгенерирует ключ доступа, скопирует ключ в терминал для завершения регистрации, как показано на рис. 11-12.
在这里插入图片描述
В дополнение к команде регистрации кода, часто используемые команды CodePush: • вход в систему с помощью кода: вход в систему CodePush. • Выход из Code-Push: выход из CodePush. • Кодовый ключ доступа ls: Список ключей доступа • ключ доступа с кодовым нажатием rm : удалить ключ доступа Чтобы сервер CodePush узнал о созданном приложении, его также необходимо зарегистрировать на сервере, команда регистрации выглядит следующим образом:

code-push app add <appName> <platform> react-native

Среди них appName представляет имя приложения, а платформа представляет собой платформу приложения. После ввода команды в терминал можно завершить регистрацию приложения, как показано на рис. 11-13.

在这里插入图片描述
При добавлении приложения в CodePush необходимо указать платформу приложения.После успешной регистрации приложения CodePush каждое приложение будет генерировать два ключа развертывания. Среди них Production — ключ развертывания для производственной среды, а Staging — ключ развертывания для моделируемой среды. После успешной регистрации вы можете просмотреть информацию о зарегистрированном приложении CodePush по адресу https://appcenter.ms/apps, как показано на рисунке 11-14.
在这里插入图片描述
Следует отметить, что если вам необходимо одновременно выпускать горячие обновления для платформ Android и iOS, вам необходимо зарегистрировать два приложения и получить два набора ключей развертывания при регистрации приложения CodePush. Помимо команды добавления приложения code-push, команды CodePush для управления приложениями включают: • добавление приложения с отправкой кода: добавление нового приложения в учетную запись для входа. • code-push app remove : удаляет существующее приложение из учетной записи для входа. • переименование приложения с помощью кода: переименование существующего приложения. • список приложений для отправки кода: список всех приложений под учетной записью входа. • Передача приложения с помощью кода: передача права собственности на приложение другой учетной записи.

Интеграция CodePush SDK

После завершения создания учетной записи CodePush и регистрации приложения следующим шагом будет интеграция CodePush SDK в приложение React Native. Сначала используйте команду react-native init, чтобы создать новый проект React Native следующим образом:

react-native init codepush

Затем установите плагин react-native-code-push.Команда установки выглядит следующим образом:

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

Затем запустите команду ссылки, чтобы добавить реагировать нативный кодовый толкающий виджет в проект, следующим образом:

react-native link react-native-code-push

В это время система запросит ключ развертывания для приложений iOS и Android. На этом этапе вы можете ввести промежуточную версию приложения. Если вы не введете, вы можете напрямую нажать кнопку [ВВОД], чтобы пропустить, как показано ниже:

? What is your CodePush deployment key for Android (hit <ENTER> to ignore)
? What is your CodePush deployment key for iOS (hit <ENTER> to ignore)

Если вы забыли ключ развертывания, вы можете проверить его с помощью следующей команды, как показано на рисунке 11-14.

在这里插入图片描述
Следует отметить, что при использовании команды react-native link для связывания нативной библиотеки, если вы напрямую пропустите ввод ключа развертывания, вы также можете настроить его вручную на нативной стороне. После успешного добавления react-native-code-push в проект CodePush вам все равно нужно внести некоторые изменения в собственный проект.

Вручную интегрируйте CodePush SDK

При использовании реактивной ссылки для связывания с собственной библиотекой, если вы пропустите ввод ключа развертывания, вы также можете вручную настроить его на собственной стороне. Для iOS используйте Xcode, чтобы открыть проект iOS в каталоге ios/codepush.xcodeproj, затем выберите проект в PROJECT в представлении навигации Xcode, а затем выберите [Информация] → [Конфигурации] → [Добавить] → [Дублировать выпуск Configuration] , а затем введите ключ Staging, как показано на рисунке 11-15.

在这里插入图片描述
Затем выберите [добавить пользовательскую настройку] на панели «Настройки сборки», чтобы добавить пользовательскую конфигурацию среды сборки, как показано на рис. 11-17.
在这里插入图片描述
Затем на клавише развертывания пользователь, определенный в показанном на рисунке 11-18.
在这里插入图片描述
Откройте файл Info.plist и введите $(CODEPUSH_KEY) в параметре Value столбца CodePushDeploymentKey, как показано на рис. 11-19.
在这里插入图片描述
Для Android используйте Android Studio, чтобы открыть проект Android, а затем импортируйте библиотеку react-native-code-push в файл android/settings.gradle проекта, как показано ниже:

include ':react-native-code-push'
project(':react-native-code-push').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-code-push/android/app')

Затем свяжите зависимости библиотеки react-native-code-push в файле app/build.gradle следующим образом:

apply from: "../../node_modules/react-native-code-push/android/codepush.gradle"

dependencies {
    compile project(':react-native-code-push')
}

Затем зарегистрируйте CodePush в методе getPackages() класса MainApplication следующим образом:

@Override
protected String getJSBundleFile() {
    return CodePush.getJSBundleFile();
}
    
@Override
public boolean getUseDeveloperSupport() {
    return BuildConfig.DEBUG;
}

@Override
        protected List<ReactPackage> getPackages() {
            return Arrays.<ReactPackage>asList(
               new MainReactPackage(),
               new CodePush(BuildConfig.codepushkey,getApplicationContext(), BuildConfig.DEBUG)
            );
        }

Поскольку ключ развертывания CodePush разделен на производственную среду и тестовую среду, его можно установить в файле build.gradle следующим образом:

android {
    
     releaseStaging {
        buildConfigField "String", "CODEPUSH_KEY", '"<INSERT_STAGING_KEY>"'
        }
 
     release {
        buildConfigField "String", "CODEPUSH_KEY", '"<INSERT_PRODUCTION_KEY>"'
        }
    }
}

На этом нативная конфигурация, необходимая для горячего обновления CodePush, завершена, и вам нужно только изменить логику React Native.

Пример горячего обновления iOS-приложения

Используйте Xcode, чтобы открыть файл ios/codepush.xcodeproj, а затем откройте файл AppDelegate.m Вы можете видеть, что код, связанный с jsCodeLocation, выглядит следующим образом:

#if DEBUG
  return [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index" fallbackResource:nil];
#else
  return [CodePush bundleURL];
#endif
}

Как видно из приведенного выше кода, в состоянии, отличном от отладки, адрес загружаемого ресурса системы по умолчанию — это bundleURL CodePush.Чтобы загрузить ресурс пакета CodePush, вам необходимо вручную изменить параметр компиляции на Release. . В частности, откройте меню Xcode, а затем выберите [Продукт] → [Схема] → [Редактировать схему], как показано на рисунке 11-19.

在这里插入图片描述
После завершения приведенной выше собственной настройки откройте файл index.js React Native и внесите следующие изменения в файл index.js.

import React, {Component} from 'react';
import {AppRegistry, Platform, StyleSheet, Text, View} from 'react-native';
import {name as appName} from './app.json';
import codePush from 'react-native-code-push'

type Props = {};
export default class App extends Component<Props> {

    constructor(props) {
        super(props);
        this.state = {
            message: ''
        };
    }

    componentDidMount() {
        codePush.checkForUpdate().then((update) => {
            if (update) {
                this.setState({message: '有新的更新!'})
            } else {
                this.setState({message: '已是最新,不需要更新!'})
            }
        })
    }

    render() {
        return (
            <View style={styles.container}>
                <Text style={styles.welcome}>版本号 1.0</Text>
                <Text style={styles.instructions}>{this.state.message}</Text>
            </View>
        );
    }
}

//省略样式文件

AppRegistry.registerComponent(appName, () => codePush(App));

Как показано выше, функция жизненного цикла componentDidMount проверит, нужно ли обновлять приложение CodePush, и, если обнаружит, что обновление требуется, загрузит обновление приложения CodePush. Перекомпилируйте и запустите приложение, результат показан на рис. 11-21.

在这里插入图片描述
Затем обновите номер версии, отображаемый в файле index.js, до 1.1 и измените содержимое следующим образом:

render() {
        return (
            <View style={styles.container}>
                <Text style={styles.welcome}>版本号 1.1</Text>
                <Text style={styles.instructions}>{this.state.message}</Text>
            </View>
        );
    }

Затем выпустите обновление для iOS с помощью инструмента командной строки Code-Push Release, как показано ниже:

code-push release-react codepush ios

Подождите, пока система упакует и выпустит файл пакета горячего обновления.После успешного выпуска закройте и снова откройте приложение.Вы можете видеть, что приложение запросит обновление при запуске, как показано на рисунке 11-22.

在这里插入图片描述
После обнаружения обновления система загрузит последний ресурс и обновит его.Когда приложение будет закрыто и снова открыто, вы можете увидеть эффект успешного обновления приложения. Кроме того, вы также можете использовать команду развертывания code-push, предоставляемую CodePush, для просмотра состояния обновления, как показано на рис. 11-23.
在这里插入图片描述
Подобно горячему обновлению приложения iOS, горячее обновление приложения Android также может использовать этот шаг.