{"id":149,"date":"2025-09-22T19:31:32","date_gmt":"2025-09-22T19:31:32","guid":{"rendered":"https:\/\/www.nme.mobi\/blog\/?p=149"},"modified":"2025-09-22T19:43:27","modified_gmt":"2025-09-22T19:43:27","slug":"breaking-the-custom-sound-barrier-with-nativephp-firebase-cloud-messaging-on-android","status":"publish","type":"post","link":"https:\/\/www.nme.mobi\/blog\/breaking-the-custom-sound-barrier-with-nativephp-firebase-cloud-messaging-on-android\/","title":{"rendered":"Breaking the Custom Sound Barrier with NativePHP &#038; Firebase Cloud Messaging on Android"},"content":{"rendered":"<p>Today, we\u2019re blasting off into uncharted territory: getting your <strong>push notifications<\/strong> to roar with a custom sound on your Android app. Strap in, because the custom sound plane is about to break the sound barrier! \ud83d\udee9\ufe0f\ud83d\udca5<\/p>\n<p>Your secret weapon? A .<strong>ogg or .mp3<\/strong> sound file. Place it in the heart of your Android app:<\/p>\n<pre>nativephp\/android\/app\/src\/main\/res\/raw\/notification.ogg<\/pre>\n<p>\u26a1 <strong>Pro tip<\/strong>: keep your filename simple\u2014lowercase letters and numbers only. In our mission, we\u2019ll call it notification.ogg.<\/p>\n<p>When launching your push notification, here\u2019s how you arm your payload:<\/p>\n<pre>'androidConfig' =&gt; [\r\n    'priority' =&gt; 'high',\r\n    'notification' =&gt; [\r\n        'channel_id' =&gt; 'fcm_default_channel',\r\n        'sound' =&gt; 'notification'\r\n    ]\r\n],\r\n<\/pre>\n<p>NativePHP\u2019s default channel_id is fcm_default_channel. And remember\u2014the sound key is just your filename without the extension. Simple, elegant, powerful.<\/p>\n<p>But the adventure doesn\u2019t stop there. To truly make your notifications sing, we need to tweak the <strong>PushNotificationService.kt<\/strong>:<\/p>\n<pre>\/nativephp\/android\/app\/src\/main\/java\/com\/youraweseomeappname\/app\/v1\/services\/PushNotificationService.kt<\/pre>\n<p data-start=\"1393\" data-end=\"1540\">Inside, you\u2019ll inject some <strong data-start=\"1420\" data-end=\"1436\">extra syntax<\/strong> to unleash your custom sound. Think of it as strapping a jet engine onto your notification system. \ud83d\ude80<\/p>\n<p data-start=\"1542\" data-end=\"1670\">Once you\u2019ve done this, every push notification becomes a <strong data-start=\"1599\" data-end=\"1626\">sonic boom of attention<\/strong>\u2014a custom sound that\u2019s unmistakably yours.<\/p>\n<p data-start=\"1542\" data-end=\"1670\">Always make sure you remove the app completely from your device after making these tweaks en rerun this with <strong>php artisan native:run<\/strong><\/p>\n<div>\n<pre>package com.yourawesomeappname.app.v1.services\r\n\r\nimport android.util.Log\r\nimport com.google.firebase.messaging.FirebaseMessagingService\r\nimport com.google.firebase.messaging.RemoteMessage\r\nimport android.app.NotificationChannel\r\nimport android.app.NotificationManager\r\nimport android.content.Context\r\nimport android.os.Build\r\nimport androidx.core.app.NotificationCompat\r\nimport com.yourawesomeappname.app.v1.R\r\n\r\n<strong>\/\/ Added by 599 Tech\r\nimport android.media.AudioAttributes\r\nimport android.net.Uri\r\n\/\/ Added by 599 Tech<\/strong>\r\n\r\nclass PushNotificationService: FirebaseMessagingService()  {\r\n    companion object {\r\n       private const val TAG = \"PushNotificationService\"\r\n       private const val CHANNEL_ID = \"fcm_default_channel\"\r\n       private const val NOTIFICATION_ID = 1001\r\n    }\r\n\r\n<strong>    \/\/ Added by 599 Tech\r\n    private val soundUri: Uri? by lazy {\r\n        try {\r\n            Uri.parse(\"android.resource:\/\/${packageName}\/${R.raw.notification}\")\r\n        } catch (e: Exception) {\r\n            Log.e(TAG, \"Sound file missing, will use default sound\")\r\n            null\r\n        }\r\n    }\r\n    \/\/ Added by 599 Tech<\/strong>\r\n\r\n     override fun onCreate() {\r\n         super.onCreate()\r\n         createNotificationChannel()\r\n         Log.d(TAG, \"\ud83d\udcf1 PushNotificationService created and notification channel set up\")\r\n     }\r\n\r\n      private fun createNotificationChannel() {\r\n         if (Build.VERSION.SDK_INT &gt;= Build.VERSION_CODES.O) {\r\n             val name = \"FCM Notifications\"\r\n             val descriptionText = \"Notifications from Firebase Cloud Messaging\"\r\n             val importance = NotificationManager.IMPORTANCE_HIGH\r\n\r\n            <strong> \/\/ Added by 599 Tech\r\n             val audioAttributes = AudioAttributes.Builder()\r\n                 .setUsage(AudioAttributes.USAGE_NOTIFICATION)\r\n                 .build()\r\n             \/\/ Added by 599 Tech\r\n<\/strong>\r\n             val channel = NotificationChannel(CHANNEL_ID, name, importance).apply {\r\n                 description = descriptionText\r\n                 enableVibration(true)\r\n                 enableLights(true)\r\n                <strong> \/\/ Added by 599 Tech\r\n                 setSound(soundUri, audioAttributes)\r\n                 \/\/ Added by 599 Tech<\/strong>\r\n             }\r\n\r\n             val notificationManager: NotificationManager =\r\n                 getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager\r\n             notificationManager.createNotificationChannel(channel)\r\n\r\n             Log.d(TAG, \"\ud83d\udd14 Notification channel created for Android O+\")\r\n         }\r\n     }\r\n\r\n    override fun onNewToken(token: String) {\r\n        super.onNewToken(token)\r\n        Log.d(TAG, \"\ud83d\udd04 Token refreshed: $token\")\r\n        \/\/update remote server with new token\r\n    }\r\n\r\n    override fun onMessageReceived(message: RemoteMessage) {\r\n        super.onMessageReceived(message)\r\n\r\n        Log.d(TAG, \"\ud83d\udce8 FCM message received\")\r\n        Log.d(TAG, \"\ud83d\udcca Message data: ${message.data}\")\r\n        Log.d(TAG, \"\ud83d\udd14 Message notification title: ${message.notification?.title}\")\r\n        Log.d(TAG, \"\ud83d\udcdd Message notification body: ${message.notification?.body}\")\r\n\r\n        \/\/ Extract title and body from message\r\n        val title = message.notification?.title ?: message.data[\"title\"] ?: \"Notification\"\r\n        val body = message.notification?.body ?: message.data[\"body\"] ?: \"You have a new message\"\r\n\r\n        Log.d(TAG, \"\ud83c\udfaf Using title: '$title', body: '$body'\")\r\n\r\n        \/\/ Show notification for foreground messages\r\n        showNotification(title, body)\r\n    }\r\n\r\n    private fun showNotification(title: String, body: String) {\r\n        try {\r\n            Log.d(TAG, \"\ud83d\udd28 Building notification with title='$title', body='$body'\")\r\n\r\n            val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager\r\n\r\n            val notification = NotificationCompat.Builder(this, CHANNEL_ID)\r\n                .setSmallIcon(R.mipmap.ic_launcher) \/\/ Using launcher icon as small icon\r\n                .setContentTitle(title)\r\n                .setContentText(body)\r\n                .setPriority(NotificationCompat.PRIORITY_HIGH)\r\n                .setDefaults(NotificationCompat.DEFAULT_ALL)\r\n                .setAutoCancel(true)\r\n                .setStyle(NotificationCompat.BigTextStyle().bigText(body)) \/\/ Allow multiline body text\r\n             <strong>   \/\/ Added by 599 Tech\r\n                .setSound(soundUri)\r\n                \/\/ Added by 599 Tech<\/strong>\r\n                .build()\r\n\r\n            notificationManager.notify(NOTIFICATION_ID, notification)\r\n\r\n            Log.d(TAG, \"\u2705 Notification displayed successfully\")\r\n\r\n        } catch (e: Exception) {\r\n            Log.e(TAG, \"\u274c Error showing notification: ${e.message}\", e)\r\n        }\r\n    }\r\n}<\/pre>\n<\/div>\n<p data-start=\"1542\" data-end=\"1670\">\n","protected":false},"excerpt":{"rendered":"<p>Today, we\u2019re blasting off into uncharted territory: getting your push notifications to roar with a custom sound on your Android app. Strap in, because the custom sound plane is about to break the sound barrier! \ud83d\udee9\ufe0f\ud83d\udca5 Your secret weapon? A .ogg or .mp3 sound file. Place it in the heart of your Android app: nativephp\/android\/app\/src\/main\/res\/raw\/notification.ogg [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":152,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[7],"tags":[],"class_list":["post-149","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-nativephp"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.7 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Breaking the Custom Sound Barrier with NativePHP &amp; Firebase Cloud Messaging on Android - New Media Entertainment<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.nme.mobi\/blog\/breaking-the-custom-sound-barrier-with-nativephp-firebase-cloud-messaging-on-android\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Breaking the Custom Sound Barrier with NativePHP &amp; Firebase Cloud Messaging on Android - New Media Entertainment\" \/>\n<meta property=\"og:description\" content=\"Today, we\u2019re blasting off into uncharted territory: getting your push notifications to roar with a custom sound on your Android app. Strap in, because the custom sound plane is about to break the sound barrier! \ud83d\udee9\ufe0f\ud83d\udca5 Your secret weapon? A .ogg or .mp3 sound file. Place it in the heart of your Android app: nativephp\/android\/app\/src\/main\/res\/raw\/notification.ogg [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.nme.mobi\/blog\/breaking-the-custom-sound-barrier-with-nativephp-firebase-cloud-messaging-on-android\/\" \/>\n<meta property=\"og:site_name\" content=\"New Media Entertainment\" \/>\n<meta property=\"article:published_time\" content=\"2025-09-22T19:31:32+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-09-22T19:43:27+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.nme.mobi\/blog\/wp-content\/uploads\/2025\/09\/breaking-the-sound-barrier-99684_1280.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1280\" \/>\n\t<meta property=\"og:image:height\" content=\"1024\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"admin\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"admin\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.nme.mobi\\\/blog\\\/breaking-the-custom-sound-barrier-with-nativephp-firebase-cloud-messaging-on-android\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.nme.mobi\\\/blog\\\/breaking-the-custom-sound-barrier-with-nativephp-firebase-cloud-messaging-on-android\\\/\"},\"author\":{\"name\":\"admin\",\"@id\":\"https:\\\/\\\/www.nme.mobi\\\/blog\\\/#\\\/schema\\\/person\\\/af3e0d852abc6918b3b8fd617643536d\"},\"headline\":\"Breaking the Custom Sound Barrier with NativePHP &#038; Firebase Cloud Messaging on Android\",\"datePublished\":\"2025-09-22T19:31:32+00:00\",\"dateModified\":\"2025-09-22T19:43:27+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.nme.mobi\\\/blog\\\/breaking-the-custom-sound-barrier-with-nativephp-firebase-cloud-messaging-on-android\\\/\"},\"wordCount\":210,\"commentCount\":0,\"image\":{\"@id\":\"https:\\\/\\\/www.nme.mobi\\\/blog\\\/breaking-the-custom-sound-barrier-with-nativephp-firebase-cloud-messaging-on-android\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.nme.mobi\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/09\\\/breaking-the-sound-barrier-99684_1280.jpg\",\"articleSection\":[\"nativePHP\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.nme.mobi\\\/blog\\\/breaking-the-custom-sound-barrier-with-nativephp-firebase-cloud-messaging-on-android\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.nme.mobi\\\/blog\\\/breaking-the-custom-sound-barrier-with-nativephp-firebase-cloud-messaging-on-android\\\/\",\"url\":\"https:\\\/\\\/www.nme.mobi\\\/blog\\\/breaking-the-custom-sound-barrier-with-nativephp-firebase-cloud-messaging-on-android\\\/\",\"name\":\"Breaking the Custom Sound Barrier with NativePHP & Firebase Cloud Messaging on Android - New Media Entertainment\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.nme.mobi\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.nme.mobi\\\/blog\\\/breaking-the-custom-sound-barrier-with-nativephp-firebase-cloud-messaging-on-android\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.nme.mobi\\\/blog\\\/breaking-the-custom-sound-barrier-with-nativephp-firebase-cloud-messaging-on-android\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.nme.mobi\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/09\\\/breaking-the-sound-barrier-99684_1280.jpg\",\"datePublished\":\"2025-09-22T19:31:32+00:00\",\"dateModified\":\"2025-09-22T19:43:27+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.nme.mobi\\\/blog\\\/#\\\/schema\\\/person\\\/af3e0d852abc6918b3b8fd617643536d\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.nme.mobi\\\/blog\\\/breaking-the-custom-sound-barrier-with-nativephp-firebase-cloud-messaging-on-android\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.nme.mobi\\\/blog\\\/breaking-the-custom-sound-barrier-with-nativephp-firebase-cloud-messaging-on-android\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.nme.mobi\\\/blog\\\/breaking-the-custom-sound-barrier-with-nativephp-firebase-cloud-messaging-on-android\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.nme.mobi\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/09\\\/breaking-the-sound-barrier-99684_1280.jpg\",\"contentUrl\":\"https:\\\/\\\/www.nme.mobi\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/09\\\/breaking-the-sound-barrier-99684_1280.jpg\",\"width\":1280,\"height\":1024},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.nme.mobi\\\/blog\\\/breaking-the-custom-sound-barrier-with-nativephp-firebase-cloud-messaging-on-android\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.nme.mobi\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Breaking the Custom Sound Barrier with NativePHP &#038; Firebase Cloud Messaging on Android\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.nme.mobi\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.nme.mobi\\\/blog\\\/\",\"name\":\"New Media Entertainment\",\"description\":\"Solutions for THAT problem\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.nme.mobi\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.nme.mobi\\\/blog\\\/#\\\/schema\\\/person\\\/af3e0d852abc6918b3b8fd617643536d\",\"name\":\"admin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/afd881acea40fb7d25b7d8485bfd177ba674c7193d777e38f1cf61ffc50b5d83?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/afd881acea40fb7d25b7d8485bfd177ba674c7193d777e38f1cf61ffc50b5d83?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/afd881acea40fb7d25b7d8485bfd177ba674c7193d777e38f1cf61ffc50b5d83?s=96&d=mm&r=g\",\"caption\":\"admin\"},\"sameAs\":[\"https:\\\/\\\/www.nme.one\\\/blog\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Breaking the Custom Sound Barrier with NativePHP & Firebase Cloud Messaging on Android - New Media Entertainment","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.nme.mobi\/blog\/breaking-the-custom-sound-barrier-with-nativephp-firebase-cloud-messaging-on-android\/","og_locale":"en_US","og_type":"article","og_title":"Breaking the Custom Sound Barrier with NativePHP & Firebase Cloud Messaging on Android - New Media Entertainment","og_description":"Today, we\u2019re blasting off into uncharted territory: getting your push notifications to roar with a custom sound on your Android app. Strap in, because the custom sound plane is about to break the sound barrier! \ud83d\udee9\ufe0f\ud83d\udca5 Your secret weapon? A .ogg or .mp3 sound file. Place it in the heart of your Android app: nativephp\/android\/app\/src\/main\/res\/raw\/notification.ogg [&hellip;]","og_url":"https:\/\/www.nme.mobi\/blog\/breaking-the-custom-sound-barrier-with-nativephp-firebase-cloud-messaging-on-android\/","og_site_name":"New Media Entertainment","article_published_time":"2025-09-22T19:31:32+00:00","article_modified_time":"2025-09-22T19:43:27+00:00","og_image":[{"width":1280,"height":1024,"url":"https:\/\/www.nme.mobi\/blog\/wp-content\/uploads\/2025\/09\/breaking-the-sound-barrier-99684_1280.jpg","type":"image\/jpeg"}],"author":"admin","twitter_card":"summary_large_image","twitter_misc":{"Written by":"admin","Est. reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.nme.mobi\/blog\/breaking-the-custom-sound-barrier-with-nativephp-firebase-cloud-messaging-on-android\/#article","isPartOf":{"@id":"https:\/\/www.nme.mobi\/blog\/breaking-the-custom-sound-barrier-with-nativephp-firebase-cloud-messaging-on-android\/"},"author":{"name":"admin","@id":"https:\/\/www.nme.mobi\/blog\/#\/schema\/person\/af3e0d852abc6918b3b8fd617643536d"},"headline":"Breaking the Custom Sound Barrier with NativePHP &#038; Firebase Cloud Messaging on Android","datePublished":"2025-09-22T19:31:32+00:00","dateModified":"2025-09-22T19:43:27+00:00","mainEntityOfPage":{"@id":"https:\/\/www.nme.mobi\/blog\/breaking-the-custom-sound-barrier-with-nativephp-firebase-cloud-messaging-on-android\/"},"wordCount":210,"commentCount":0,"image":{"@id":"https:\/\/www.nme.mobi\/blog\/breaking-the-custom-sound-barrier-with-nativephp-firebase-cloud-messaging-on-android\/#primaryimage"},"thumbnailUrl":"https:\/\/www.nme.mobi\/blog\/wp-content\/uploads\/2025\/09\/breaking-the-sound-barrier-99684_1280.jpg","articleSection":["nativePHP"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.nme.mobi\/blog\/breaking-the-custom-sound-barrier-with-nativephp-firebase-cloud-messaging-on-android\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.nme.mobi\/blog\/breaking-the-custom-sound-barrier-with-nativephp-firebase-cloud-messaging-on-android\/","url":"https:\/\/www.nme.mobi\/blog\/breaking-the-custom-sound-barrier-with-nativephp-firebase-cloud-messaging-on-android\/","name":"Breaking the Custom Sound Barrier with NativePHP & Firebase Cloud Messaging on Android - New Media Entertainment","isPartOf":{"@id":"https:\/\/www.nme.mobi\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.nme.mobi\/blog\/breaking-the-custom-sound-barrier-with-nativephp-firebase-cloud-messaging-on-android\/#primaryimage"},"image":{"@id":"https:\/\/www.nme.mobi\/blog\/breaking-the-custom-sound-barrier-with-nativephp-firebase-cloud-messaging-on-android\/#primaryimage"},"thumbnailUrl":"https:\/\/www.nme.mobi\/blog\/wp-content\/uploads\/2025\/09\/breaking-the-sound-barrier-99684_1280.jpg","datePublished":"2025-09-22T19:31:32+00:00","dateModified":"2025-09-22T19:43:27+00:00","author":{"@id":"https:\/\/www.nme.mobi\/blog\/#\/schema\/person\/af3e0d852abc6918b3b8fd617643536d"},"breadcrumb":{"@id":"https:\/\/www.nme.mobi\/blog\/breaking-the-custom-sound-barrier-with-nativephp-firebase-cloud-messaging-on-android\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.nme.mobi\/blog\/breaking-the-custom-sound-barrier-with-nativephp-firebase-cloud-messaging-on-android\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.nme.mobi\/blog\/breaking-the-custom-sound-barrier-with-nativephp-firebase-cloud-messaging-on-android\/#primaryimage","url":"https:\/\/www.nme.mobi\/blog\/wp-content\/uploads\/2025\/09\/breaking-the-sound-barrier-99684_1280.jpg","contentUrl":"https:\/\/www.nme.mobi\/blog\/wp-content\/uploads\/2025\/09\/breaking-the-sound-barrier-99684_1280.jpg","width":1280,"height":1024},{"@type":"BreadcrumbList","@id":"https:\/\/www.nme.mobi\/blog\/breaking-the-custom-sound-barrier-with-nativephp-firebase-cloud-messaging-on-android\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.nme.mobi\/blog\/"},{"@type":"ListItem","position":2,"name":"Breaking the Custom Sound Barrier with NativePHP &#038; Firebase Cloud Messaging on Android"}]},{"@type":"WebSite","@id":"https:\/\/www.nme.mobi\/blog\/#website","url":"https:\/\/www.nme.mobi\/blog\/","name":"New Media Entertainment","description":"Solutions for THAT problem","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.nme.mobi\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.nme.mobi\/blog\/#\/schema\/person\/af3e0d852abc6918b3b8fd617643536d","name":"admin","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/afd881acea40fb7d25b7d8485bfd177ba674c7193d777e38f1cf61ffc50b5d83?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/afd881acea40fb7d25b7d8485bfd177ba674c7193d777e38f1cf61ffc50b5d83?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/afd881acea40fb7d25b7d8485bfd177ba674c7193d777e38f1cf61ffc50b5d83?s=96&d=mm&r=g","caption":"admin"},"sameAs":["https:\/\/www.nme.one\/blog"]}]}},"_links":{"self":[{"href":"https:\/\/www.nme.mobi\/blog\/wp-json\/wp\/v2\/posts\/149","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.nme.mobi\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.nme.mobi\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.nme.mobi\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.nme.mobi\/blog\/wp-json\/wp\/v2\/comments?post=149"}],"version-history":[{"count":8,"href":"https:\/\/www.nme.mobi\/blog\/wp-json\/wp\/v2\/posts\/149\/revisions"}],"predecessor-version":[{"id":158,"href":"https:\/\/www.nme.mobi\/blog\/wp-json\/wp\/v2\/posts\/149\/revisions\/158"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.nme.mobi\/blog\/wp-json\/wp\/v2\/media\/152"}],"wp:attachment":[{"href":"https:\/\/www.nme.mobi\/blog\/wp-json\/wp\/v2\/media?parent=149"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.nme.mobi\/blog\/wp-json\/wp\/v2\/categories?post=149"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.nme.mobi\/blog\/wp-json\/wp\/v2\/tags?post=149"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}