XMPP ejabberd SaaS Push-уведомления
Это обновление к моему предыдущему вопросу, push-уведомления XMPP вызывают проблемы.
Благодаря ответу Микаэля Ремона проблемы с задержкой и дублированием исчезли, но я до сих пор не понимаю, как работают push-уведомления.
Если я переместлю приложение в фоновый режим (без блокировки устройства или завершения), оно не получит никаких push-уведомлений, а когда я верну его на передний план, все сообщения будут получены в полном объеме.
Когда приложение находится на переднем плане, и я блокирую устройство, никакие уведомления не запускаются, но сообщения принимаются отлично.
Когда приложение находится в фоновом режиме, и я блокирую устройство, уведомления запускаются, сообщения принимаются отлично, но иногда сообщения принимаются после отправки
sendLastActivityQueryToJID
,
Я не знаю, что здесь происходит, но если у вас, ребята, есть идеи, пожалуйста, дайте мне знать.
PS Я удалил фоновые режимы из моего приложения.
1 ответ
Похоже, это не имеет ничего общего с ejabberd, но, похоже, связано с тем, как работает push-уведомление на iOS.
Я не совсем уверен, что вы пытаетесь сделать, но вы не должны удалять фоновый режим для вашего приложения. В этом нет необходимости, и есть много других преимуществ, позволяющих приложению работать в течение короткого времени в фоновом режиме для правильного ведения домашнего хозяйства.
Приложение в фоновом режиме обычно запускается за три минуты до того, как его убьют. Это означает, что в течение этого времени вы получаете нормальное сообщение XMPP внутри приложения. Вы должны вызвать локальное уведомление от приложения в этом состоянии и после получения сообщения XMPP.
Когда приложение находится на переднем плане, iOS никогда не будет отображать никаких уведомлений. Это ожидается. Если вы подключены к серверу XMPP, вы получите сообщение XMPP. Если не подключен, вы получите уведомление, но они не будут отображаться. Это зависит от вас, чтобы сделать что-то с ними в вашем приложении.
У вас возникли некоторые затруднения в вашем вопросе: если ваше приложение работает в фоновом режиме, уведомления запускаются, но сообщение не должно приниматься одновременно только при повторном открытии / повторном подключении к сеансу или повторному подключению. Если вам нужен трафик для получения сообщений, это потому, что вы не делаете пробелы, оставайтесь живыми. Если вы этого не сделаете, сервер подумает, что вы внезапно потеряли соединение, и начнет отправлять push-уведомления и буферизировать сообщения. Убедитесь, что вы реализуете поддержку пробелов, как рекомендовано в документе, иначе это не может работать нормально.