我正在编写一个应用程序,可以选择允许你发送短信给一个用户列表。该应用程序目前检测设备是否允许使用MFMessageComposeViewController.canSendText()发送文本消息,并仅在结果为真时显示“发送短信”按钮。
今天,我的一个用户抱怨说,当他按下他的只有Wifi功能的iPad上的按钮时,什么也没有发生。结果是,如果iOS设备启用了iMessage功能,即使不支持短信,canSendText()也会返回true。在iOS设置中关闭iMessage功能会正确禁用“发送短信”按钮。
通过iMessage发送消息的问题是,某些收件人会打开iMessage,因此会收到文本消息。但对于没有使用iMessage的收件人(它可能已经关闭,或者他们可能一开始就没有使用苹果设备),这些消息将不会到达。(当MFMessageComposeViewController最终打开时,这些地址将标记为红色。但我的普通用户不会理解这意味着消息将不会传递。)
有没有人知道一种可靠的方法,可以专门测试短信功能,而不仅仅是一般的短信(短信,iMessage和彩信)?
发布于 2017-03-18 22:02:40
据我所知,安装了iOS 5+的设备将返回适用于MFMessageComposeViewController.canSendText()
的TRUE
,因为它们支持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
。
https://stackoverflow.com/questions/42874051
复制相似问题