안드로이드 버전 정보 표시 문제 해결 (Lovable 변경사항 병합)
This commit is contained in:
@@ -1,4 +1,3 @@
|
||||
|
||||
/**
|
||||
* 플랫폼 관련 유틸리티 함수들
|
||||
*/
|
||||
@@ -30,104 +29,81 @@ export const isNativePlatform = (): boolean => {
|
||||
* 앱 버전 정보 가져오기
|
||||
*/
|
||||
export const getAppVersionInfo = async () => {
|
||||
// 기본값 설정 - 플러그인 실패 시 사용
|
||||
const defaultVersionInfo = {
|
||||
versionName: '1.0.0',
|
||||
versionCode: 1,
|
||||
buildNumber: 1,
|
||||
platform: Capacitor.getPlatform(),
|
||||
defaultValues: true
|
||||
};
|
||||
|
||||
try {
|
||||
// 플랫폼 정보를 먼저 로깅
|
||||
const currentPlatform = Capacitor.getPlatform();
|
||||
console.log('현재 플랫폼:', currentPlatform);
|
||||
|
||||
// 플러그인 가용성을 확인하고 로깅
|
||||
const isPluginAvailable = Capacitor.isPluginAvailable('BuildInfo');
|
||||
console.log('플러그인 가용성 확인:', isPluginAvailable);
|
||||
// 디버깅을 위한 플랫폼 체크 로그
|
||||
console.log('현재 플랫폼:', Capacitor.getPlatform());
|
||||
console.log('플러그인 가용성 확인:', Capacitor.isPluginAvailable('BuildInfo'));
|
||||
|
||||
// BuildInfoPlugin이 설치되어 있다면 사용
|
||||
if (isPluginAvailable) {
|
||||
if (Capacitor.isPluginAvailable('BuildInfo')) {
|
||||
try {
|
||||
// 플러그인 호출 시도
|
||||
// @ts-ignore - 플러그인이 런타임에 등록되므로 타입 체크를 무시
|
||||
// @ts-expect-error - 플러그인이 런타임에 등록되므로 타입 체크를 무시
|
||||
const buildInfo = await Capacitor.Plugins.BuildInfo.getBuildInfo();
|
||||
|
||||
console.log('네이티브에서 받은 빌드 정보:', buildInfo);
|
||||
console.log('네이티브에서 받은 빌드 정보(raw):', JSON.stringify(buildInfo));
|
||||
|
||||
// 받은 정보가 유효한지 확인
|
||||
if (buildInfo && typeof buildInfo === 'object') {
|
||||
// 값 존재 여부 확인 및 기본값 설정
|
||||
const versionName = buildInfo.versionName || '1.1.1.2';
|
||||
|
||||
// iOS에서는 buildNumber가 문자열로 올 수 있으므로 숫자로 변환
|
||||
let buildNumberValue = buildInfo.buildNumber;
|
||||
if (typeof buildNumberValue === 'string') {
|
||||
buildNumberValue = parseInt(buildNumberValue, 10);
|
||||
}
|
||||
|
||||
// 빌드 번호가 NaN이거나 undefined인 경우 기본값 사용
|
||||
const finalBuildNumber = !isNaN(buildNumberValue) && buildNumberValue !== undefined
|
||||
? buildNumberValue
|
||||
: 6; // 업데이트된 기본값
|
||||
|
||||
// 버전 코드도 동일하게 처리
|
||||
let versionCodeValue = buildInfo.versionCode;
|
||||
if (typeof versionCodeValue === 'string') {
|
||||
versionCodeValue = parseInt(versionCodeValue, 10);
|
||||
}
|
||||
|
||||
const finalVersionCode = !isNaN(versionCodeValue) && versionCodeValue !== undefined
|
||||
? versionCodeValue
|
||||
: 6; // 업데이트된 기본값
|
||||
|
||||
return {
|
||||
versionName: versionName,
|
||||
buildNumber: finalBuildNumber,
|
||||
versionCode: finalVersionCode,
|
||||
platform: currentPlatform,
|
||||
pluginResponse: JSON.stringify(buildInfo),
|
||||
timestamp: new Date().toISOString()
|
||||
};
|
||||
} else {
|
||||
console.warn('빌드 정보가 유효한 객체가 아닙니다:', buildInfo);
|
||||
// 수신한 데이터가 null 또는 undefined인 경우 체크
|
||||
if (!buildInfo) {
|
||||
console.warn('네이티브 빌드 정보가 없음');
|
||||
throw new Error('빌드 정보를 받지 못했습니다');
|
||||
}
|
||||
|
||||
// 받은 정보가 유효한지 확인 및 타입 변환
|
||||
if (typeof buildInfo === 'object') {
|
||||
// 타입 변환 및 기본값 설정 - 명시적으로 문자열/숫자 타입 변환
|
||||
const result = {
|
||||
versionName: typeof buildInfo.versionName === 'string' ? buildInfo.versionName :
|
||||
(buildInfo.versionName ? String(buildInfo.versionName) : defaultVersionInfo.versionName),
|
||||
versionCode: typeof buildInfo.versionCode === 'number' ? buildInfo.versionCode :
|
||||
(buildInfo.versionCode ? Number(buildInfo.versionCode) : defaultVersionInfo.versionCode),
|
||||
buildNumber: typeof buildInfo.buildNumber === 'number' ? buildInfo.buildNumber :
|
||||
(buildInfo.buildNumber ? Number(buildInfo.buildNumber) : defaultVersionInfo.buildNumber),
|
||||
platform: typeof buildInfo.platform === 'string' ? buildInfo.platform :
|
||||
(buildInfo.platform ? String(buildInfo.platform) : defaultVersionInfo.platform),
|
||||
timestamp: buildInfo.timestamp || Date.now(),
|
||||
pluginResponse: JSON.stringify(buildInfo)
|
||||
};
|
||||
|
||||
// 값이 기본값인지 확인 (BuildConfig에서 기본값을 반환하는 경우)
|
||||
if (result.versionName === '1.0' && result.versionCode === 1 && isAndroidPlatform()) {
|
||||
console.warn('플러그인이 기본값을 반환함, 빌드 설정을 확인해야 함');
|
||||
}
|
||||
|
||||
console.log('변환된 빌드 정보:', result);
|
||||
return result;
|
||||
}
|
||||
throw new Error('유효하지 않은 빌드 정보 응답');
|
||||
} catch (pluginError) {
|
||||
console.error('BuildInfo 플러그인 호출 오류:', pluginError);
|
||||
// 오류 발생시 기본값 사용
|
||||
return {
|
||||
...defaultVersionInfo,
|
||||
error: true,
|
||||
errorMessage: String(pluginError)
|
||||
};
|
||||
}
|
||||
} else {
|
||||
console.warn('BuildInfo 플러그인을 사용할 수 없음');
|
||||
// 플러그인이 없는 경우 기본값 반환
|
||||
return defaultVersionInfo;
|
||||
}
|
||||
|
||||
// 안드로이드인 경우 기본값을 최신 버전 값으로 설정
|
||||
if (isAndroidPlatform()) {
|
||||
console.log('안드로이드 기본 빌드 정보 반환');
|
||||
return {
|
||||
versionName: '1.1.1.2', // 업데이트된 버전명
|
||||
buildNumber: 6, // 업데이트된 빌드 번호
|
||||
versionCode: 6, // 업데이트된 버전 코드
|
||||
platform: 'android',
|
||||
isDefault: true
|
||||
};
|
||||
}
|
||||
|
||||
// iOS인 경우 기본값
|
||||
if (isIOSPlatform()) {
|
||||
console.log('iOS 기본 빌드 정보 반환');
|
||||
return {
|
||||
versionName: '1.1.1.2', // 업데이트된 버전명
|
||||
buildNumber: 6, // 업데이트된 빌드 번호
|
||||
platform: 'ios',
|
||||
isDefault: true
|
||||
};
|
||||
}
|
||||
|
||||
// 플러그인이 없는 경우 기본값 반환
|
||||
console.log('웹 기본 빌드 정보 반환');
|
||||
return {
|
||||
versionName: '1.1.1.2', // 업데이트된 버전명
|
||||
buildNumber: 6, // 업데이트된 빌드 번호
|
||||
platform: currentPlatform,
|
||||
isDefault: true
|
||||
};
|
||||
} catch (error) {
|
||||
console.error('앱 버전 정보를 가져오는 중 오류 발생:', error);
|
||||
console.error('앱 버전 정보 가져오기 오류:', error);
|
||||
// 오류 발생 시에도 앱 실행은 계속되도록 기본값 반환
|
||||
return {
|
||||
versionName: '1.1.1.2', // 업데이트된 버전명
|
||||
buildNumber: 6, // 업데이트된 빌드 번호
|
||||
...defaultVersionInfo,
|
||||
error: true,
|
||||
errorMessage: error instanceof Error ? error.message : String(error)
|
||||
errorMessage: String(error)
|
||||
};
|
||||
}
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user