Невозможно отправить push-уведомление firebase в IOS с помощью java

Я отправляю push-уведомление firebase, используя Java для IOS. ниже мой код.

    public class SendNotifi {
    public final static String AUTH_KEY_FCM = "AIzaSyBgF...............";
    public final static String API_URL_FCM = "https://fcm.googleapis.com/fcm/send";
    // userDeviceIdKey is the device id you will query from your database     
    public static void pushFCMNotification(String userDeviceIdKey) throws     Exception{

    String authKey = AUTH_KEY_FCM;   // You FCM AUTH key
    String FMCurl = API_URL_FCM;     

    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");

    JSONObject json = new JSONObject();
    json.put("to",userDeviceIdKey.trim());
    JSONObject info = new JSONObject();

    info.put("title", "Notificatoin Title - IOS");   // Notification title
    info.put("body", "Hello Test notification - IOS"); // Notification body
    info.put("badge", "1"); 
    json.put("notification", info);
    json.put("priority", "high");

    System.out.println("json : " +json);

    OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
    wr.write(json.toString());
    wr.flush();

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

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

    System.out.println(response.toString());
    }
    public static void main(String main[])
    {
        try {
            SendNotifi.pushFCMNotification("e_0k8MPAXpI:APA91bFrz3MkWS0V9E_PJMGwtFppYhR6ap9rD53nB-Wxkosij1jDDuPDXRw__l4tzOOsGaEm_j02a20oJGLimKvTuZSqRs6aTcbizTMuYMp6_1jB4U7RCl2A_NdWEHIMlaAl6YN1o_Hv");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Это не работает нормально для IOS.

Я получил подтверждение успеха в ответ, но я не получил никаких push-уведомлений в IOS.

{"multicast_id":6591278961512996707,"success":1,"failure":0,"canonical_ids":0,"results":[{"message_id":"0:1474009869605736%2f4186c42f4186c4"}]}

Заранее спасибо.


person Kantilal Rathod    schedule 16.09.2016    source источник
comment
stackoverflow.com/questions/39506040/   -  person Shubhank    schedule 16.09.2016
comment
Получаете ли вы уведомление должным образом, когда отправляете уведомление через консоль Firebase?   -  person AL.    schedule 16.09.2016
comment
Да, дорогой, я отправил через консоль Firebase, и все работает нормально.   -  person Kantilal Rathod    schedule 16.09.2016
comment
Вы пробовали то, на что ссылался @Shubhank? Добавив параметр priority и установив для него значение high в полезной нагрузке?   -  person AL.    schedule 16.09.2016
comment
Да, я также добавил поле приоритета в полезную нагрузку. но все та же проблема.   -  person Kantilal Rathod    schedule 16.09.2016


Ответы (1)


Для начала я упомяну, что для FCM существует два типа полезной нагрузки сообщений. уведомление и данные. Смотрите документацию здесь

При отправке уведомлений через консоль уведомлений Firebase они будут рассматриваться как полезная нагрузка уведомлений. Однако, если вы добавите пользовательские данные, они будут добавлены в полезную нагрузку как пользовательская пара ключ-значение.

Например, в вашем посте полезная нагрузка FCM должна выглядеть примерно так:

{
    "notification": {
    "body": "Some one invited you.",
    "title": "Friend request notification",
    "mutable-content": true,
    "icon": "myicon",
    "sound": "tri-tone"
},
"data": {
    "category": "provider-body-panel",
    "mutable-content": true,
    "click_action": "provider-body-panel"
    }
}
   "registration_ids": ["<REGISTRATION_TOKEN_HERE>"],
   "priority": "high"
}

Что не так? mutable-content должен быть mutable_content (обратите внимание на подчеркивание) и должен быть на том же уровне, что и уведомление. (этот я мог неправильно понять, но) Для FCM нет параметра категории, ему уже соответствует click_action. Смотрите документы для параметров здесь.

В настоящее время невозможно установить значение для click_action и mutable_content при использовании консоли уведомлений Firebase. Вам нужно будет создать полезную нагрузку самостоятельно, что-то вроде этого:

 {
        "to": "<REGISTRATION_TOKEN_HERE>",
        "mutable_content" : true,
        "notification": {
            "body" : "Some one invited you.",
            "title": "Friend request notification",
            "click_action" : "provider-body-panel"
        }
    }

Затем отправьте его со своего собственного сервера приложений. Вы также можете сделать это с помощью Postman или cURL.

Это работает для меня, желаю и вам тоже.

person Shant Khayalian    schedule 20.04.2021