[英]Use Private API for InHouse Apps to get IMEI, ICCID and IMSI
我正在嘗試構建一個返回以下信息的應用程序:
我看到我可以使用 CoreTelephony,但我開始懷疑:要使用這些頭文件(從 class-dump 導入 CoreTelephony.h),設備必須越獄嗎?
如果沒有,CoreTelephony其僅適用於iOS6的?
我就是這樣做的:
CTServerConnectionRef conn;
void ConnectionCallback(CTServerConnectionRef connection, CFStringRef string, CFDictionaryRef dictionary, void *data) {
NSLog(@"ConnectionCallback");
CFShow(dictionary);
}
- (NSString *)coreTelephonyInfoForKey:(const NSString *)key {
NSString *retVal = nil;
conn = _CTServerConnectionCreate(kCFAllocatorDefault, ConnectionCallback,NULL);
if (conn) {
struct CTResult result;
CFMutableDictionaryRef equipmentInfo = nil;
_CTServerConnectionCopyMobileEquipmentInfo(&result, conn, &equipmentInfo);
if (equipmentInfo) {
retVal = [NSString stringWithString:CFDictionaryGetValue(equipmentInfo, (__bridge const void *)(key))];
CFRelease(equipmentInfo);
}
CFRelease(conn);
}
return retVal;
}
- (NSString *)IMEI {
return [self coreTelephonyInfoForKey:@"kCTMobileEquipmentInfoIMEI"];
這是我的CoreTelephony.h
部分回答你的問題:
未記錄的 API 稱為私有 API(在 iOS 領域)。 我認為您考慮到標簽“iphone-privateapi
私有 API 可以在越獄和非越獄手機上使用。 一般來說,公共 API 和私有 API 之間的唯一技術區別是 API 是否在 .h 文件中定義。
有時,私有 API 會失效(修改、刪除或受權利保護)。 最后一個(受權利保護是最常見的情況。權利是授予您使用某些 API 的能力的權限。在被監禁的設備上,只有系統應用程序可以擁有權利。在越獄設備上,任何應用程序都可以擁有權利。
回到你的問題。 我沒有在 iOS 7 上試過 CoreTelephony。你試過了嗎? (我不確定“如果不是,CoreTelephony 僅對 iOS6 有效?”是否暗示您嘗試過)。
它可能需要com.apple.coretelephony.Identity.get
權利。 在首選項應用程序中找到它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.