File size: 2,178 Bytes
cc276cc
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
"use client";

import { useEffect } from 'react';
import './globals.css';
import { Capacitor } from '@capacitor/core';
import { PushNotifications } from '@capacitor/push-notifications';
import { Device } from '@capacitor/device';
import { doc, updateDoc } from "firebase/firestore";
import { db } from "@/lib/firebase-client"; 
import { Providers } from './providers';

export default function RootLayout({ children }: { children: React.ReactNode }) {

  useEffect(() => {
    if (Capacitor.isNativePlatform()) {
      
      const initializeAppCapabilities = async () => {
        // 1. جلب Android ID وتخزينه
        const deviceId = await Device.getId();
        localStorage.setItem('android_id', deviceId.identifier);

        // 2. طلب صلاحيات الإشعارات
        let permStatus = await PushNotifications.checkPermissions();
        if (permStatus.receive === 'prompt') {
          permStatus = await PushNotifications.requestPermissions();
        }

        if (permStatus.receive === 'granted') {
          await PushNotifications.register();
        }
      };

      initializeAppCapabilities();

      // 3. مستمع للحصول على Token الإشعارات وحفظه في Firestore
      PushNotifications.addListener('registration', async (token) => {
        console.log('Firebase Push Token:', token.value);
        
        const userId = localStorage.getItem('userId'); 

        if (userId && db) {
          const userDocRef = doc(db, 'users', userId);
          try {
            await updateDoc(userDocRef, { fcmToken: token.value });
            console.log('FCM token successfully saved to Firestore for Android.');
          } catch (error) {
            console.error('Error saving FCM token to Firestore:', error);
          }
        }
      });

      PushNotifications.addListener('registrationError', (error) => {
        console.error('Push Registration Error:', error);
      });
    }
  }, []);

  return (
    <html lang="ar" dir="rtl" suppressHydrationWarning>
      <body className="font-body antialiased" suppressHydrationWarning>
        <Providers>{children}</Providers>
      </body>
    </html>
  );
}