2013-05-21 99 views

回答

6

有幾種方式來獲得IMEI較新設備上

1)私人ManagedConfiguration.framework

CFStringRef MCCTIMEI() 

2)CoreTelephony.framework

struct CTResult 
{ 
    int flag; 
    int a; 
}; 
extern CFStringRef kCTMobileEquipmentInfoIMEI; 

void *connection = _CTServerConnectionCreate(kCFAllocatorDefault, NULL, NULL); 

NSDictionary *info = nil; 
struct CTResult result; 
_CTServerConnectionCopyMobileEquipmentInfo(&result, connection, &info); 
[info autorelease];  
CFRelease(connection); 

NSString* IMEI = (NSString*)info[(NSString*)kCTMobileEquipmentInfoIMEI]; 

3)liblockdown.dylib

extern CFStringRef kLockdownIMEIKey; 

void* connection = lockdown_connect(); 
NSString* IMEI = [(NSString*)lockdown_copy_value(connection, NULL, kLockdownIMEIKey) autorelease]; 
lockdown_disconnect(connection); 

我在MCCTIMEI-設備啓動後返回空的IMEI時遇到了一些問題。現在我正在使用CoreTelephony解決方案,從來沒有遇到過問題。

UPDATE

在iOS 7,這些API由com.apple.coretelephony.Identity.get權利的保護。要訪問IMEI(IMSI,電話號碼和其他信息),您需要使用布爾值設置爲true的權利對您進行簽名。

+0

TNX的答覆,我試) – InViZz

+0

可悲的是,沒有這些方法將返回IMEI上iOS7 – JLuiz

+0

@Mobster,這些API可能是由保護我認爲它是'com.apple.coretelephony.Identity.get'。 – creker

2

以編程方式獲取IMEI號碼有些困難。但是,如果您正在尋找識別特定手機的方式,則可以使用UDID(唯一設備標識符)來執行此操作。

NSString *UDID = [[UIDevice currentDevice] uniqueIdentifier]; 

,也嘗試一下本作IMEI

NSString *imei = [[NetworkController sharedInstance] IMEI]; 

******更新2014年10月******

NSUUID *UUID = [[UIDevice currentDevice] identifierForVendor]; 
NSString *stringUUID = [UUID UUIDString]; 

的UUID是基本上唯一的標識符你手機的硬件。由於製造商之間沒有合作關係,因此不保證它是唯一的,但考慮到組合的數量,它是適用於廣泛應用的合理可靠的硬件標識符。

+2

THX的答覆,但唯一標識符已被棄用 – InViZz

+0

也許你犯了一個錯字。 **「UUIDstring」**和**「身份」**。 這段代碼是正確的: 'NSUUID * UUID = [[UIDevice currentDevice] identifierForVendor]; 的NSString * stringUUID = [UUID UUIDString]' 在iOS 8.3工作 – WildMassacre

1

您可以使用它:


下載從GitHub

OpenUDID.h 
OpenUDID.m 

以下兩個文件,這些文件添加到您的項目。

並以此

#import "OpenUDID.h" 

NSString* openUDID = [OpenUDID value]; 

它在iPhone 4測試和iPhone 5