Skip to content

App Rollback when restart #27

Description

@AndreyBernardoni

The app detects a new version, downloads it, and when it loses focus and comes back, the update takes effect — the title changes to “Boa Tarde".
However, when we restart the app, it reverts to the previous titles instead of keeping “Boa tarde”.

react-native-code-push: "^8.3.1"

I check for a new version in my AfterSplash (i alredy tried with the codePush.notifyAppReady() on my useEffect, above of checkForUpdate() and the result its the same):

import React from 'react';

import { UIBlock } from '@/components/UI/Block';
import { useAuthentication, useCodePush } from '@/hooks';

export const AfterSplash = () => {
  const { checkIsAuthenticated } = useAuthentication();
  const { checkForUpdate } = useCodePush();

  React.useEffect(() => {
    checkForUpdate();
    checkIsAuthenticated();
  }, [checkForUpdate, checkIsAuthenticated]);
  return <UIBlock />;
};

My custom hook:

import React, { useCallback } from 'react';

import { useCodePushStore } from '@/stores';
import { useNavigation } from '@react-navigation/native';
import CodePush from 'react-native-code-push';

export const useCodePush = () => {
  const { goBack } = useNavigation();

  const {
    updateInfo,
    updateAvailable,
    installProgress,
    setInstallProgress,
    checkingForUpdate,
    setCheckingForUpdate,
    setUpdateInfo,
    isInstalling,
    setIsInstalling,
  } = useCodePushStore();

  const checkForUpdate = useCallback(async () => {
    setCheckingForUpdate(true);
    try {
      const update = await CodePush.checkForUpdate();
      if (update) {
        setUpdateInfo(update);
        installUpdate();
      }
    } catch (error) {
      console.error('[CodePush] Error checking for update:', error);
    } finally {
      setCheckingForUpdate(false);
    }
  }, [installUpdate, setCheckingForUpdate, setUpdateInfo]);

  const installUpdate = useCallback(async () => {
    try {
      setIsInstalling(true);
      setInstallProgress(0);

      await CodePush.sync(
        {
          installMode: CodePush.InstallMode.ON_NEXT_SUSPEND,
          mandatoryInstallMode: CodePush.InstallMode.ON_NEXT_SUSPEND,
        },
        status => {
          switch (status) {
            case CodePush.SyncStatus.UPDATE_INSTALLED:
              setIsInstalling(false);
              break;
            case CodePush.SyncStatus.UP_TO_DATE:
              break;
          }
        },
        ({ receivedBytes, totalBytes }) => {
          const progress = (receivedBytes / totalBytes) * 100;
          setInstallProgress(progress);
        },
      );
    } catch (error) {
      console.error('[CodePush] Error during background sync:', error);
      setIsInstalling(false);
    }
  }, [setInstallProgress, setIsInstalling]);

  const updateCompleted = React.useMemo(() => {
    return installProgress === 100 && !isInstalling;
  }, [installProgress, isInstalling]);

  const cancelUpdate = useCallback(() => {
    goBack();
  }, [goBack]);

  return {
    updateAvailable,
    updateInfo,
    installProgress,
    isInstalling,
    checkingForUpdate,

    cancelUpdate,
    checkForUpdate,
    updateCompleted,
  };
};

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions