fix: 출시 전 검수 이슈 4건 수정
- save_data: JSON 캐스팅 시 null 안전 처리 (손상된 세이브 크래시 방지) - settings_repository: _prefs! 강제 언래핑 제거, _getPrefs() 패턴 적용 - game_session_controller: IAP 구매 상태를 MonetizationState에 동기화 - iap_service: InAppPurchase.instance를 lazy 초기화로 변경
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
import 'dart:async';
|
||||
|
||||
import 'package:asciineverdie/src/core/engine/iap_service.dart';
|
||||
import 'package:asciineverdie/src/core/engine/progress_loop.dart';
|
||||
import 'package:asciineverdie/src/core/engine/progress_service.dart';
|
||||
import 'package:asciineverdie/src/core/model/game_state.dart';
|
||||
@@ -173,6 +174,17 @@ class GameSessionController extends ChangeNotifier {
|
||||
_status = GameSessionStatus.running;
|
||||
_cheatsEnabled = cheatsEnabled;
|
||||
|
||||
// IAP 구매 상태를 MonetizationState에 동기화
|
||||
// (테스트 환경에서는 InAppPurchase 플랫폼 채널 미등록으로 예외 발생 가능)
|
||||
try {
|
||||
final isPaid = IAPService.instance.isAdRemovalPurchased;
|
||||
if (_monetization.adRemovalPurchased != isPaid) {
|
||||
_monetization = _monetization.copyWith(adRemovalPurchased: isPaid);
|
||||
}
|
||||
} catch (_) {
|
||||
// 비모바일 플랫폼 또는 테스트 환경에서는 무시
|
||||
}
|
||||
|
||||
// 통계 초기화
|
||||
if (isNewGame) {
|
||||
await _statisticsManager.initializeForNewGame();
|
||||
@@ -273,8 +285,16 @@ class GameSessionController extends ChangeNotifier {
|
||||
return;
|
||||
}
|
||||
|
||||
// 저장된 수익화 상태 복원
|
||||
// 저장된 수익화(monetization) 상태 복원, IAP 구매 상태 동기화
|
||||
_monetization = savedMonetization ?? MonetizationState.initial();
|
||||
try {
|
||||
final isPaid = IAPService.instance.isAdRemovalPurchased;
|
||||
if (_monetization.adRemovalPurchased != isPaid) {
|
||||
_monetization = _monetization.copyWith(adRemovalPurchased: isPaid);
|
||||
}
|
||||
} catch (_) {
|
||||
// 비모바일 플랫폼 또는 테스트 환경에서는 무시
|
||||
}
|
||||
|
||||
// 복귀 보상 체크 (Phase 7)
|
||||
_returnRewardsManager.checkReturnRewards(
|
||||
|
||||
Reference in New Issue
Block a user