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