πŸͺ [Flutter] μŠ€ν† μ–΄(λ§ˆμΌ“)에 배포된 μ•± 버전 정보 κ°€μ Έμ˜€κΈ°

TygerΒ·2024λ…„ 5μ›” 2일
3

πŸͺ μŠ€ν† μ–΄(λ§ˆμΌ“)에 배포된 μ•± 버전 정보 κ°€μ Έμ˜€κΈ°

이번 κΈ€μ—μ„œλŠ” 배포된 μ•±μ˜ ν˜„μž¬ 버전을 κ°€μ Έμ˜€λŠ” 방법에 λŒ€ν•΄μ„œ κ°€λ³κ²Œ μ•Œμ•„λ³΄λ„λ‘ ν•˜κ² λ‹€.

배포된 μ•±μ˜ 버전을 μ™œ 확인해야 ν• κΉŒ ?

μ΅œκ·Όμ— λŒ€λΆ€λΆ„μ˜ 앱은 λ§ˆμ΄νŽ˜μ΄μ§€λ‚˜ μ„€μ •νŽ˜μ΄μ§€ λ“±μ—μ„œ ν˜„μž¬ λ§ˆμΌ“μ— 배포된 μ΅œμ‹  λ²„μ „μ˜ 버전을 λ³΄μ—¬μ£Όκ±°λ‚˜, μ΅œμ‹  λ²„μ „μœΌλ‘œ μ—…λ°μ΄νŠΈλ₯Ό 받도둝 ν•˜κΈ° μœ„ν•œ κΈ°λŠ₯을 μ œκ³΅ν•˜κ³  μžˆλ‹€.

μ΄λŸ¬ν•œ 버전 μ •λ³΄λŠ” 배포된 μ•±μ˜ 버전을 μ„œλ²„μ— μ €μž₯ν•˜μ—¬ 확인할 μˆ˜λ„ 있고, 둜컬 μ €μž₯μ†Œμ— μ €μž₯ ν›„ μƒνƒœκ΄€λ¦¬λ₯Ό ν•  μˆ˜λ„ μžˆλ‹€.

ν•˜μ§€λ§Œ μ•±μ˜ μ΅œμ‹  배포된 버전을 λ³„λ„λ‘œ κ΄€λ¦¬ν•˜κ²Œ 되면 문제점이 μžˆλŠ”λ°, μŠ€ν† μ–΄μ— μ΅œμ‹  버전이 배포가 μ•ˆλœ κ²½μš°κ°€ 있기 λ•Œλ¬Έμ— 문제점이 생긴닀.

배포된 앱이 μ™œ μŠ€ν† μ–΄μ— 배포가 μ•ˆλœ κ²½μš°κ°€ λ°œμƒν• κΉŒ ?

ꡬ글과 μ• ν”Œμ€ 자체 μŠ€ν† μ–΄μ— 앱이 μ¦‰μ‹œ λ°°ν¬λ˜μ§€ μ•Šμ„ 수 μžˆλ‹€λŠ” μ•ˆλ‚΄λ₯Ό ν•˜κ³  μžˆλ‹€. μ•ˆλ“œλ‘œμ΄λ“œμ˜ 경우 μ΅œλŒ€ 7μΌκΉŒμ§€ 배포가 되며, μ• ν”Œμ€ 24μ‹œκ°„ λ‚΄μ—λŠ” μŠ€ν† μ–΄μ— 배포가 λœλ‹€.

졜근 배포된 버전을 1.0.1 버전이라고 ν•˜κ³ , 이 버전 정보λ₯Ό μ„œλ²„μ—μ„œ 관리 ν•˜μ˜€λ‹€κ³  ν•˜μž. 1.0.1 버전을 λͺ¨λ“  μ‚¬μš©μžμ—κ²Œ μ œκ³΅ν•˜κΈ° μœ„ν•΄ κ°•μ œλ‘œ μ—…λ°μ΄νŠΈλ₯Ό 받을 수 μžˆλ„λ‘ ν•˜κ³  μ‹Άμ–΄μ„œ, ν˜„μž¬ 버전이 1.0.1 버전이 μ•„λ‹Œ μ‚¬μš©μžλŠ” μ•±μ˜ μ§„μž…μ„ 막고 μ—…λ°μ΄νŠΈλ₯Ό ν•˜λ„λ‘ ν•˜μ˜€λ‹€.

μ—…λ°μ΄νŠΈλ₯Ό ν•  수 있게 μŠ€ν† μ–΄λ‘œ μ΄λ™μ‹œν‚€κ²Œ λ˜λŠ”λ°, μŠ€ν† μ–΄μ—λŠ” μ΅œμ‹  λ²„μ „μ˜ 앱이 배포 됐을 μˆ˜λ„ μ•ˆλμ„ μˆ˜λ„ 있기 λ•Œλ¬Έμ— 배포가 아직 μ•ˆλœ 경우라면 λ¬΄ν•œ 루프에 λΉ μ§€κ²Œ λ˜μ–΄ μ•ˆμ’‹μ€ μ‚¬μš©μž κ²½ν—˜μ„ μ œκ³΅ν•˜κ²Œ λœλ‹€.
μ•±μ—μ„œλŠ” μŠ€ν† μ–΄λ‘œ μŠ€ν† μ–΄μ—λŠ” μ—…λ°μ΄νŠΈ λ²„νŠΌμ΄ μ—†κ³  μ—΄κΈ° λ²„νŠΌλ§Œ μžˆμ–΄μ„œ λ‹€μ‹œ μ—΄κΈ°λ₯Ό λˆ„λ₯΄λ©΄ μ•±μœΌλ‘œ 앱은 λ‹€μ‹œ μŠ€ν† μ–΄λ‘œ...

