UNPKG

airbridge-react-native-sdk

Version:

Airbridge SDK for React Native

149 lines (119 loc) 4.53 kB
import { Platform, NativeModules } from 'react-native' import messaging from '@react-native-firebase/messaging' import { Airbridge } from 'airbridge-react-native-sdk' import { storage } from './Storage' import { qaLog } from './QALog' class FCMService { prepare = async () => { if (Platform.OS === 'android') { this.getAndroidToken() } else if (Platform.OS === 'ios') { this.getIosToken() } this.onMessageReceived() return () => { console.log('[App] unRegister') } } updateToken = async () => { if (Platform.OS === 'android') { await this.getAndroidToken() } else if (Platform.OS === 'ios') { await this.getIosToken() } } deleteToken = async () => { await messaging().deleteToken() } requestPermission = async () => { console.log('[App] onRegister requestPermission') try { const authorizationStatus = await messaging().requestPermission(); if (authorizationStatus === messaging.AuthorizationStatus.AUTHORIZED) { console.log('[App] User has notification permissions enabled.'); } else if (authorizationStatus === messaging.AuthorizationStatus.PROVISIONAL) { console.log('[App] User has provisional notification permissions.'); } else { console.log('[App] User has notification permissions disabled'); } } catch (error) { console.log('[App] ios error::', error) } this.updateToken() } getIosToken = async () => { qaLog('[App] onRegister getIosToken') try { if (!messaging().isDeviceRegisteredForRemoteMessages) { await messaging().registerDeviceForRemoteMessages() } const fcmToken = await messaging().getToken() if (fcmToken) { storage.set('fcmToken', fcmToken); } const apnsToken = await messaging().getAPNSToken() qaLog('[App] getIosToken ApnsToken : ' + apnsToken) if (apnsToken) { storage.set('apnsToken', apnsToken); Airbridge.registerPushToken(apnsToken) } } catch (error) { qaLog('[App] ios error::', error) this.getApnsToken() } } getApnsToken = async () => { qaLog('[App] onRegister getApnsToken') let shouldStop = false const repeatCount = 5 const freq = 500 for (let i = 0; i < repeatCount; i++) { setTimeout(async () => { if (shouldStop) return try { const response = await NativeModules.IdentifiersInteractor.apnsToken(); const jsonData = JSON.parse(response); const apnsToken = jsonData['data'] qaLog(`[App] getApnsToken ApnsToken (${i}) : ${apnsToken}`) if (apnsToken) { shouldStop = true storage.set('apnsToken', apnsToken); Airbridge.registerPushToken(apnsToken) } } catch (error) { } }, i * freq); } } getAndroidToken = async () => { console.log('[App] onRegister getAndroidToken') const fcmToken = await messaging().getToken() if (fcmToken != null) { storage.set('fcmToken', fcmToken); Airbridge.registerPushToken(fcmToken) } console.log('[App] fcmToken :' + fcmToken) } onMessageReceived = async () => { const onReceived = async (remoteMessage) => { console.log('[FCM] onMessageReceived: ' + JSON.stringify(remoteMessage)) if (Airbridge.isUninstallTrackingNotification(remoteMessage.data)) { console.log("[FCM] Airbridge silent push notification received") } if (remoteMessage.data != null) { console.log("[FCM] Message data payload: " + JSON.stringify(remoteMessage.data)) } // Check if message contains a notification payload if (remoteMessage.notification != null) { console.log("[FCM] Message notification body: " + JSON.stringify(remoteMessage.notification.body)) } } // 활성 상태 및 포그라운드 상태일때 FCM 메시지 수신 const unsubscribe = messaging().onMessage(async remoteMessage => onReceived(remoteMessage)); // 앱이 종료된 상태일 때 FCM 메시지 수신 messaging().setBackgroundMessageHandler(async remoteMessage => onReceived(remoteMessage)); } } export const fcmService = new FCMService()