Android/Firebase – Error while parsing timestamp in GCM event – Null timestamp

Even though notification is apparently a supported element (according to the Firebase web docs), the only way I could get rid of the exception was to remove it entirely, and use the data section only, and then in my app create a notification (rather than letting firebase do the notification).

I used this site to work out how to raise the notifications:

My notification now looks like the following:

    $fields = array("to" => "<valid-token>",
                    "data" => array("data"=>
                                            "message"=>"This is some data",
                                            "title"=>"This is the title",
                                            "timestamp"=>date('Y-m-d G:i:s')
    <curl stuff here>
    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($fields));

My onMessageReceived looks like this:

public void onMessageReceived(RemoteMessage remoteMessage) {
    Log.d(TAG, "From: " + remoteMessage.getFrom());

    // Check if message contains a data payload.
    if (remoteMessage.getData().size() > 0) {
        Log.e(TAG, "Data Payload: " + remoteMessage.getData().toString());

        try {
            JSONObject json = new JSONObject(remoteMessage.getData().toString());
        } catch (Exception e) {
            Log.e(TAG, "Exception: " + e.getMessage());

which calls handleDataMessage which looks like this:

private void handleDataMessage(JSONObject json) {
    Log.e(TAG, "push json: " + json.toString());

    try {
        JSONObject data = json.getJSONObject("data");

        String title = data.getString("title");
        String message = data.getString("message");
        boolean isBackground = data.getBoolean("is_background");
        String timestamp = data.getString("timestamp");
        JSONObject payload = data.getJSONObject("payload");

        // play notification sound
        NotificationUtils notificationUtils = new NotificationUtils(getApplicationContext());

        if (!NotificationUtils.isBackgroundRunning(getApplicationContext())) {
            // app is in foreground, broadcast the push message
            Intent pushNotification = new Intent(ntcAppManager.PUSH_NOTIFICATION);
            pushNotification.putExtra("message", message);

        } else {
            // app is in background, show the notification in notification tray
            Intent resultIntent = new Intent(getApplicationContext(), MainActivity.class);
            resultIntent.putExtra("message", message);

            showNotificationMessage(getApplicationContext(), title, message, timestamp, resultIntent);
    } catch (JSONException e) {
        Log.e(TAG, "Json Exception: " + e.getMessage());
    } catch (Exception e) {
        Log.e(TAG, "Exception: " + e.getMessage());

this then calls showNotificationMessage

 * Showing notification with text only
private void showNotificationMessage(Context context, String title, String message, String timeStamp, Intent intent) {
    notificationUtils = new NotificationUtils(context);
    notificationUtils.showNotificationMessage(title, message, timeStamp, intent);

And subsequently notificationUtils.showNotificationMessage

public void showNotificationMessage(String title, String message, String timeStamp, Intent intent) {
    showNotificationMessage(title, message, timeStamp, intent, null);

public void showNotificationMessage(final String title, final String message, final String timeStamp, Intent intent, String imageUrl) {
    // Check for empty push message
    if (TextUtils.isEmpty(message))

    // notification icon
    final int icon = R.mipmap.ic_launcher;

    final PendingIntent resultPendingIntent =

    final NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(

    final Uri alarmSound = Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE
            + "://" + mContext.getPackageName() + "/raw/notification");

    showSmallNotification(mBuilder, icon, title, message, timeStamp, resultPendingIntent, alarmSound);


private void showSmallNotification(NotificationCompat.Builder mBuilder, int icon, String title, String message, String timeStamp, PendingIntent resultPendingIntent, Uri alarmSound) {

    NotificationCompat.InboxStyle inboxStyle = new NotificationCompat.InboxStyle();


    Notification notification;
    notification = mBuilder.setSmallIcon(icon).setTicker(title).setWhen(0)
            .setLargeIcon(BitmapFactory.decodeResource(mContext.getResources(), icon))

    NotificationManager notificationManager = (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE);
    notificationManager.notify(ntcAppManager.NOTIFICATION_ID, notification);

More detail in the link above, and it’s a lot of handling but at least the exception’s gone and I’m in control of the notifications.

I’ve updated to 17.3.4 and issue disappeared.

Leave a Comment