μ΄λŸ¬ν•œ λ¬Έμ œλ“€μ„ 없앨 수 μžˆλŠ” 방법은 ν˜„μž¬ 본인의 λ””λ°”μ΄μŠ€μ—μ„œ 찾을 수 μžˆλŠ” μ΅œμ‹  μ•± 정보λ₯Ό κ°€μ Έμ™€μ„œ 확인해 λ³΄λŠ” 방법이 κ°€μž₯ μ•ˆμ „ν•˜λ‹€.

FlutterλŠ” μ•±μŠ€ν† μ–΄μ™€ ν”Œλ ˆμ΄μŠ€ν† μ–΄ λͺ¨λ‘ 확인해야 ν•˜κΈ° 떄문에 각각의 μ›ΉνŽ˜μ΄μ§€μ˜ 정보λ₯Ό http ν†΅μ‹ μœΌλ‘œ 가져와 버전 정보λ₯Ό νŒŒμ‹±ν•΄μ„œ μ‚¬μš©ν•  수 μžˆλ‹€.

정보λ₯Ό νŒŒμ‹±ν•˜λŠ” 방법은 정말 λ‹€μ–‘ν•˜κ²Œ λ§Žμ€λ°, μ˜€λž«λ™μ•ˆ μ‚¬μš©ν•œ λ°©μ‹μœΌλ‘œ μ•Œλ €λ“œλ¦¬λ„λ‘ ν•˜κ² λ‹€.

Play Store

ν”Œλ ˆμ΄μŠ€ν† μ–΄μ˜ 경우 μš΄μ˜μ„ ν•˜λ©΄μ„œ 버전을 κ°€μ§€κ³  μ˜€μ§€ λͺ»ν•˜λŠ” λ¬Έμ œκ°€ 많고, μ›Ήμ‚¬μ΄νŠΈμ˜ UI ꡬ쑰가 λ³€κ²½ λ˜λ©΄μ„œ, κ·Έλ•Œλ§ˆλ‹€ 맀번 μ•„λž˜ νŒŒμ‹± κ·œμΉ™μ„ λ³€κ²½ν•΄μ•Ό ν–ˆμ—ˆλŠ”λ°, μ•„λž˜ 곡유된 μ½”λ“œλŠ” μ˜€λžœμ‹œκ°„ λ™μ•ˆ λ³€κ²½ 없이 잘 μ‚¬μš©ν•˜κ³  μžˆλ‹€.

호좜 μ£Όμ†Œμ˜ id 뢀뢄에 본인의 μ„œλΉ„μŠ€μ— ν•΄λ‹Ήν•˜λŠ” Package Name을 λ„£μ–΄μ£Όλ©΄ λœλ‹€.

 Future<String?> currentStoreVersion(String packageName) async {
    try {
      final http.Response _response = await http.get(Uri.parse(
          "https://play.google.com/store/apps/details?id=$packageName&gl=US"));
      if (_response.statusCode == 200) {
        RegExp regexp =
            RegExp(r'\[\[\[\"(\d+\.\d+(\.[a-z]+)?(\.([^"]|\\")*)?)\"\]\]');
        String? _version = regexp.firstMatch(_response.body)?.group(1);
        return _version;
      }
    } catch (e) {
      return null;
    }
    return null;
  }

App Store

μ• ν”Œμ˜ κ²½μš°λŠ” 아무 문제 없이 잘 μ‚¬μš©ν•˜κ³  있으며, ν•΄λ‹Ήν•˜λŠ” μ„œλΉ„μŠ€μ˜ Bundle IDλ₯Ό λ„£μ–΄μ£Όλ©΄ λœλ‹€.

 Future<String?> currentStoreVersion(String bundleId) async {
    try {
      Uri _uri = Uri.https(
        "itunes.apple.com",
        "/lookup",
        {"bundleId": bundleId},
      );
      final Response _response = await _dio.get(_uri.toString());
      if (_response.statusCode == 200) {
        final jsonObj = json.decode(_response.data);
        String? _version = jsonObj['results'][0]['version'];
        return _version;
      }
    } catch (e) {
      return null;
    }
    return null;
  }

마무리

μŠ€ν† μ–΄μ—μ„œ 배포된 μ•±μ˜ μ΅œμ‹  버전을 κ°€μ Έμ˜€λŠ” 방법에 λŒ€ν•΄μ„œ κ°„λ‹¨ν•˜κ²Œ μ‚΄νŽ΄λ΄€λ‹€.

κ³΅μœ ν•œ λ°©μ‹μœΌλ‘œ 버전 정보λ₯Ό κ°€μ Έμ˜€μ§€ λͺ»ν•˜κ±°λ‚˜ μ›Ήμ˜ κ°œνŽΈμ΄λ‚˜ λ³€κ²½μœΌλ‘œ κ°€μ Έμ˜€μ§€ λͺ»ν•  μˆ˜λ„ μžˆμœΌλ‹ˆ λŒ“κΈ€ λ‚¨κ²¨μ£Όμ‹œλ©΄ 확인해보도둝 ν•˜κ² λ‹€.

κ°μ‚¬ν•©λ‹ˆλ‹€.

profile
Flutter Developer

0개의 λŒ“κΈ€