this is our code foe fetching the apnstoken - and registering for the FCM and snding it to our servers. - we are consistently getting apns == null
import 'dart:io';
import 'package:firebase_messaging/firebase_messaging.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_messaging/firebase_messaging.dart';
import 'package:solaris/services/fetch_deviceId.dart';
Future initializeFCM() async {
final FirebaseMessaging _firebaseMessaging = FirebaseMessaging.instance;
// Request notification permissions for iOS
final settings = await _firebaseMessaging.requestPermission();
print('Notifcation Permission Status: ${settings.authorizationStatus}');
String? apnsToken;
int retries = 0;
const int maxRetries = 60;
const Duration retryDelay = Duration(seconds: 2);
// Retry fetching the APNs token until it's available or max retries are reached
while (apnsToken == null && retries < maxRetries) {
print(retries);
apnsToken = await _firebaseMessaging.getAPNSToken();
if (apnsToken == null) {
await Future.delayed(retryDelay);
retries++;
}
}
if (apnsToken != null) {
// APNs token is available, proceed to get FCM token
String? fcmToken = await _firebaseMessaging.getToken();
if (fcmToken != null) {
// Register the device and token with your backend
await registerDeviceAndToken(fcmToken);
} else {
// Handle the case where FCM token is still null
print('FCM token is null.');
}
} else {
// Handle the case where APNs token is not available after retries
print('APNs token not available after retries.');
}
}
Future registerDeviceAndToken(String fcmToken) async {
//fcmToken = fcmToken;
print(fcmToken);
final user = FirebaseAuth.instance.currentUser;
if (user == null) {
print('❌ User not logged in');
return;
}
final deviceId = await DeviceInfoService.getUniqueDeviceId();
//final fcmToken = await FirebaseMessaging.instance.getToken();
print('📱 Device ID from register_fcm: $deviceId');
print('📩 FCM Token from mew getapnd function: $fcmToken');
if (deviceId == null || fcmToken == null) {
print('❌ Failed to get deviceId or fcmToken');
return;
}
final docRef = FirebaseFirestore.instance
.collection('master_users')
.doc(user.uid)
.collection('deviceId')
.doc(user.uid); // This document holds a map: { deviceId: fcmToken }
print(docRef);
try {
// Get current data, fallback to empty map
final snapshot = await docRef.get();
final data = snapshot.data() ?? <String, dynamic>{};
print(data);
// Update or add current deviceId key
data[deviceId] = fcmToken;
// Save updated map back to Firestore
await docRef.set(data);
print(data);
print('✅ Device ID and FCM token updated/stored under correct structure');
} catch (e) {
print('❌ Firestore write error: $e');
}
}
0
0
108