firebase implementation pull code
This commit is contained in:
@@ -77,7 +77,7 @@ const InviteScreen: FC<InviteScreenProps> = ({ route }) => {
|
||||
try {
|
||||
// Replace with your actual API call to join the group
|
||||
// For now, it just shows an alert.
|
||||
await apiCall(`http://192.168.1.9:9060/api/fund/groups/join/invite/${code}`, 'POST');
|
||||
await apiCall(`https://api.godemo.in/FundCollect/api/fund/groups/join/invite/${code}`, 'POST');
|
||||
Alert.alert('Success!', `You have requested to join "${groupDetails.groupName}".`);
|
||||
} catch (e: any) {
|
||||
Alert.alert('Join Error', e.message || 'An unexpected error occurred.');
|
||||
|
||||
@@ -20,6 +20,7 @@ import { LOGIN_URL, VARIFY_OTP_URL } from "../utils/ApiUrls";
|
||||
import colors from "../components/colors";
|
||||
import LinearGradient from "react-native-linear-gradient";
|
||||
import CustomAlert from "../components/CostomAlart";
|
||||
import FirebaseService from "../utils/firebase/firebaseServices";
|
||||
|
||||
const CELL_COUNT = 6;
|
||||
type OtpVerifyRouteProp = RouteProp<RootStackParamList, "OtpVarify">;
|
||||
@@ -125,7 +126,10 @@ export default function OtpVerificationScreen() {
|
||||
|
||||
if (res.data?.statusCode === 200) {
|
||||
const { jwt } = res.data?.data || {};
|
||||
console.log("✅ OTP Verified:", res.data);
|
||||
await saveToken(jwt);
|
||||
await FirebaseService.getFcmToken(res.data?.data?.userId);
|
||||
|
||||
|
||||
let hasActionRun = false;
|
||||
const successAction = () => {
|
||||
|
||||
@@ -125,7 +125,7 @@ const RequestList: React.FC = () => {
|
||||
|
||||
// Make API call to approve the request
|
||||
const response = await fetch(
|
||||
`http://192.168.1.9:9060/api/fund/requests/${requestId}/approve`,
|
||||
`https://api.godemo.in/FundCollect/api/fund/requests/${requestId}/approve`,
|
||||
{
|
||||
method: "PUT",
|
||||
headers: {
|
||||
@@ -171,7 +171,7 @@ const RequestList: React.FC = () => {
|
||||
|
||||
// Make API call to decline the request
|
||||
const response = await fetch(
|
||||
`http://192.168.1.9:9060/api/fund/requests/${requestedId}/reject?reason=/${reason}`,
|
||||
`https://api.godemo.in/FundCollect/api/fund/requests/${requestedId}/reject?reason=/${reason}`,
|
||||
{
|
||||
method: "PUT",
|
||||
headers: {
|
||||
|
||||
@@ -8,7 +8,7 @@ import { apiCall } from '../../utils/ApiHelper';
|
||||
import { BASE_URL } from '../../utils/ApiUrls';
|
||||
|
||||
// --- CONSTANTS ---
|
||||
const API_BASE_URL = 'http://192.168.1.9:9060/api/payments';
|
||||
const API_BASE_URL = 'https://api.godemo.in/FundCollect/api/payments';
|
||||
|
||||
// --- TYPE DEFINITIONS ---
|
||||
interface ApiResponse<T> {
|
||||
|
||||
@@ -28,6 +28,8 @@ import { useDispatch } from "react-redux";
|
||||
import { clearUser, setUserData } from "../../redux/userSlice";
|
||||
import { StackNavigationProp } from "@react-navigation/stack";
|
||||
import { RootStackParamList } from "../../navigation/AppNavigator";
|
||||
import { firebase } from "@react-native-firebase/messaging";
|
||||
import FirebaseService from "../../utils/firebase/firebaseServices";
|
||||
|
||||
|
||||
type UserProfile = {
|
||||
@@ -303,6 +305,7 @@ const Profile = () => {
|
||||
return;
|
||||
}
|
||||
|
||||
await FirebaseService.deleteFcmToken();
|
||||
|
||||
// Clear stored credentials
|
||||
await Keychain.resetGenericPassword();
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
|
||||
export const BASE_URL = "https://api.godemo.in/FundCollect/api/"
|
||||
// export const BASE_URL = "https://api.godemo.in/FundCollect/api/"
|
||||
export const BASE_URL = "http://192.168.1.9:9060/api/"
|
||||
export const LOGIN_URL = `${BASE_URL}user/generate/otp?mobiles=`
|
||||
export const VARIFY_OTP_URL = `${BASE_URL}user/otp/verify`
|
||||
export const ORGRAGISTRATION = `${BASE_URL}organizer/registration/apply`
|
||||
@@ -22,4 +22,5 @@ export const UPDATE_BANK_URL = `${BASE_URL}user/bank/update`;
|
||||
export const CONTRIBUTE = `${BASE_URL}payments/groups/`;
|
||||
export const TRANSACTION = `${BASE_URL}payments/my-transactions`;
|
||||
export const UPLOAD_GROUP_IMAGE = `${BASE_URL}fund/groups/`;
|
||||
export const STORE_FCM_TOKEN = `${BASE_URL}token/store?fcmToken=`
|
||||
|
||||
|
||||
@@ -0,0 +1,101 @@
|
||||
import messaging from '@react-native-firebase/messaging';
|
||||
import notifee, { AndroidImportance } from '@notifee/react-native';
|
||||
import axios from 'axios';
|
||||
import { apiCall } from '../ApiHelper';
|
||||
|
||||
// replace with your backend
|
||||
|
||||
class FirebaseService {
|
||||
// 🔹 Request notification permission
|
||||
static async requestPermission() {
|
||||
await messaging().requestPermission();
|
||||
await notifee.requestPermission();
|
||||
}
|
||||
|
||||
// 🔹 Display local notification
|
||||
static async displayNotification(title: string, body: string) {
|
||||
await notifee.displayNotification({
|
||||
title,
|
||||
body,
|
||||
android: {
|
||||
channelId: 'default',
|
||||
smallIcon: 'ic_launcher', // ensure you have this icon in android/app/src/main/res/mipmap
|
||||
importance: AndroidImportance.HIGH,
|
||||
pressAction: {
|
||||
id: 'default',
|
||||
},
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
// 🔹 Get & send token to backend
|
||||
static async getFcmToken(userId: string) {
|
||||
try {
|
||||
const token = await messaging().getToken();
|
||||
console.log('FCM Token:', token);
|
||||
await apiCall(`https://api.godemo.in/FundCollect/api/token/store?fcmToken=${token}&userId=${userId}`, 'POST');
|
||||
console.log('FCM Token sent to backend');
|
||||
return token;
|
||||
} catch (error) {
|
||||
console.error('Error getting FCM token:', error);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
// 🔹 Delete token from backend
|
||||
static async deleteFcmToken() {
|
||||
try {
|
||||
const token = await messaging().getToken();
|
||||
await apiCall(`https://api.godemo.in/FundCollect/api/token/remove?fcmToken=${token}`, 'DELETE');
|
||||
console.log('FCM Token deleted from backend');
|
||||
} catch (error) {
|
||||
console.error('Error deleting FCM token:', error);
|
||||
}
|
||||
}
|
||||
|
||||
// 🔹 Foreground notifications
|
||||
static foregroundListener() {
|
||||
return messaging().onMessage(async remoteMessage => {
|
||||
console.log('Foreground message:', remoteMessage);
|
||||
if (remoteMessage.notification) {
|
||||
await this.displayNotification(
|
||||
remoteMessage.notification.title ?? 'New Message',
|
||||
remoteMessage.notification.body ?? ''
|
||||
);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// 🔹 Background & Quit state
|
||||
static backgroundHandler() {
|
||||
messaging().setBackgroundMessageHandler(async remoteMessage => {
|
||||
console.log('Background message:', remoteMessage);
|
||||
if (remoteMessage.notification) {
|
||||
await this.displayNotification(
|
||||
remoteMessage.notification.title ?? 'New Message',
|
||||
remoteMessage.notification.body ?? ''
|
||||
);
|
||||
}
|
||||
});
|
||||
|
||||
messaging().onNotificationOpenedApp(remoteMessage => {
|
||||
console.log('App opened from background:', remoteMessage);
|
||||
});
|
||||
|
||||
messaging().getInitialNotification().then(remoteMessage => {
|
||||
if (remoteMessage) {
|
||||
console.log('App opened from quit state:', remoteMessage);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// 🔹 Token auto-refresh
|
||||
static tokenRefreshHandler() {
|
||||
return messaging().onTokenRefresh(async token => {
|
||||
console.log('New refreshed FCM Token:', token);
|
||||
// 👉 send to backend
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
export default FirebaseService;
|
||||
Reference in New Issue
Block a user