Я использую Google Firebase для отправки push-уведомлений.Для клиента Android я отправляю только данные (не уведомление), а если требуется уведомление, отправляю их как локальное уведомление, и оно работает нормально.Данные поступают независимо от того, запущено ли приложение, убито или в фоновом режимеВ IOS я настроил APN с Firebase, но у меня есть некоторые проблемы с фоновыми данными и уведомлениями.Приведенный ниже код отправляет фоновые данные клиенту IOS с помощью APN.«content_available» помечает прямое уведомление APN, но, как упоминалось в документации Firebase, APN не гарантируется для доставки.Ссылка ниже объясняет это.
https://firebase.google.com/docs/cloud-messaging/http-server-ref
"В iOS используйте это поле для представления содержимого, доступного в полезной нагрузке APN. Когда отправляется уведомление или сообщение, и для него установлено значениеtrue, неактивное клиентское приложение пробуждается, и сообщение отправляется через APN в виде уведомления без вывода сообщений, а не через сервер соединений FCM. Обратите внимание, что уведомления без вывода сообщений в APN не гарантируются, и могут зависеть от таких факторов, как пользовательвключение режима низкого энергопотребления, принудительное завершение работы приложения и т. д. В Android сообщения данных по умолчанию запускают приложение. В Chrome в настоящее время не поддерживается. "
Если я добавляю коды в строках комментариев, отправляются APNвсегда уведомление, находится ли приложение на переднем плане, в фоне или убито.Конечно, я не хочу пуш-уведомления, если приложение находится на переднем плане.Кроме того, если пользователь не щелкает уведомление (щелкает значок приложения), код не срабатывает.Есть ли способ использовать APN в качестве Firebase на Android?В Android фоновые данные всегда отправляются клиенту успешно, независимо от того, находится приложение на переднем плане, в фоне или убито.
private static String apiKey = "AIzaSy............";
public static void sendNotification(JSONObject jsonData, String token) {
try {
JSONObject jsonGCM = new JSONObject();
jsonGCM.put("to", token);
jsonGCM.put("data", jsonData);
jsonGCM.put("content_available", true);
//jsonGCM.put("priority", "high");
/*JSONObject jsonNotification = new JSONObject();
jsonNotification.put("title", "Some Title");
jsonNotification.put("body", "Some body.");
jsonGCM.put("notification", jsonNotification);*/
URL url = new URL(
//"https://gcm-http.googleapis.com/gcm/send");
"https://fcm.googleapis.com/fcm/send");
HttpsURLConnection conn = (HttpsURLConnection) url
.openConnection();
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setRequestProperty("Content-Type",
"application/json; charset=UTF-8");
conn.setRequestProperty("Accept", "application/json");
conn.setRequestMethod("POST");
conn.setRequestProperty("Authorization", "key="
+ apiKey);
OutputStream os = conn.getOutputStream();
os.write(jsonGCM.toString().getBytes("UTF-8"));
os.flush();
InputStream in = new BufferedInputStream(
conn.getInputStream());
System.out.println("Response code -->"
+ conn.getResponseCode());
os.close();
}
catch (Exception e) {
// TODO: handle exception
}
}