2015-02-20 2 views
6

Казалось бы, очень важно, чтобы приложение VoIP выполняло те же правила, что и приложение для настольных компьютеров, но оказалось, что практически невозможно реализовать звонок правильно. Несколько вещей, которые я пробовал:Как сделать приложение для iphone iOS подчиняться Не беспокоить при звонке?

  1. Локальные push-уведомления с кольцевым звуком.

    Хорошо: подчиняется режиму Silent и DND.

    Плохое: Звук может быть не более 30 секунд, и он вибрирует только один раз, когда появляется уведомление. Поэтому для достижения эффекта звонка уведомление должно быть повторно нажато, например. каждые 6 секунд, эффективно рассылая центр уведомлений. Кроме того, push-уведомления не звучат и не вибрируют, если приложение активно, поэтому приложение должно обнаруживать это и звонить по-другому.

  2. AudioServicesPlayAlertSound().

    Хорошо: надлежащий API, предназначенный специально для этой задачи. Слушает тихий режим.

    Плохо: полностью игнорирует режим «Не беспокоить», звук и вибрация проходят прямо.

  3. Используйте AVFoundation для воспроизведения звукового сигнала.

    Хорошо Звук играет.

    Плохое: не поддерживает вибрацию, не поддерживает режим «тихий»/«Не беспокоить». По существу не используется в качестве звонка.

Есть ли лучший способ? Или Apple полностью пропустила этот прецедент?

ответ

2

Как вы говорите в своих трех вариантах, только UILocalNotification фактически подчиняется тихую/неактивную работу.

Проблемы с этим могут быть решены.

Спам центр уведомлений: Я думаю, что это работает очень хорошо. Вы можете отменить свое предыдущее уведомление сразу перед тем, как слить новый, так что всегда будет только одно выдающееся уведомление.

[[UIApplication sharedApplication] cancelAllLocalNotifications];

вибрации проблема: Вы должны быть в состоянии назвать это: AudioServicesPlaySystemSound(kSystemSoundID_Vibrate); в том же месте, где вы звоните в местное уведомление снова и снова с таймером, пока вызов не завершится или пользователи подтверждает вызов , С настройкой фона VOIP на нем должно работать в фоновом режиме.

Как вы указали в варианте 2, вибрация не будет следовать за режимом «Не беспокоить», но это просто вибрация. Если вы спамете центр уведомлений, который будет вибрировать один раз каждый раз, когда приходит уведомление, так что вам может не понадобиться явно запускать вибрацию, если этого достаточно для вас.

Удачи.

+0

Я принимаю ваш ответ, потому что именно так мы закончили его реализацию. Мы также позволяем уведомлению вибрировать, чтобы он даже не вибрировал в режиме «Не беспокоить». Хотелось бы, чтобы был лучший ответ. Это явно хак. – SnakE

+0

Мы реализовали решение, описанное терадилом. Это отлично работает, когда приложение находится в фоновом режиме. Однако, если приложение находится на переднем плане, уведомление не будет вибрировать или воспроизводить звук. Поэтому мы фиксируем уведомление в приложении (приложение: UIApplication, didReceiveLocalNotification уведомление: UILocalNotification) и воспроизводить звук с помощью AudioServicesPlayAlertSound(). Это работает, однако, когда пользователь отвечает, звук будет продолжать воспроизводиться через динамик до тех пор, пока файл wav не будет завершен. Я не могу найти способ остановить это воспроизведение. – KeithB