Desarrollé una aplicación nativa de reacción que funciona actualmente (y en las tiendas de Apple y Google Play). Anoche implementé una función muy esperada, una alerta de actualización y un actualizador usando react-native-version-check, Alert, backHandler y Linking. Desde este enlace de blog de Medium, adapté la función a mi aplicación y la probé en Android. Probé para avanzar mi código de versión local/nombre de versión antes del lanzamiento de mi tienda y funciona al no activarse, funciona. Pero, cuando hago retroceder mi versión más baja que la de la tienda y la reconstruyo, se activa correctamente con un cuadro de alerta y el botón 'actualizar', al hacer clic en el botón, la aplicación se cierra y no sucede nada más. Así que veo que ocurrió el desencadenante adecuado, pero no la función de actualización. Repitiendo esto varias veces (haciendo clic en la aplicación, presionando el botón de actualización, cerrando la aplicación, aparece un mensaje de error que dice "Tu Americana Radio sigue deteniéndose". "Tu Americana Radio" es el nombre de mi aplicación.
El artículo/blog mediano: https://medium.com/@kinley.tshering/force-update-react-native-apps-a9c1f22c0701
Mi código de mi app.android.js específicamente en esta función de la siguiente manera:
import {Alert, BackHandler, Linking} from 'react-native'; import VersionCheck from 'react-native-version-check'; const checkVersion = async () => { try { let updateNeeded = await VersionCheck.needUpdate(); if(updateNeeded && updateNeeded.isNeeded) { Alert.alert ( 'Please update', 'You will have to update this app to the latest version to continue using it.', [ { text: 'Update', onPress: () => { BackHandler.exitApp(); console.log("-I-: Doing the Update App functions"); Linking.openURL(updateNeeded.storeURL); }, }, ], {cancelable: false}, ); } } catch (error) {}; }; export default function App() { // React Native Splash Screen // Ref: https://dev.to/cmcodes/how-to-add-splash-screen-in-a-react-native-android-app-287l // // useEffect(() => { // SplashScreen.hide(); // }, []); // Splash const [hideSplash, setHideSplash] = useState(false); useEffect(() => { setTimeout(() => { setHideSplash(true); }, 2500); // amount of time the splash is shown from the time component is rendered }, []); useEffect(() => { hideSplash && SplashScreen.hide(); }, [hideSplash]); // Splash with timer useEffect(() => { checkVersion(); }, []); return( <SocketContext.Provider value={socket}> <AppContainer /> </SocketContext.Provider > ) }Este es un caso de 'error de cabina'.
Lo arreglé una vez que me di cuenta
updateNeeded.storeURLupdateNeeded.storeUrl .Con el cambio, el código funcionó como se esperaba.