Как показать текущую метку версии CodePush в моем приложении React Native для Android?

Ищу что-то вроде: <Text>VERSION={CodePush.VersionLabel}</Text>

Где CodePush.VersionLabel — это что-то вроде «v6», отображаемое в code-push deployment ls <MyApp>

Я хотел бы показать это внизу экрана входа в систему.


person Doug    schedule 30.09.2016    source источник


Ответы (4)


componentDidMount(){
    codePush.getUpdateMetadata().then((metadata) =>{
      this.setState({label: metadata.label, version: metadata.appVersion, description: metadata.description});
    });
}

render() {
    return(
        <Text>{this.state.version}.{this.state.label}</Text>
    );
}

Примечание. Свойство .label — это внутренний номер сборки, используемый CodePush (например, v24).

person Doug    schedule 02.10.2016
comment
metadata будет null, если это пакет codepush, упакованный с двоичными github.com/Microsoft/react-native-code-push/blob/master/docs/ - person arush_try.com; 08.06.2018
comment
@julestroong, потому что информация о пакете считывается из какого-то внутреннего файла codepush через API асинхронного ввода-вывода - person grexlort; 29.05.2019

Если доступных обновлений нет, getUpdateMetadata() возвращает null...

Обходной путь:

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

async function getAppVersion() {
    const [{ appVersion }, update] = await Promise.all([
    codePush.getConfiguration(),
    codePush.getUpdateMetadata()
    ]);

    if (!update) {
        return `v${appVersion}`;
    }

    const label = update.label.substring(1);
    return `v${appVersion} rev.${label}`;
};

export { getAppVersion };

Пример вывода: v1.4.4" ИЛИ v1.4.4 rev.5" в зависимости от состояния.

person Greg R Taylor    schedule 24.06.2019

Вот пример того, как использовать его в качестве пользовательского хука.

<сильный>1. Подготовьте крючок

import { useEffect, useState } from 'react'
import codePush from 'react-native-code-push'
import DeviceInfo from 'react-native-device-info'

async function getOTAVersion() {
  try {
    const update = await codePush.getUpdateMetadata()

    return update ? update.label : null
  } catch (error) {
    return null
  }
}

export function useOTAVersion() {
  const [appVersion, setAppVersion] = useState(DeviceInfo.getReadableVersion())

  useEffect(() => {
    getOTAVersion().then((OTAVersion) => {
      if (OTAVersion) {
        setAppVersion(`${appVersion}/${OTAVersion}`)
      }
    })
  }, [])

  return { appVersion }
}

<сильный>2. Используйте хук внутри функциональных компонентов

import { useOTAVersion } from 'your/hooks'

const CmpExample = () => {
  const { appVersion } = useOTAVersion()

  return <Text>{appVersion}</Text>
}
person Alex Omelnitckii    schedule 18.11.2020