
์ฑ์ ์ถ์๊ฐ ๋์ด ์๋๋ผ ์์์ด๋ค.
๊ธฐ๋ฅ ๊ฐ์ , ๋ฒ๊ทธ ์์ , ๋ณด์ ํจ์น ๋ฑ ์ ๋ฐ์ดํธ๋ ํ์๋ค.
์ด๋ฒ ๊ธ์์๋ React Native ์ฑ์ ์ ๋ฐ์ดํธ ์ ๋ต๊ณผ ๊ตฌํ ๋ฐฉ๋ฒ์ ์ ๋ฆฌํ๋ค.
๊ฐ์ ์
๋ฐ์ดํธ๋ ํน์ ๋ฒ์ ์ดํ์ ์ฑ ์ฌ์ฉ์ ์ฐจ๋จํ๊ณ , ๋ฐ๋์ ์ต์ ๋ฒ์ ์ผ๋ก ์
๋ฐ์ดํธํ๋๋ก ์๊ตฌํ๋ ๋ฐฉ์์ด๋ค.
๋ณด์ ์ทจ์ฝ์ ํจ์น, ์น๋ช
์ ๋ฒ๊ทธ ์์ ๋ฑ ๊ธด๊ธํ ๊ฒฝ์ฐ์ ์ฌ์ฉํ๋ค.
์ฅ์
๋จ์
// versionCheck.ts
import { Alert, Linking } from 'react-native';
export function checkAppVersion(currentVersion: string, latestVersion: string, storeUrl: string) {
if (currentVersion < latestVersion) {
Alert.alert(
'์
๋ฐ์ดํธ ํ์',
'์ฑ์ ๊ณ์ ์ฌ์ฉํ๋ ค๋ฉด ์ต์ ๋ฒ์ ์ผ๋ก ์
๋ฐ์ดํธํ์ธ์.',
[
{ text: '์
๋ฐ์ดํธ', onPress: () => Linking.openURL(storeUrl) },
],
{ cancelable: false }
);
}
}
์ํํธ ์
๋ฐ์ดํธ๋ ๊ธฐ๋ฅ ์ฌ์ฉ์ ์ ํ ์์ด ์ฌ์ฉ์์๊ฒ ์
๋ฐ์ดํธ๋ฅผ ๊ถ๊ณ ํ๋ ๋ฐฉ์์ด๋ค.
์ฌ์ฉ์ ๊ฒฝํ ์ ํด๊ฐ ์ ์ผ๋ฉฐ, ์ ์ง์ ์ธ ์
๋ฐ์ดํธ ์ ๋์ ์ ํฉํ๋ค.
// updateNotice.tsx
import { Alert } from 'react-native';
export function showUpdateNotice(latestVersion: string) {
Alert.alert(
'์๋ก์ด ์
๋ฐ์ดํธ ์๋ด',
`๋ฒ์ ${latestVersion}์ด ์ถ์๋์์ต๋๋ค. ์๋ก์ด ๊ธฐ๋ฅ์ ํ์ธํด๋ณด์ธ์!`
);
}
OTA ์
๋ฐ์ดํธ๋ ์ฑ์คํ ์ด๋ฅผ ๊ฑฐ์น์ง ์๊ณ JS ๋ฒ๋ค์ ๊ต์ฒดํด ์ฆ์ ๋ฐ์ํ๋ ๋ฐฉ์์ด๋ค.
Microsoft CodePush๋ Expo Updates๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฐ๋ฅํ๋ค.
์ฅ์
๋จ์
npm install react-native-code-push
// App.tsx
import CodePush from 'react-native-code-push';
let App = () => {
return (
// App ์ฝ๋
);
};
App = CodePush({ checkFrequency: CodePush.CheckFrequency.ON_APP_START })(App);
export default App;
| ๋ฐฉ์ | ์ฅ์ | ๋จ์ | ์ฌ์ฉ ์์ |
|---|---|---|---|
| ๊ฐ์ ์ ๋ฐ์ดํธ | ๋ฒ์ ํต์ผ, ๋ณด์ ๊ฐํ | ์ฌ์ฉ์ ๋ถํธ | ์น๋ช ์ ๋ฒ๊ทธ ์์ |
| ์ํํธ ์ ๋ฐ์ดํธ | ์ ์ฐํ ์๋ด | ์ ๋ฐ์ดํธ ๋ฏธ๋ฃจ๊ธฐ ๊ฐ๋ฅ | ๊ธฐ๋ฅ ๊ฐ์ ์๋ด |
| OTA ์ ๋ฐ์ดํธ | ์ฆ์ ๋ฐ์ | ๋ค์ดํฐ๋ธ ์์ ๋ถ๊ฐ | ๊ธด๊ธ JS ์์ |
๐ โ์ ๋ฐ์ดํธ ์ ๋ต์ ๊ธฐ์ ์ด ์๋๋ผ, ์ด์ ์ฒ ํ์ด๋ค.โ