MFMessageComposeViewController
的文檔說您應該在嘗試創建MFMessageComposeViewController
之前檢查[MFMessageComposeViewController canSendText]
。MFMessageComposeViewControllerTextMessageAvailabilityDidChangeNotification的原因
它還說:
中的iOS 5.0或更高版本,你應該爲
MFMessageComposeViewControllerTextMessageAvailabilityDidChangeNotification
通知的觀察者通知在發短信的可用性改變的註冊。
發生短信變化的可能原因是什麼? 難道只是make Linus Torvalds cry?
背景:我正在創建一個需要能夠發送短信的iOS應用程序。我在Info.plist
中加入了sms
到UIRequiredDeviceCapabilities
。它應該只在iPhone上運行(根據蘋果的文檔,我讀的地方這不包括iPod touch上或僅與iMessage的解鎖iPhone和iPad)
如果短信不可用,應用程序是沒用的,應該提供一些有用的錯誤信息。
更新:我已經測試過我的iPhone 4S,只是有一個鎖定的SIM仍然從canSendText
返回YES - 仍然不是消息發送能力改變的原因。
更新#2:我創建了一個simple test app來查看可能導致它的原因。 我還沒有收到通知。
的事情,不會引起MFMessageComposeViewControllerTextMessageAvailabilityDidChangeNotification
- 打開iMessage的上&關閉
- 失去WiFi連接
- 打開飛行模式
- 鎖定iPhone SIM卡
事這可能會導致canSendText爲YES/NO之間改變(但不發送通知)
- 打開iMessage的上&關在iPad上(我假設的iPod touch太)
我猜正確當iMessage打開或關閉時,情況適用於iPad和iPod觸摸,但是,必須有一個錯誤(無論是在我的測試代碼還是蘋果公司的產品中)都會阻止它正常工作。
如果您需要此通知,我嘗試在UIApplicationDidBecomeActiveNotification
上再次檢查[MFMessageComposeViewController canSendText]
。這有時會起作用,但是如果您在Settings.app和您的應用之間快速切換,那麼切換到您的應用時可能還沒有更改,導致canSendText
仍然反映舊值。
我現在的解決方案只是在做出相關決定之前簡單地檢查canSendText
,並且處理(可能的)情況,即在沒有我以某種適當方式知道的情況下它可能已經改變。
這是一個好主意 - 我會確保這下一次我有一個iPod Touch的訪問我的測試。 – DouglasHeriot
另一種思考 - 當被的iMessage和關閉打開的iPod觸摸它可能是? – DouglasHeriot
您應該可以在iPhone上測試這種情況,方法是開啓飛行模式,然後打開Wifi並走出wifi熱點的範圍。 是的,這也應該處理的人改變他們的iMessage狀態的情況下。 –