Sinch — shouldSendPushNotifications: вызывается, когда получатель пытается ответить на вызов из локального уведомления.

Я реализовал вызов на основе push, который отлично работает, однако, похоже, это полностью сломало фоновые вызовы.

При вызове другого пользователя, когда приложение работает в фоновом режиме, но не закрыто, он получает локальное уведомление, как и ожидалось.

При запуске приложения из этого уведомления сразу после ретрансляции локального уведомления приложение вызывающего абонента немедленно пытается начать push-вызов вместо этого через shouldSendPushNotifications: — безумие заключается в том, что этот метод вызывается 10 раз подряд.

Затем это будет передано получателю — теперь у нас есть два вызова, которые в конечном итоге немного нарушают мой пользовательский интерфейс. Я взломал его, чтобы остановить сбой приложения, теперь я проверяю, был ли клиент уже инициализирован (это будет при обработке локальных уведомлений, а не при обработке push-уведомлений), что, похоже, позволяет обойти эту проблему.

Кто-нибудь знает, почему это может происходить? Это происходит только в том случае, если в клиенте Sinch включены как push, так и local.


person lyptt    schedule 28.08.2014    source источник
comment
привет @lyptt, не могли бы вы прислать мне код или метод push, который вы реализуете, потому что, когда я реализую этот метод, он дает мне ошибку.   -  person Jelly Bean    schedule 17.10.2014


Ответы (1)


Проблема, заключающаяся в том, что shouldSendPushNotifications: вызывается несколько раз, потенциально с одними и теми же данными (одними и теми же push-данными и push-полезной нагрузкой), возникает из-за того, что каждая такая пара может представлять одну установку приложения для определенного идентификатора пользователя. Поэтому, если вы много раз удаляли/устанавливали приложение на одном и том же устройстве и с разными параметрами, заданными для SINClient (например, setSupportPushNotifications с НЕТ, а затем ДА), это может быть частью этой проблемы. Хотя мы в Sinch работаем над решением для этого, это устранит обратные вызовы с идентичной информацией.

Тот факт, что вы можете видеть, что shouldSendPushNotifications: вызывается, даже если другой клиент начал отвечать на вызов, связан с тем, что механизм push предназначен для запуска на основе отсутствия ответа/подтверждения со стороны другого клиента в течение определенного временного окна. Если другой клиент находится в фоновом режиме, но с включенным режимом VoIP, он отправит ACK как можно скорее, что должно предотвратить срабатывание механизма push. Но если этот ACK не получен с временным окном, срабатывает push-механизм. Таким образом, push-механизм при использовании в сочетании с VoIP-режимом можно рассматривать как резервный механизм с максимальной эффективностью. Хотя в вашем случае я подозреваю, что это связано с возможностями установки отдельных приложений, описанными в предыдущем разделе, и мы работаем над их улучшением.

Тем не менее, поскольку push-механизм также может срабатывать, например, в случаях несвоевременного медленного сетевого состояния и когда ACK от другого клиента занимает больше времени, чем «ожидаемый наихудший случай» (который в настоящее время составляет 4 секунды), ваше приложение должно обрабатывать случай получения удаленного push-уведомления даже вскоре после получения обратного вызова didReceiveIncomingCall. Ключевым моментом здесь является то, что на самом деле это не два разных вызова, но вы можете использовать SINNotificationResult и -[SINCallNotificationResult callId], чтобы определить, что это один и тот же вызов. Например. если вы сначала получите didReceiveIncomingCall:-обратный вызов и в конечном итоге используете -[SINClient relayLocalNotification:], то вскоре после того, как вы получите push-уведомление и передадите его -[SINClient relayRemotePushNotificationPayload:], вы увидите, что оба «результата уведомления» будут содержать один и тот же callId, и вы можете использовать это для управления своим Пользовательский интерфейс соответствующим образом.

Спасибо за отличный отзыв о Sinch SDK, и мы в Sinch будем искать способы упростить обработку push-уведомлений и локальных уведомлений в целом.

person cahlbin    schedule 01.09.2014
comment
Можете ли вы сказать мне, как мы можем отправить полезную нагрузку на сервер? Я не могу отправить ее. Можете ли вы дать мне краткое представление о том, как мы можем реализовать это - person mandeep; 01.11.2014