2017-03-18 2 views
1

SMSをユーザーのリストにオプションで送信できるアプリを作成しています。このアプリは現在、デバイスがMFMessageComposeViewController.canSendText()を使用してテキストメッセージの送信を許可しているかどうかを検出し、結果が真の場合にのみ「SMS送信」ボタンを表示します。iOS SMS機能の検出方法(一般的なテキストメッセージではありません)

今日私のユーザーの一人は、彼がWi-Fi専用iPadのボタンを押すと何も起こらなかったと訴えていました。それが判明したように、SMSがサポートされていなくても、iOSデバイスがiMessage機能をオンにしている場合、canSendText()もtrueを返します。 iOS設定でiMessage機能をオフにすると、「SMS送信」ボタンが無効になります。

iMessage経由でメッセージを送信する際の問題は、一部の受信者がiMessageをオンにしてテキストメッセージを受信することにあります。しかし、iMessageを持たない受信者(電源が切れているか、最初はAppleデバイスを使用していない可能性があります)では、それらのメッセージは到着しません。 (MFMessageComposeViewControllerが最終的に表示されたら、それらのアドレスは赤でマークされていますが、平均的なユーザーはメッセージが配信されないということを理解できません)。具体的には、一般的にテキストメッセージ(SMS、iMessage、MMS)だけでなく、

答えて

0

は、私の知る限り、彼らはiMessage

することができるとしてのiOS 5+を持つデバイスはMFMessageComposeViewController.canSendText()ためTRUEを返します知っているように私は、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になります。

お手伝いします。

+0

多くの場合、それがうまくいくようです。ありがとう。しかし、私はこれがうまくいかないコーナーケースを想像することができます。 SIMの有効期限が切れている、または計画がSMSメッセージ(例えば、データのみ)を許可していないユーザなど。これらの事件にも取り組む方法があるのであれば、どんな考えですか? –

+0

@WouterLiefting:私はそれがプログラム的に可能であるとは思わない。期限切れのSIMの場合は、そのSIMを挿入して上記のコードを実行して値を確認することができます。私は1つを持っていないので、期限切れのSIMでテストしていない。 – Maulik

関連する問題