Подтвердить что ты не робот

Firebase Cloud Messaging last collapse_key не получен (ограниченная скорость?)

У меня есть служба, которая использует Firebase Cloud Messaging для связи со своими клиентами Android с помощью сообщений данных FCM с набором параметров collapse_key. Из документации о складных ключах:

При появлении более нового сообщения, отображающего более старый поток, связанное сообщение становится неактуальным для клиентского приложения, и FCM заменяет старое сообщение. Например, отправка на синхронизацию или устаревшие уведомления.

Это то, что я ищу. Мне не нужны все обновления, нужно только последнее. Но мне это нужно КАК МОЖНО СКОРЕЕ, если пользователь в сети.


Тем не менее, я получаю странное ограничение скорости, которое не приводит ни к какому коду ошибки HTTP. Это довольно легко воспроизвести, просто сделайте 20 последовательных сообщений с данными и наблюдайте за андроидом FirebaseMessagingService.onMessageReceived:

for i in {1..20}; do 
  curl -v -X POST --header "Authorization: key=$SERVER_KEY" \
       --Header "Content-Type: application/json" \
       https://fcm.googleapis.com/fcm/send \
       -d "{\"to\":\"$CLIENT_TOKEN\", \
            \"data\":{\"counter\":\"$i\"}, \
            \"priority\":\"high\", \
            \"collapse_key\": \"test\" \
           }"
done

Приведенный выше скрипт bash немного сложен для чтения, но у меня есть интересующая вас переменная counter.

После нескольких полученных сообщений (counter=~10) он останавливается, и вам нужно переключить состояние сети, чтобы получить последнее сообщение с помощью counter=20. Последнее сообщение также появляется через несколько минут (обычно ~ 10 минут), когда запрашивается регистрация в пожарной части (?).

Удаление collapse_key из приведенной выше команды curl приводит к получению всех 20 сообщений (где counter={1..20}).


Итак, вопрос: это ошибка? Или я закрываю (/скорость ограничена), потому что я "злоупотребляю" интерфейсом (поскольку все запросы возвращают ответ 200, я думал, что все в порядке).

4b9b3361

Ответ 1

<?php
#API access key from Google API Console
    define( 'API_ACCESS_KEY', 'YOUR-SERVER-API-ACCESS-KEY-GOES-HERE' );
    $registrationIds = $_GET['id'];
#prep the bundle
     $msg = array
          (
        'body'  => 'Body  Of Notification',
        'title' => 'Title Of Notification',
                'icon'  => 'myicon',/*Default Icon*/
                'sound' => 'mySound'/*Default sound*/
          );
    $fields = array
            (
                'to'        => $registrationIds,
                'notification'  => $msg
            );


    $headers = array
            (
                'Authorization: key=' . API_ACCESS_KEY,
                'Content-Type: application/json'
            );
#Send Reponse To FireBase Server    
        $ch = curl_init();
        curl_setopt( $ch,CURLOPT_URL, 'https://fcm.googleapis.com/fcm/send' );
        curl_setopt( $ch,CURLOPT_POST, true );
        curl_setopt( $ch,CURLOPT_HTTPHEADER, $headers );
        curl_setopt( $ch,CURLOPT_RETURNTRANSFER, true );
        curl_setopt( $ch,CURLOPT_SSL_VERIFYPEER, false );
        curl_setopt( $ch,CURLOPT_POSTFIELDS, json_encode( $fields ) );
        $result = curl_exec($ch );
        curl_close( $ch );
#Echo Result Of FireBase Server
echo $result;

Поместите свои данные в раздел тела.