OnMessageReceived never caused notifications from the server using Firebase in Android

I am sending a notification from the server using Firebase in Android. My code works when I send a notification from the Firebase Console, but it does not work when I send a message from my server. I turned on debugging, and I analyzed that the onMessageReceived FirebaseMessagingService method is never called.

Here is my FirebaseMessagingService code:

 public class FirebaseMessagingService extends com.google.firebase.messaging.FirebaseMessagingService { private static final String TAG = FirebaseMessagingService.class.getSimpleName(); @Override public void onMessageReceived(RemoteMessage remoteMessage) { showNotification(remoteMessage.getData().get("message")); } private void showNotification(String message){ Intent intent = new Intent(this, MainActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this) .setSmallIcon(R.drawable.ic_launcher) .setContentTitle("Firebase Push Notification") .setContentText(message) .setAutoCancel(true) .setSound(defaultSoundUri) .setContentIntent(pendingIntent); NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); notificationManager.notify(0, notificationBuilder.build()); } } 

Here is my server side PHP code

 public function sendPushNotificationToGCMSever($token, $message){ //include_once 'config.php'; $url = 'https://fcm.googleapis.com/fcm/send'; $fields = array( 'registration_ids' => $token, 'notification' => $message ); $headers = array( 'Authorization:key=' . SERVER_KEY, 'Content-Type:application/json' ); $ch = curl_init(); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 0); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($fields)); $result = curl_exec($ch); curl_close($ch); return $result; } 

Can someone tell me what I am doing wrong? Any help is appreciated. Thanks:)

0
source share
1 answer

The manual states that (to send a notification, such as a console) your $fields should be (if $message is a string)

 $fields = array( 'to' => $token, 'notification' => array( 'body' => $message ), ); 

You can also select the icon for the notification by setting 'icon' => 'the name of some file in res/drawables' as described in this blog post

Also see the difference between messages only with data and notifications in the manual.

If you are trying to send only messages with data and onMessageReceived , you may have forgotten to add (as indicated in the guide )

 <service android:name=".MyFirebaseMessagingService"> <intent-filter> <action android:name="com.google.firebase.MESSAGING_EVENT"/> </intent-filter> </service> AndroidManifest.xml 
0
source

All Articles