2017-03-18 59 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