https://github.com/SudoPlz/sp-react-native-in-app-updates
android는 앱 안에서 업데이트를 진행시키는 in-app-update 기능을 사용할 수 있지만,
ios는 앱 안에서 업데이트를 진행시키는 기능을 현재 구현되지 않았습니다. (다른 모든 곳에서도 해당 기능 구현한 곳은 못봤고, 구현 역시 불가능하다고 여겨집니다.)
android는 in-app-update 기능을 사용했지만, ios는 별도로 linking을 이용해서 app store로 보냈습니다. (굳이 라이브러리 기능을 사용하지 않아도 괜찮아보여서)
import SpInAppUpdates, {
NeedsUpdateResponse,
IAUUpdateKind,
StartUpdateOptions,
} from 'sp-react-native-in-app-updates';
const inAppUpdates = new SpInAppUpdates(
false // isDebug
);
// curVersion의 버전은 현재 앱의 버전을 넣어주어야 한다. (react-native-device-info 활용할 것)
inAppUpdates.checkNeedsUpdate({ curVersion: '0.0.8' }).then((result) => {
/** curVersion 버전이 스토어 버전보다 낮다면 */
if (result.shouldUpdate) {
/** android */
if (Platform.OS === 'android') {
const updateOptions: StartUpdateOptions = {
updateType: IAUUpdateKind.IMMEDIATE,
};
inAppUpdates.startUpdate(updateOptions);
inAppUpdates.installUpdate();
} else if (Platform.OS === 'ios') {
/** app store로 보낸다 (app store가 깔려있어야만 작동, 뒤 숫자는 앱 id) */
Linking.openURL('itms-apps://itunes.apple.com/app/1609209503');
}
}
});
google play console에 위치
내부 앱 공유를 통한 apk 공유
우선 실제 디바이스 기기를 준비합니다.
1단계: Android 기기에서 내부 앱 공유 활성화 (google play console)
2단계: 더 낮은 버전의 앱(예: 버전 100)으로 릴리스 apk(또는 aab) 만들기
3단계: 더 높은 버전의 앱(예: 버전 101)으로 릴리스 apk(또는 aab) 만들기 (2단계 apk에서 업데이트를 해줄 apk 용도)
4단계: 두 APK를 내부 앱 공유에 업로드
5단계: 장치에 버전 100을 설치합니다.
6단계: 기기에서 버전 101의 내부 앱 공유 링크를 열지만 설치하지는 않습니다. (링크를 열어줘야 101버전을 인식합니다)
해당 링크 내의 버튼에 업데이트(설치가 아님)가 표시되는지 확인합니다.
이는 Google Play에서 사용 가능한 업데이트가 있음을 알고 있음을 의미합니다.
7단계: 설치된(100) 버전의 앱을 열고 코드가 작동하는지 확인합니다(업데이트 팝업이 표시됨)
기존에 코드푸시를 사용하고 있다면, 충돌되지 않게 설계해야 합니다.
최신버전이 아니라면 코드푸시 분기를 태우지 않는 것이 방법이 될 수 있습니다.