Reputation: 1324
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
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