2012-06-03 29 views
12

Chúng tôi có một sản phẩm mà người dùng đăng ký bằng cách cung cấp số điện thoại của họ.Có thể xác định xem số SIM/Điện thoại có thay đổi không?

Tuy nhiên sau khi đăng ký, họ có thể thay đổi sim của họ.

Có thể lập trình xác định xem sim đã được tháo hoặc lắp không?

(Cảm ơn nếu bạn cung cấp, nhưng bất kỳ nhận xét phân tích nào về việc sử dụng số điện thoại ở địa điểm đầu tiên sẽ không liên quan đến cuộc thảo luận này, tôi không muốn thảo luận khía cạnh đó).

Trả lời

23

Có, tất nhiên điều đó là có thể. Liên kết CoreTelephony.framework để làm sau biên dịch mã:

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"); 
     }); 
}; 

Bởi giá trị của mobileCountryCode, mobileNetworkCode, CARRIERNAME, isoCountryCode bạn có thể đánh giá về sự hiện diện của SIM. (Không có SIM chúng trở nên không chính xác).

Ngoài ra còn có một số chức năng/thông báo không có giấy tờ trong CoreTelephony, nhưng ứng dụng của bạn có thể bị Apple cấm nếu bạn sử dụng chúng. Dù sao:

// 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 
]; 

// một bản sao điện thoại hiện tại này số
NSString * CTSettingCopyMyPhoneNumber()

Phụ Lục Một giải pháp khả thi (và pháp lý): nếu công ty của bạn có một cơ sở dữ liệu của số điện thoại, bạn có thể gửi sms hoặc gọi (và cắt) bất kỳ số cụ thể nào để xác minh rằng người dùng vẫn sử dụng cùng một số điện thoại.

CẬP NHẬT Chức năng NSString* CTSettingCopyMyPhoneNumber() không hoạt động nữa (trả về chuỗi rỗng).

+0

Điều đó không giúp ích nhiều khi anh ấy muốn tìm hiểu xem người dùng đã thay đổi thẻ SIM chưa. Lớp này chỉ trả về thông tin mà không có nghĩa là có thể tách hai thẻ SIM. Điều gì sẽ xảy ra nếu người dùng thay đổi thẻ SIM và số điện thoại nhưng vẫn sử dụng cùng một mạng di động? – Andreas

+1

Như Andreas nói, bản thân API [tài liệu] này không được sử dụng nhiều, tuy nhiên nếu có thể đăng ký thông báo thay đổi một trong những giá trị này sẽ hữu ích. Ngay cả khi người dùng lấy ra sim và sau đó đặt cùng một trở lại, nếu tôi biết điều đó xảy ra thì nó không quá tệ, ngay cả khi tôi không biết rằng các sim có khác nhau hay không. Ít nhất tôi cũng biết rằng sims * có thể * có khả năng khác. Cảm ơn bạn đã cung cấp thông tin về API không có giấy tờ, có thể bạn có thể tìm hiểu xem nó có phù hợp với táo để sử dụng không. – Gruntcakes

+0

Andreas, Chris, tôi nên nói rõ ràng: Nó không thể có được bất kỳ thông tin SIM có giá trị bởi bất kỳ phương tiện tài liệu chắc chắn. Chúng tôi chỉ có thể đoán bằng cách lặp lại thông tin nhà cung cấp dịch vụ và tính khả dụng của mạng di động. Nếu đó là không đủ cho bạn sau đó sử dụng các tính năng không có giấy tờ và hack. Có rất nhiều người trong số họ trong iOS. Nhưng bạn có thể bị cấm từ Appstore, và có một lý do cho điều đó. Nếu ai đó sẽ nhận được thông tin như vậy từ SIM như số điện thoại hoặc IMSI, có rất nhiều điều kiện để làm rất nhiều điều xấu như spam điện thoại di động, nghe trộm, vv –

Các vấn đề liên quan