#Firebase Plugin for NativePHP Mobile
Push notifications via Firebase Cloud Messaging (FCM) for Android and Apple Push Notification service (APNs) for iOS.
#Overview
The PushNotifications API handles device registration for Firebase Cloud Messaging to receive push notifications.
#Installation
Copied!
composer require nativephp/mobile-firebase
#Configuration
#Android Setup
- Create a Firebase project at Firebase Console
- Add your Android app to the project
- Download
google-services.jsonand place it in your project root - The plugin compiler will automatically copy it to the Android project
#iOS Setup
- In your Firebase project, add your iOS app
- Download
GoogleService-Info.plistand place it in your project root - Enable Push Notifications capability in your Apple Developer account
- The plugin compiler will handle the configuration
#Usage
#PHP (Livewire/Blade)
Copied!
use Native\Mobile\Facades\PushNotifications; // Check permission status before prompting$status = PushNotifications::checkPermission();// Returns: "granted", "denied", "not_determined", "provisional", or "ephemeral" // Enroll for push notifications (triggers system dialog if not_determined)PushNotifications::enroll(); // Get current token$token = PushNotifications::getToken();
#JavaScript (Vue/React/Inertia)
Copied!
import { PushNotifications, On, Off, Events } from '#nativephp'; // Check permission status before promptingconst result = await PushNotifications.checkPermission();const status = result.status; // "granted", "denied", "not_determined", etc. // Only prompt if not yet determinedif (status === 'not_determined') { await PushNotifications.enroll();} // Get current tokenconst tokenResult = await PushNotifications.getToken();const token = tokenResult.token; // APNS token on iOS, FCM token on Android
#Events
#TokenGenerated
Fired when a push notification token is successfully generated.
PHP
Copied!
use Native\Mobile\Attributes\OnNative;use Native\Mobile\Events\PushNotification\TokenGenerated; #[OnNative(TokenGenerated::class)]public function handlePushToken(string $token){ // Send token to your backend $this->sendTokenToServer($token);}
Vue
Copied!
import { On, Off, Events } from '#nativephp';import { onMounted, onUnmounted } from 'vue'; const handleTokenGenerated = (payload) => { const { token } = payload; // Send token to your backend sendTokenToServer(token);}; onMounted(() => { On(Events.PushNotification.TokenGenerated, handleTokenGenerated);}); onUnmounted(() => { Off(Events.PushNotification.TokenGenerated, handleTokenGenerated);});
React
Copied!
import { On, Off, Events } from '#nativephp';import { useEffect } from 'react'; const handleTokenGenerated = (payload) => { const { token } = payload; // Send token to your backend sendTokenToServer(token);}; useEffect(() => { On(Events.PushNotification.TokenGenerated, handleTokenGenerated); return () => { Off(Events.PushNotification.TokenGenerated, handleTokenGenerated); };}, []);
#Permission Flow
- App calls
checkPermission()to inspect current state - If
not_determined, show user a pre-prompt explaining the value - User taps "Enable Notifications"
- App calls
enroll() - System shows permission dialog
- If granted, FCM generates token
TokenGeneratedevent fires with token- App sends token to backend
- Backend stores token for user
- Server can now send notifications to this device
#Permission Status Values
| Status | Description |
|---|---|
granted |
User has granted notification permission |
denied |
User has denied notification permission |
not_determined |
Permission has not been requested yet |
provisional |
Provisional (quiet) notifications allowed (iOS only) |
ephemeral |
Ephemeral notifications allowed (iOS App Clips only) |
#Best Practices
- Call
checkPermission()beforeenroll()to avoid triggering the system dialog prematurely - Show a custom pre-prompt UI explaining the value of notifications when status is
not_determined - When status is
denied, direct users to system settings instead of callingenroll()again - Handle permission denial gracefully with alternative engagement options