我正在编写一个应用程序,可以选择允许您向用户列表发送短信。该应用程序当前检测设备是否允许使用 MFMessageComposeViewController.canSendText() 发送文本消息,并且仅在结果为真时显示"发送短信"按钮。
今天,我的一位用户抱怨说,当他按下仅限Wifi的iPad上的按钮时,什么也没发生。事实证明,如果iOS设备打开了iMessage功能,即使不支持SMS,canSendText()也会返回true。在iOS设置中关闭iMessage功能会正确禁用"发送短信"按钮。
通过iMessage发送消息的问题在于某些收件人将打开iMessage,因此将收到文本消息。但是对于没有iMessage的收件人(它可能已关闭,或者他们可能首先没有使用Apple设备),这些消息将不会到达。(当 MFMessageComposeViewController 最终启动时,这些地址将标记为红色。但我的普通用户不会理解这意味着消息不会传递。
有没有人知道一种可靠的方法可以专门测试SMS功能,而不仅仅是一般的短信(SMS,iMessage和MMS)?
据我所知,装有iOS 5 +的设备将返回TRUE
MFMessageComposeViewController.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);
在这里,当SIM卡存在或上次使用SIM卡信息时,carrierName
将返回名称。但是,如果没有安装SIM卡,其他人将被null
。