2017-03-18 54 views
1

我正在編寫一個應用程序,可以選擇允許您發送短信到用戶列表。該應用程序當前檢測設備是否允許使用MFMessageComposeViewController.canSendText()發送文本消息,並在結果爲true時僅顯示「發送SMS」按鈕。如何檢測iOS短信功能(通常不是短信)

今天,我的一位用戶抱怨說,當他點擊他的Wifi專用iPad上的按鈕時,什麼都沒有發生。事實證明,如果iOS設備啓用了iMessage功能,canSendText()也會返回true,即使SMS不受支持。在iOS設置中關閉iMessage功能會正確禁用「發送短信」按鈕。

通過iMe​​ssage發送消息的問題是,某些收件人將啓用iMessage並因此收到文本消息。但對於沒有iMessage的收件人(它可能被關閉,或者他們可能沒有首先使用Apple設備),那些郵件將不會到達。 (當MFMessageComposeViewController最終出現時,這些地址被標記爲紅色,但是我的普通用戶不會理解這意味着消息不會傳遞。)

有沒有人知道測試SMS功能的可靠方法特別是,不只是短信(SMS,iMessage和MMS)一般?

回答

0

據我所知,與iOS 5以上的設備將返回TRUEMFMessageComposeViewController.canSendText(),因爲它們能夠iMessage

所以我假設你只需要在安裝在設備上的SIM卡發送文本。 但是無法檢測設備上是否安裝了SIM卡。你仍然可以使用的解決方法,如:

#import<CoreTelephony/CTCallCenter.h> 
#import<CoreTelephony/CTCall.h> 
#import<CoreTelephony/CTCarrier.h> 
#import<CoreTelephony/CTTelephonyNetworkInfo.h> 

CTTelephonyNetworkInfo* info = [[CTTelephonyNetworkInfo alloc] init]; 
CTCarrier* carrier = info.subscriberCellularProvider; 
NSString *mobileCountryCode = carrier.mobileCountryCode; 
NSString *carrierName = carrier.carrierName; 
NSString *isoCountryCode = carrier.isoCountryCode; 
NSString *mobileNetworkCode = carrier.mobileNetworkCode; 

NSLog(@"\n %@ \n %@ \n %@ \n %@", mobileCountryCode, carrierName, isoCountryCode, mobileNetworkCode); 

這裏,carrierName將返回名稱時,SIM卡是存在還是最後使用的SIM卡信息。但如果沒有安裝SIM卡,其他人將會是null

希望它可以幫助你。

+0

這似乎是適用於大多數情況。謝謝。不過,我可以想象這種情況不適用的角落案例。例如SIM卡已過期或其計劃不允許SMS消息(例如,僅限數據)的用戶。任何想法是否也有辦法解決這些問題呢? –

+0

@WouterLiefting:我不認爲這是可能的編程方式。對於過期的SIM卡,您可以插入該SIM卡並在代碼上方運行並檢查值。我還沒有過期的SIM卡測試,因爲我沒有。 – Maulik