Документация для MFMessageComposeViewController
говорит, что вы должны проверить [MFMessageComposeViewController canSendText]
, прежде чем пытаться создать MFMessageComposeViewController
.
Там также написано:
в iOS 5.0 или более поздней версии, вы должны зарегистрироваться в качестве наблюдателя уведомления MFMessageComposeViewControllerTextMessageAvailabilityDidChangeNotification
, чтобы получать уведомления об изменениях в доступности отправки текстовых сообщений.
Какими возможными причинами может быть изменение доступности текстовых сообщений?
Это просто заставит Линуса Торвальдса плакать ?
Справочная информация. Я создаю приложение для iOS, для которого требуется возможность отправки SMS-сообщений. Я добавил sms
к UIRequiredDeviceCapabilities
в Info.plist
. Он должен работать только на iPhone (согласно документам Apple, я где-то читал, что не не включает iPod touch или iPad только с iMessage)
Если текстовые сообщения недоступны, приложение бесполезно, и должно появиться несколько полезных сообщений об ошибках.
Обновление: Я проверил на своем iPhone 4S, что простое наличие заблокированной SIM-карты по-прежнему возвращает ДА с canSendText
- все еще не является причиной изменения способности отправки сообщения.
Обновление # 2 : Я создал простое тестовое приложение , чтобы посмотреть, что может его вызвать. Я вообще не получил уведомление.
Вещи, которые не вызывают MFMessageComposeViewControllerTextMessageAvailabilityDidChangeNotification
- Включение и выключение iMessage
- Потеря соединения WiFi
- Включение режима полета
- Блокировка iPhone SIM-карты
Вещи, которые могут вызвать изменение canSendText между ДА / НЕТ (но не отправлять уведомление)
- Включение и выключение iMessage на iPad (я полагаю, iPod touch тоже)
Я предполагаю, что правильный случай - для iPad и iPod, когда iMessage включается или выключается, однако должна быть ошибка (либо в моем тестовом коде, либо в Apple), которая мешает этому работать.
Если вам нужно это уведомление, я попытался просто проверить [MFMessageComposeViewController canSendText]
еще раз на UIApplicationDidBecomeActiveNotification
. Иногда это работает, но если вы быстро переключаетесь между Settings.app и вашим приложением, оно может еще не измениться к тому времени, когда вы переключаетесь на свое приложение, в результате чего canSendText
по-прежнему отражает старое значение.
Мое решение на данный момент будет просто проверять canSendText
непосредственно перед тем, как будут приняты соответствующие решения, и обрабатывать (редкий?) Случай, когда он мог измениться без моего ведома каким-либо соответствующим образом.