Reference Source

src/util/notification.js

import React, {Component} from 'react';
import { Platform } from 'react-native';
// import firebase from 'react-native-firebase';

/**
 * Class for handling notifications.
 */
class Notification extends Component {
	/**
	 * Creates an instance of Notification.
	 * @constructor
	 */
	constructor(props){
			super(props);
			//firebase.initializeApp(config);
			this.notification = null;
	}


	/**
	*  Check if user has permission to receive notification
	*  if has permission, then ask for a device token
	*  if not, rejected the request and user will not receive notification
	*/
	async checkPermission() {
		if (Platform.OS === 'ios') {
			return false;
		}
		const enabled = await firebase.messaging().hasPermission();
		//enabled: ask firebase if user has permission to request firebase messaging
				if (enabled){
					return this.getToken();
				}
				else{
					return false;
				}

	}

	/**
	*  Request a device token
	*/
	async getToken(){
		if (Platform.OS === 'ios') {
			return false;
		}

	 const fcmToken = await firebase.messaging().getToken();
        if (fcmToken) {
            //console.log(`token is:${fcmToken}`)
            const fcm = fcmToken;
            const newData = {data:{}};
            newData.data.id = AuthState.getCurrentUserID();
            newData.data.deviceToken = fcm ;
            console.log(fcm);
            const prepareUpdate = newData.data;
            Database.editProfileData(prepareUpdate, ()=>{this._callback(true)}, ()=>{this._callback(false)});
//            Database.editProfileData(prepareUpdate, (data) => {
//            this._callback(true);
//            },(error) => {
//            this._callback(false);
//            });
        } else {
            // user doesn't have a device token yet
            console.log('user doesnt have a device token yet');
            return false;
        }
	}

	/**
	*  Create a new channel for Android user to receive notification
	*/
	createChannel(){
		if (Platform.OS === 'ios') {
			return null;
		}

		const channel = new firebase.notifications.Android.Channel('test-channel', 'Test Channel', firebase.notifications.Android.Importance.Max)
						.setDescription('My apps test channel');
		return (channel);
	}
	/**
	 *  Delete device token
	 */
	async removeToken(){
		if (Platform.OS === 'ios') {
			return null;
		}
		 await firebase.messaging().deleteToken();
    const prepareUpdate = {};
    prepareUpdate.id = AuthState.getCurrentUserID();
    prepareUpdate.deviceToken = "";
    Database.editProfileData(prepareUpdate, ()=>{this._callback(true)}, ()=>{this._callback(false)});
	}

	deleteNotificationArea(){
    const prepareUpdate = {};
    prepareUpdate.id = AuthState.getCurrentUserID();
    prepareUpdate.hasCircle = false;
    Database.editProfileData(prepareUpdate, ()=>{this._callback(true)}, ()=>{this._callback(false)});
}

}

const NotificationMethod = new Notification();
export default NotificationMethod;