12

ユーザーが電話番号を入力して登録する製品があります。

ただし、登録後に SIM を変更する可能性があります。

シムが削除されたか挿入されたかをプログラムで判断することは可能ですか?

(ご提供いただければ幸いですが、そもそも電話番号の使用に関する余談なコメントは、この議論には関係ありません。その側面については議論したくありません。sim の側面についてのみ議論したいと思います)。

4

1 に答える 1

23

はい、もちろん可能です。CoreTelephony.framework をリンクして、次のコードをコンパイルします。

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;

// Try this to track CTCarrier changes 
info.subscriberCellularProviderDidUpdateNotifier = ^(CTCarrier* inCTCarrier) {
        dispatch_async(dispatch_get_main_queue(), ^{
            NSLog(@"User did change SIM");
        });
};

mobileCountryCode、mobileNetworkCode、carrierName、isoCountryCode の値で SIM の有無を判断できます。(SIM がないと、それらは正しくなくなります)。

CoreTelephony には文書化されていない機能や通知もいくつかありますが、それらを使用すると、アプリが Apple によって禁止される可能性があります。ともかく:

// Evaluates to @"kCTSIMSupportSIMStatusReady" when SIM is present amd ready; 
// there are some other values like @"kCTSIMSupportSIMStatusNotInserted"
NSString* CTSIMSupportGetSIMStatus(); 

// Use @"kCTSIMSupportSIMStatusChangeNotification" to track changes of SIM status:
[[NSNotificationCenter defaultCenter]
    addObserver:self
    selector:@selector(SIMNotification:)
    name:@"kCTSIMSupportSIMStatusChangeNotification"
    object:nil
];

// これは現在の電話番号をコピーします
NSString* CTSettingCopyMyPhoneNumber()

補遺別の可能な (そして合法的な) 解決策: あなたの会社が電話番号のデータベースを持っている場合、特定の番号に SMS を送信するか、電話をかけて (そして切断して)、ユーザーがまだ同じ電話番号を使用していることを確認できます。

UPDATE関数NSString* CTSettingCopyMyPhoneNumber()は機能しなくなりました (空の文字列を返します)。

于 2012-06-05T20:33:55.283 に答える