Я борюсь с новым FCM... Раньше я использовал FCM, теперь я пытаюсь использовать FCM...
Я пытаюсь отправить push-уведомление для моего сервера приложений на устройство Android.
Я хочу использовать стандартный пакет Java, стараюсь не использовать других, таких как Vert.x, apache httpClient и т.д.
вот мой код:
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();
}
}
код ответа, который я получил, - 401, что означает несанкционированное... Я думаю, что формат учетных данных неверен...
Строка json находится в действительном формате json, поэтому я не хочу использовать JSONObject.
Для строковых учетных данных я попробовал "ключ:" + apiKey; но все же получил тот же результат.
ApiKey String копируется из google-services.json, загруженного с консоли Firebase в Google.
Google не дал хороший пример... просто дал мне это: https://firebase.google.com/docs/cloud-messaging/downstream
Если кто-нибудь знает, как это сделать, ответьте. Спасибо!!