iOS приложение перестает получать уведомления при повторном подключении к интернету - PullRequest
0 голосов
/ 26 февраля 2020

У меня странная проблема, я отправляю уведомления через FCM темам на устройствах iOS.

Иногда , когда устройство подключено к медленному inte rnet или нет inte rnet, а затем подключается обратно к inte rnet, все отправленные ранее уведомления не будут получены, а новые отправленные уведомления после будут отложены!

Например: Устройство будет подключено обратно к inte rnet все в порядке, но я получаю уведомление с задержкой на 10 минут, и когда я получаю его в самый первый момент, когда оно показывается, оно говорит в диалоговом окне: 10 минут a go!

Если после этого перезапустить iPhone, все снова будет исправлено! и я смогу получать уведомления в обычном режиме. Эта проблема произошла со мной в двух разных устройствах, поэтому я уверен, что это не с телефона. и другие приложения уведомлений также будут работать без проблем.

Я думаю возможно, что-то не так с моими конфигурациями уведомлений fcm , которые я отправляю с сервера, может кто-нибудь указать, если я пропал что-то здесь.

Конфигурация сообщения:

$message = CloudMessage::fromArray([
    "condition" => $the_conditions,
    "notification" => [
        "title" => $title,
        "body" => $body,
    ],
    "data" => $data_passed,
    //Apple:
    "apns" => [
        "headers" => [
            "apns-priority" => "10",
        ],
        "payload" => [
            "aps" => [
                "alert" => [
                    "title" => $title,
                    "body" => $body,
                ],
                "sound" => $sound,
                "thread-id" => "thread_$item_id"
            ],
        ],
    ],
]);

Мне требуются уведомления о высокой доступности, которые необходимо отправить немедленно.

Примечание. Я использую php библиотека для отправки уведомления с сервера: kreait / firebase- php

1 Ответ

1 голос
/ 26 февраля 2020

Я сопровождающий SDK, который вы используете ?

Во-первых, составленное вами сообщение прекрасно, в этом нет ничего плохого.

В контексте SDK Я регулярно получаю сообщения о проблемах, когда сообщения FCM доставляются с большими задержками или вообще не доставляются, и, к сожалению, нет способа проверить, доставлено ли сообщение из Admin SDK и когда оно было доставлено. Если вы отправляете сообщение в Firebase, и Firebase не отвечает с ошибкой (например, когда полезная нагрузка недействительна, когда токен устройства не зарегистрирован или когда сервер недоступен), мы должны предположить, что доставка прошла успешно.

Чтобы обеспечить высоконадежные сообщения, в настоящее время я вижу два способа достижения этого:

  1. Используйте другую службу обмена сообщениями, которая обещает высоконадежную доставку, например, https://pushy.me/ (это не рекомендация, я не связан с Pushy и никогда не использовал его)

  2. При отправке сообщения с вашего внутреннего сервера включите идентификатор транзакции в поле data полезных данных и сохраните их в базе данных. От принимающего клиента отправьте запрос обратно на ваш сервер, чтобы подтвердить получение сообщения. Таким образом, вы можете увидеть, если и когда сообщение было подтверждено, и можете повторно отправить его через определенный промежуток времени. Конечно, у этого есть некоторые недостатки - возможно, клиент получил сообщение, но не удалось выполнить запрос на подтверждение, или же сообщения можно было бы отправить дважды. Это просто наивная идея из головы ... my

...