Home » Android » android – Some devices don't receive FCM notifications

android – Some devices don't receive FCM notifications

Posted by: admin May 14, 2020 Leave a comment

Questions:

I’m having a problem since some of my devices where I’m testing my app don’t receive their notifications and it doesn’t raise an exception.

The notifications comes from FCM and I’m using a custom service to show them.

MyFirebaseMessaginService.java

static int count = 0;
@Override
public void onMessageReceived(final RemoteMessage remoteMessage) {

    Log.i("remoteMessage",remoteMessage.toString());
    switch(remoteMessage.getData().get("tipo")){
        case "normal":
            notificacionNormal(remoteMessage);
            break;
        case "imagen":
            notificacionImagen(remoteMessage);
            break;
        case "imagen+url":
            notificacionImagenUrl(remoteMessage);
            break;
    }
    count++;
    //Log.d("prueba",remoteMessage.getData().get("imagen"));
}

private void notificacionImagenUrl(RemoteMessage remoteMessage) {
    Intent i = new Intent(Intent.ACTION_VIEW);
    i.setData(Uri.parse(remoteMessage.getData().get("url")));
    PendingIntent pendingIntent = PendingIntent.getActivity(this, 100, i, PendingIntent.FLAG_ONE_SHOT);

    NotificationManager notificationManager = (NotificationManager) this.getSystemService(Context.NOTIFICATION_SERVICE);
    Notification notif = new Notification.Builder(this)
            .setContentIntent(pendingIntent)
            .setContentTitle(remoteMessage.getNotification().getTitle())
            .setContentText(remoteMessage.getNotification().getBody())
            .setSmallIcon(R.mipmap.ic_launcher)
            .setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher))
            .setStyle(new Notification.BigPictureStyle().bigPicture(getImagae(remoteMessage.getData().get("imagen"))))
            .build();
    notif.flags |= Notification.FLAG_AUTO_CANCEL;
    notificationManager.notify(count, notif);

}

At the moment it only happens in a rooted device with android 6.0.1
Hope u can help me 🙂

EDIT:
The notification HTTP request I send:

"to": "/topics/general",
        "notification" : {
          "title": "title",
          "body": "body",
        },
        "data": {
          "tipo": "normal",
        }
How to&Answers:

One of the possible reasons for this might be that some of the devices on which you’re testing don’t have google play services or the updated version of it. In your activity, try checking for google play services. You may use the function as answered here:

protected boolean checkPlayServices() {
final int resultCode = 

GooglePlayServicesUtil.isGooglePlayServicesAvailable(activity());
    if (resultCode != ConnectionResult.SUCCESS) {
        if (GooglePlayServicesUtil.isUserRecoverableError(resultCode)) {
            Dialog dialog = GooglePlayServicesUtil.getErrorDialog(resultCode, activity(),
                    PLAY_SERVICES_RESOLUTION_REQUEST);
            if (dialog != null) {
                dialog.show();
                dialog.setOnDismissListener(new OnDismissListener() {
                    public void onDismiss(DialogInterface dialog) {
                        if (ConnectionResult.SERVICE_INVALID == resultCode) activity().finish();
                    }
                });
                return false;
            }
        }
        new CSAlertDialog(this).show("Google Play Services Error",
                "This device is not supported for required Goole Play Services", "OK", new Call() {
                    public void onCall(Object value) {
                        activity().finish();
                    }
                });
        return false;
    }
    return true;
}

Answer:

it happens sometimes on low end devices. One solution is to clear the app data and cache of Google Play Services App. This work for me.

Answer:

I don’t know if this works, but your raw JSON body is wrong. You forgot the {} outside as a JSON object. Below should be your message to be sent.

{
    "to": "/topics/general",
    "notification" : {
        "title": "title",
        "body": "body",
    },
    "data": {
        "tipo": "normal",
    }
}