Pooshonk
Pooshonk

Reputation: 1324

Send Firebase Notification using Java, not FCM Console

I am adding notifications to my android application, but I can't seem to send a notification via my java code. I am getting back a 200 http code form the response, but nothing shows up.

This works on the Firebase console itself, but once I try to use my Java code, thing happens.

This is my code below

package actions.authentication;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;

import com.opensymphony.xwork2.Action;

import edocs.actions.PublicAction;
import net.sf.json.JSONObject;

public class SendPushNotification extends PublicAction {

    /**
     * 
     */
    private static final long serialVersionUID = -8022560668279505764L;

    // Method to send Notifications from server to client end.
    public final static String AUTH_KEY_FCM = "SERVER_KEY_HERE";
    public final static String API_URL_FCM = "https://fcm.googleapis.com/fcm/send";
    public final static String DEVICE_ID = "DEVICE_TOKEN_HERE";

    public String execute() {
        String DeviceIdKey = DEVICE_ID;
        String authKey = AUTH_KEY_FCM;
        String FMCurl = API_URL_FCM;

        try {
            URL url = new URL(FMCurl);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();

            conn.setUseCaches(false);
            conn.setDoInput(true);
            conn.setDoOutput(true);

            conn.setRequestMethod("POST");
            conn.setRequestProperty("Authorization", "key=" + authKey);
            conn.setRequestProperty("Content-Type", "application/json");
            System.out.println(DeviceIdKey);
            JSONObject data = new JSONObject();
            data.put("to", DeviceIdKey.trim());
            JSONObject info = new JSONObject();
            info.put("title", "FCM Notificatoin Title"); // Notification title
            info.put("body", "Hello First Test notification"); // Notification body
            data.put("data", info);
            System.out.println(data.toString());
            OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
            wr.write(data.toString());
            wr.flush();
            wr.close();

            int responseCode = conn.getResponseCode();
            System.out.println("Response Code : " + responseCode);

            BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
            String inputLine;
            StringBuffer response = new StringBuffer();

            while ((inputLine = in.readLine()) != null) {
                response.append(inputLine);
            }
            in.close();

            return Action.SUCCESS;
        }
        catch(Exception e)
        {
            System.out.println(e);
        }

        return Action.SUCCESS;
    }
}

The line System.out.println("Response Code : " + responseCode); prints out the following

Response Code : 200

Has anyone else had this problem? Any help would be greatly appreciated

Upvotes: 3

Views: 5227

Answers (1)

Bob Snyder
Bob Snyder

Reputation: 38289

Your code works for me. Add the line noted below to see what the full response status is. Post the ouput.

        while ((inputLine = in.readLine()) != null) {
            response.append(inputLine);
        }
        in.close();

        System.out.println("Resonse: " + response); // <= ADD THIS

Also, if you want Firebase to generate the notification for you, the body and title need to be properties of notification, not data. Details are in the documentation.

        info.put("title", "FCM Notification Title"); // Notification title
        info.put("body", "Hello First Test notification"); // Notification body
        data.put("notification", info); // <= changed from "data"

Upvotes: 4

Related Questions