How to send push notifications from server to app

2019-05-24 14:49发布

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

1条回答
戒情不戒烟
2楼-- · 2019-05-24 15:35

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.

查看更多
登录 后发表回答