Files
school-attendance/lib/config.dart
T
2026-07-28 19:13:14 +09:00

69 lines
2.6 KiB
Dart

// 🌐 앱 전역 공통 설정 및 유틸 함수 모음
// (서버 주소, FCM 관련 상수/함수, 기기 UUID 조회 등 여러 화면에서 공유하는 것들)
import 'dart:io';
import 'package:device_info_plus/device_info_plus.dart';
import 'package:firebase_messaging/firebase_messaging.dart';
import 'package:flutter/foundation.dart' show kIsWeb;
// 🌐 기존에 사용하시던 실제 백엔드 서버 도메인 주소로 통일합니다.
const String baseUrl = 'http://backsanhi.mcv.kr';
// 🔑 웹에서 FCM 토큰을 받으려면 필요한 VAPID 키
// (Firebase Console > 프로젝트 설정 > Cloud Messaging > 웹 구성 > 웹 푸시 인증서에서 발급)
const String webVapidKey =
'BG4LnirukBdW3cXVWxhvY9pcjevBKDhpsaq1SLZdBs2cOEiwLAFyuuZLkMqpEGp9uOuHdPOe_y3FdwdZaz3qdfk';
// 권한 요청 및 FCM 토큰을 가져와서 콘솔에 출력하는 함수
Future<void> printFCMToken() async {
try {
FirebaseMessaging messaging = FirebaseMessaging.instance;
// 1. 🚨 안드로이드/iOS 알림 권한 요청 (이 코드가 핵심이야!)
print("🚨 [FCM] 알림 권한 요청 중...");
NotificationSettings settings = await messaging.requestPermission(
alert: true,
badge: true,
sound: true,
);
if (settings.authorizationStatus == AuthorizationStatus.authorized) {
print("🚨 [FCM] 알림 권한 허용됨! 🎉");
} else if (settings.authorizationStatus == AuthorizationStatus.denied) {
print("🚨 [FCM] 알림 권한 거부됨... 😢 (설정에서 직접 켜야 합니다)");
}
// 2. 토큰 불러오기 (웹은 VAPID 키가 필요함)
print("🚨 [FCM] 토큰을 불러오는 중...");
String? token = kIsWeb
? await messaging.getToken(vapidKey: webVapidKey)
: await messaging.getToken();
if (token != null) {
print("🚨 [FCM 토큰 발급 성공] 👉 $token");
} else {
print("🚨 [FCM 토큰] 토큰이 null입니다.");
}
} catch (e) {
print("🚨 [FCM 토큰 에러] 👉 $e");
}
}
// 📱 폰의 고유 식별 번호(UUID)를 가져오는 공통 함수
Future<String> getDeviceUuid() async {
final DeviceInfoPlugin deviceInfo = DeviceInfoPlugin();
String uuid = "UNKNOWN_DEVICE";
try {
if (Platform.isAndroid) {
AndroidDeviceInfo androidInfo = await deviceInfo.androidInfo;
uuid = androidInfo.id; // 안드로이드 폰의 고유 하드웨어 ID 추출
} else if (Platform.isIOS) {
IosDeviceInfo iosInfo = await deviceInfo.iosInfo;
uuid = iosInfo.identifierForVendor ?? "UNKNOWN_IOS"; // iOS 고유 ID
}
} catch (e) {
print("기기 ID 추출 failed: $e");
}
return uuid;
}