Sto lottando con il nuovo FCM ... ho usato FCM prima, ora sto cercando di FCM ...Invia notifica push da server a dispositivo Android in Java
Sto cercando di inviare notifiche push per la mia app server per dispositivo Android.
Voglio usare il pacchetto standard di Java, cercate di non usare altri, come Vert.x, apache di HttpClient ecc ...
Ecco il mio codice:
public void sendNotification(String messageBody)
{
try
{
URL url = new URL("https://fcm.googleapis.com/fcm/send");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type", "application/json");
String apiKey = "AI...wE";
String credentials = "key=" + apiKey;
//String basicAuth = "Basic " + Base64.getEncoder().encodeToString(credentials.getBytes());
String basicAuth = "Basic " + new String(Base64.encodeBase64(credentials.getBytes()));
conn.setRequestProperty ("Authorization", basicAuth);
String notfnStr = "{\"body\": \"this is my body\", \"title\": \"this is my title\"}";
String dataStr = "{\"key1\": \"value1\", \"key2\": \"value2\"}";
String bodyStr = "{\"priority\": \"high\", \"to\": \"dFC8GW0N1Q8:APA91bHePPmC7QVV16LGnR6rqxwreHSv1GgawijZ_dZL9T70ZkiXIV8TW_ymAWkvFfXRiWJmtR_UGBXBv2iV2UhS8M-Tndw8sf8ZW6zIqfaiiVJao3G5HFbhqgA18ukNNtW_J7JaWkz8\", " +
"\"notification\": " + notfnStr + ", \"data\": " + dataStr + "}";
System.out.println("### input: " + bodyStr);
OutputStream os = conn.getOutputStream();
os.write(bodyStr.getBytes());
os.flush();
if (conn.getResponseCode() != HttpURLConnection.HTTP_CREATED) {
throw new RuntimeException("Failed : HTTP error code : " + conn.getResponseCode());
}
BufferedReader br = new BufferedReader(new InputStreamReader(
(conn.getInputStream())));
String output;
System.out.println("Output from Server .... \n");
while ((output = br.readLine()) != null) {
System.out.println(output);
}
conn.disconnect();
}
catch (Exception e)
{
e.printStackTrace();
}
}
il codice di risposta ho ottenuto è 401, il che significa non autorizzato ... Immagino che il formato delle credenziali sia sbagliato ...
La stringa json è in formato JSON valido, quindi non mi prendo la briga di usare JSONObject.
Per le credenziali di stringa, ho provato "chiave:" + apiKey; ma ha ancora lo stesso risultato.
La stringa apiKey viene copiata da google-services.json che ho scaricato dalla console Firebase in google.
Google non ha dato un buon esempio ... solo mi ha dato questo: https://firebase.google.com/docs/cloud-messaging/downstream
Se qualcuno sa come farlo, si prega di rispondere. Grazie!!
No, ho provato, ho ancora ricevuto il codice di risposta 401 ... – fkie4