Причины для MFMessageComposeViewControllerTextMessageAvailabilityDidChangeNotification - PullRequest
2 голосов
/ 23 января 2012

Документация для 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 непосредственно перед тем, как будут приняты соответствующие решения, и обрабатывать (редкий?) Случай, когда он мог измениться без моего ведома каким-либо соответствующим образом.

Ответы [ 3 ]

2 голосов
/ 11 февраля 2012

Мне удалось исключить другой сценарий, когда он не запускает MFMessageComposeViewControllerTextMessageAvailabilityDidChangeNotification.

  • Отправитель iPad с работающим Wi-Fi-соединением
  • Получатель Android-телефона

Результат: MessageComposeResult == MessageComposeResultSent, MFMessageComposeViewControllerTextMessageAvailabilityDidChangeNotification не был запущен

Далее я попробовал тот же сценарий с iMessage для дублирования окончательных результатов.(== не может отправить iMessage).

Тогда я понял, что iMessage смог сказать мне заранее , что это никогда не сработает, поставив красный восклицательный знак рядом с именем получателяс сообщением этот человек не зарегистрирован в iMessage.MFMessageComposeViewController этого не делает !!!

Мой текущий вывод таков: canSendText должно быть названо canComposeText .MFMessageComposeViewControllerTextMessageAvailabilityDidChangeNotification ничего не делает.

2 голосов
/ 23 января 2012

Поскольку MFMessageComposeViewController может использовать iMessage в iOS5, я предполагаю, что, вероятно, он подойдет для случая, когда iPod Touches и Wi-Fi iPad теряют подключение к Интернету во время набора сообщения.

1 голос
/ 12 февраля 2012

В настоящее время существует ни одного случая , куда отправляется MFMessageComposeViewControllerTextMessageAvailabilityDidChangeNotification.

Единственный раз, когда значение canSendText изменяется, это когда iMessage включается / выключается на iPadили iPod Touch (не iPhone, у которого есть SMS-сообщения).

Даже при изменении canSendText уведомление не отправляется. (Если это не просто ошибка в моем тесте код ?) Это похоже на ошибку или отсутствующую функцию в коде Apple.

...