Skip to main content

Android

Native Android 6.0+ apps using Kotlin or Java and Firebase Cloud Messaging.

iOS

Native iOS 15+ apps using Swift, Swift Package Manager, or CocoaPods.

Capacitor

Capacitor 7 and 8 apps with one TypeScript API over both native SDKs.

Laravel

Laravel 12 and 13 backends using the notification channel or direct sending.

Token rules

Mobile application packages can be inspected. A Client token cannot send notifications; a Server send token can. Never swap them for convenience.

Shared client behavior

The Android, iOS, and Capacitor SDKs register an installation, update permission and identity state, and report received, displayed, opened, and dismissed events. Use the same stable external user ID across platforms.
Notification permission does not mean the installation is ready. Before disabling another notification provider, wait until Pushctl confirms registration with its API. Use waitForRegistration and check isRegistered where the SDK exposes it.