Какой регистрационный идентификатор fcm не удался, если он предназначен для нескольких регистрационных идентификаторов


Я отправляю уведомления нескольким регистрационным идентификаторам со стороны сервера на php. Это запрос:

public function androidPushNotification($registration_ids, $title, $message) {
    $msg = array (
            'message' => $message,
            'title' => $title 
    );

    $fields = array (
            'registration_ids' => $registration_ids,
            'data' => $msg 
    );

    $headers = array (
            'Authorization: key=' . $this->API_ACCESS_KEY,
            'Content-Type: application/json' 
    );

    $ch = curl_init ();
    curl_setopt ( $ch, CURLOPT_URL, $this->GCM_URL );
    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 );

    return $result;
}

Переменная registration_ids содержит два регистрационных идентификатора в массиве, один из которых взят из старой установки клиентского приложения, а другой - текущий.

Я получаю этот ответ от fcm:

{
  "multicast_id": 7860323906688398625,
  "success": 1,
  "failure": 1,
  "canonical_ids": 0,
  "results": [
    {
      "error": "NotRegistered"
    },
    {
      "message_id": "0:1478735313889582%1b153de0f9fd7ecd"
    }
  ]
}

Как я могу узнать, какой из идентификаторов регистрации не удался?

Есть ли другой способ получить эту информацию?

С уважением!

Author: Javier Vargas, 2016-11-10

1 answers

Я нашел ответ:

Результирующий массив находится в том же порядке, что и идентификаторы регистрации. Например, если запрос:

$fields = array (
            'registration_ids' => array('123456','987654'),
            'data' => array ('message' => 'This is the message','title' => 'Hi there!')
);

Пример ответа:

{
  "multicast_id": 7860323906688398625,
  "success": 1,
  "failure": 1,
  "canonical_ids": 0,
  "results": [
    {
      "error": "NotRegistered"
    },
    {
      "message_id": "0:1478735313889582%1b153de0f9fd7ecd"
    }
  ]
}

Ошибка регистрации идентификатора 123456.

Из документации gcm:

Вот результаты JSON для 6 получателей (идентификаторы 4, 8, 15, 16, 23, и 42 соответственно) с 3 успешно обработанными сообщениями, возвращен 1 маркер канонической регистрации и 3 ошибки:

{ 
  "multicast_id": 216,
  "success": 3,
  "failure": 3,
  "canonical_ids": 1,
  "results": [
    { "message_id": "1:0408" },
    { "error": "Unavailable" },
    { "error": "InvalidRegistration" },
    { "message_id": "1:1516" },
    { "message_id": "1:2342", "registration_id": "32" },
    { "error": "NotRegistered"}
  ]
}

В этом примере:

  • Первое сообщение: успех, не требуется.
  • Второе сообщение: должно быть возмущено (для регистрационного маркера 8).
  • Третье сообщение: произошла неустранимая ошибка (возможно, значение было повреждено в базе данных).
  • Четвертое сообщение: успех, ничего не требуется.
  • Пятое сообщение: успешно, но регистрационный токен должен быть обновлен в базе данных сервера (с 23 по 32).
  • Шестой сообщение: регистрационный токен (42) должен быть удален из базы данных сервера, поскольку приложение было удалено из
    устройство.

Надеюсь, это поможет, с уважением.

 7
Author: Javier Vargas, 2016-11-10 01:09:34