// 🌐 μ•± μ „μ—­ 곡톡 μ„€μ • 및 μœ ν‹Έ ν•¨μˆ˜ λͺ¨μŒ // (μ„œλ²„ μ£Όμ†Œ, 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 = 'https://backsanhi.mcv.kr'; // πŸ”‘ μ›Ήμ—μ„œ FCM 토큰을 λ°›μœΌλ €λ©΄ ν•„μš”ν•œ VAPID ν‚€ // (Firebase Console > ν”„λ‘œμ νŠΈ μ„€μ • > Cloud Messaging > μ›Ή ꡬ성 > μ›Ή ν‘Έμ‹œ μΈμ¦μ„œμ—μ„œ λ°œκΈ‰) const String webVapidKey = 'BG4LnirukBdW3cXVWxhvY9pcjevBKDhpsaq1SLZdBs2cOEiwLAFyuuZLkMqpEGp9uOuHdPOe_y3FdwdZaz3qdfk'; // κΆŒν•œ μš”μ²­ 및 FCM 토큰을 κ°€μ Έμ™€μ„œ μ½˜μ†”μ— 좜λ ₯ν•˜λŠ” ν•¨μˆ˜ Future 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 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; }