standalone으로 마이그레이션을 했는데, azure를 사용하지 않기 때문에 redis cache 서버를 사용을 하지 못한다.
/*
install metric은 redis cache서버가 필요하다. 그것도 모르고 처음에 개인서버에 설치하고 redis를 추가했더니 코드푸시가 올라가지도 내려받지도 못하더라
*/
그래서 별도로 api를 추가를 했다.
1. 최초에 적재 api (다운로드 성공여부가 들어있음, 설치 성공 여부는 비어있음)
(옵셔널 설치는 다음번 앱 실행시 설치이고 필수설치는 즉시 설치)
2. 앱 실행시 App.tsx에서 설치 함수를 호출
const installRecordMetric = async () => {
const update = await codePush.getUpdateMetadata();
console.log('----------------------------')
console.log('update?', update);
console.log('cpSrno?', cpSrno);
console.log('----------------------------')
if (update && update.isFirstRun) {
const isSuccess = !update.failedInstall;
if (cpSrno) {
await mergeCodepushHst({
cpSrno: cpSrno,
cpMandatory: update.isMandatory,
cpInstallDtm: dayjs().format('YYYY-MM-DD HH:mm:ss'),
cpInstallRst: isSuccess,
});
deleteCpSrno();
deleteData(FAIL_CODEPUSH);
}
if (!isSuccess) {
setData(FAIL_CODEPUSH, update.label);
}
}
}
/*
setData, deleteData 는 mmkv로 만든 함수이고, (설치 또는 다운로드) 실패 라벨을 넣음,
실패 시 롤백을 한 후에 앱을 재시작하는데 동일한 라벨을 다시 시도 하는걸 막기 위한 정보
*/
일단 앱 실행시에 codePush.getUpdateMetadata() 를 수행해서 업데이트 정보를 가져온다.
설치정보 적재는 1번만 하면 되기때문에 isFirstRun이 true일 때만 수행한다.
cpSrno는 다운로드 성공여부를 적재할 때 DB 시퀀스번호이다.
이 정보는 설치성공여부를 해당 row에 업데이트 하기 위해서이다.
테이블 정보는
1.시퀀스번호
2.코드푸시 라벨정보
3.타겟버전
4.필수설치여부
5.설명
6.다운로드일자
7.다운로드성공여부
8.설치일자(옵셔널)
9.설치성공여부(옵셔널)
10.회원아이디 (비회원일 때도 코드푸시는 수행해야하기 때문에 옵셔널)
글을 쓰다보니 실패라벨 적재는 mmkv에 하고 cpSrno는 zustand(persis로 mmkv)를 사용하고 있다..
실패라벨 적재도 zustand도 변경해야겠다.