Yura Rosiak Yura Rosiak - 3 months ago 84
Android Question

How to send push notifications from server to app using Firebase?

I'm trying to send push notifications from server to app using Firebase, but when the notification reaches app, my app is crashing.


PHP code:


<?php

$registrationIds = array("USER-DEVICE-TOKEN" );

$message = array
(
'message' => 'My awesome message',
'title' => 'My awesome title',
'subtitle' => 'My awesome subtitle',
'tickerText' => 'My awesome Ticker text',
'vibrate' => 1,
'sound' => 1,
'largeIcon' => 'large_icon',
'smallIcon' => 'small_icon'
);


$url = 'https://fcm.googleapis.com/fcm/send';
$fields = array(
'registration_ids' => $registrationIds,
'data' => $message
);
$headers = array(
'Authorization:key = GOOGLE-API-KEY',
'Content-Type: application/json'
);
$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);
if ($result === FALSE) {
die('Curl failed: ' . curl_error($ch));
}
curl_close($ch);

echo $result;


Output of PHP Script

My Firebase messaging service:

public class MyFirebaseMessagingService extends FirebaseMessagingService {

private static final String TAG = "MyFirebaseMsgService";

@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
//Displaying data in log
//It is optional
Log.d(TAG, "From: " + remoteMessage.getFrom());
Log.d(TAG, "Notification Message Body: " + remoteMessage.getNotification().getBody()); // LINE 24
//Calling method to generate notification
sendNotification(remoteMessage.getNotification().getBody(),remoteMessage.getNotification().getTitle());
}

//This method is only generating push notification
//It is same as we did in earlier posts
private void sendNotification(String messageBody,String messageTitle) {
Intent intent = new Intent(this, LoginActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent,
PendingIntent.FLAG_ONE_SHOT);

Uri defaultSoundUri= RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
.setSmallIcon(R.drawable.mainlogo)
.setContentTitle(messageTitle)
.setContentText(messageBody)
.setAutoCancel(true)
.setSound(defaultSoundUri)
.setContentIntent(pendingIntent);

NotificationManager notificationManager =
(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

notificationManager.notify(0, notificationBuilder.build());
}
}


Crashing error when push notification comes

Hope for your help

Answer

Check if remoteMessage.getNotification() is not NULL. I think it is NULL because you are not sending the param 'notification' in your $fields array of your PHP code. You are sending 'data'. So, when you send the parameter 'data' you have to get that parameter with remoteMessage.getData().

Try to print the content of remoteMessage.getData().toString() in your onMessageReceived method. It should print the data you are sending in the notification.

Hope this helps.

Comments