標籤:系統 .com dict 名稱 nil uuid tostring name err
首先推薦一個在用的庫XYQuick 地址:https://github.com/uxyheaven/XYQuick
idfa:
擷取方式 [ASIdentifierManager sharedManager].advertisingIdentifier.UUIDString
每個裝置只有一個IDFA,不同APP在同一裝置上擷取IDFA的結果是一樣的裝置重啟不會產生新的IDFA但IDFA存在重建的情況:使用者完全重設系統(設定程式 -> 通用 -> 還原 -> 還原位置與隱私)使用者明確還原廣告(設定程式-> 通用 -> 關於本機 -> 廣告 -> 還原廣告標示符)
Appstore禁止不使用廣告而採集IDFA的app上架
檢查代碼中是否使用了idfa1、開啟終端cd到要檢查的檔案的根目錄。2、執行下列語句:grep -r advertisingIdentifier . (別少了最後那個點號)。
由於idfa會出現取不到的情況,故絕不可以作為業務分析的主id,來識別使用者或者當idfa取不到就使用另外的方法產生具有相同作用的標示符儲存在鑰匙串中
idfv:
擷取方式[UIDevice currentDevice].identifierForVendor.UUIDString
特點: 根據vendor的值,如果vendor相同,則返回同一字串;如果vendor不同,則返回不同的字串。vendor解釋:英文解釋為賣家,小販。根據xcode文檔解釋,正常情況下,會根據App Store提供的資料進行判斷。但是如果app不是通過app store進行安裝的(如公司專屬應用程式或開發調試階段),那麼會根據bundle ID判斷。判斷準則:參考官方說明com.example.app1和com.example.app2,只有最後的尾碼不同,所以會產生相同的vendor ID
如果使用者將屬於此Vender的所有App卸載,則idfv的值會被重設,即再重裝此Vender的App,idfv的值和之前不同
udid:
UDID的全稱是Unique Device Identifier,顧名思義,它就是蘋果IOS裝置的唯一識別碼,它由40個字元的字母和數字組成。
在很多需要限制一台裝置一個帳號的應用中經常會用到。在iOS5中可以擷取到裝置的UDID,後來被蘋果禁止了。
uuid:
UUID是Universally Unique Identifier的縮寫,中文意思是通用唯一識別碼。它是讓分布式系統中的所有元素,都能有唯一的辨識資訊,而不需要透過中央控制端來做辨識資訊的指定。
這樣,每個人都可以建立不與其它人衝突的 UUID。在此情況下,就不需考慮資料庫建立時的名稱重複問題。蘋果公司建議使用UUID為應用產生唯一標識字串。開發人員可以在應用第一次啟動時調用一 次,然後將該串儲存起來,替代UDID來使用。但是,如果使用者刪除該應用再次安裝時,又會產生新的字串,所以不能保證唯一識別該裝置。
使用UUID,就要考慮應用被刪除後再重新安裝時的處理。一個解決的辦法是:UUID一般只產生一次,儲存在iOS系統裡面,如果應用刪除了,重裝應用之後它的UUID還是一樣的,除非系統重設
。但是不能保證在以後的系統升級後還能用(如果系統儲存了該資訊就能用)
isJailbreaking:
手機是否越獄是根據手機檔案目錄來實現的,可以使用XYQuick提供的方法:[XYSystemInfo sharedInstance].isJailBroken
isDeviceSimulator:
- (BOOL)isDeviceSimulator{ struct utsname systemInfo; uname(&systemInfo); NSString *tmpDevStr = [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding]; if ([tmpDevStr isEqualToString:@"x86_64"] || [tmpDevStr isEqualToString:@"i386"] || [tmpDevStr isEqualToString:@"i586"]) { return YES; } return NO;}
Wi-FiMac:
通常指Wi-Fi的BSSID- (NSString *)wifiMac{ NSString *macIp = @"Not Found"; CFArrayRef myArray = CNCopySupportedInterfaces(); if (myArray != nil) { CFDictionaryRef myDict = CNCopyCurrentNetworkInfo(CFArrayGetValueAtIndex(myArray, 0)); if (myDict != nil) { NSDictionary *dict = (NSDictionary*)CFBridgingRelease(myDict); macIp = [dict valueForKey:@"BSSID"]; } } if(myArray){ CFRelease(myArray); } return macIp;}
Wi-Fi Name:
Wi-Fi Name通常指Wi-Fi的SSID- (NSString *)deviceSSID{ NSString *wifiName = nil; CFArrayRef wifiInterfaces = CNCopySupportedInterfaces(); if (!wifiInterfaces) { return nil; } NSArray *interfaces = (__bridge NSArray *)wifiInterfaces; for (NSString *interfaceName in interfaces) { CFDictionaryRef dictRef = CNCopyCurrentNetworkInfo((__bridge CFStringRef)(interfaceName)); if (dictRef) { NSDictionary *networkInfo = (__bridge NSDictionary *)dictRef; wifiName = [networkInfo objectForKey:(__bridge NSString *)kCNNetworkInfoKeySSID]; CFRelease(dictRef); } } CFRelease(wifiInterfaces); return wifiName;}
deviceName:
- (NSString *)deviceName{#if (TARGET_OS_IPHONE || TARGET_IPHONE_SIMULATOR) return [UIDevice currentDevice].name;#else return @"";#endif}
freeDiskSpace:
- (NSString *)freeDiskSpace{#if (TARGET_OS_IPHONE || TARGET_IPHONE_SIMULATOR) NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0] ; NSFileManager *fileManager = [[NSFileManager alloc ]init]; NSDictionary *fileSysAttributes = [fileManager attributesOfFileSystemForPath:path error:nil]; NSNumber *totalSpace = [fileSysAttributes objectForKey:NSFileSystemFreeSize]; return [NSString stringWithFormat:@"%.2fG",[totalSpace longLongValue]/1024.0/1024.0/1024.0];#else return nil;#endif}
totalSpace:
- (NSString *)totalSpace{#if (TARGET_OS_IPHONE || TARGET_IPHONE_SIMULATOR) NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0] ; NSFileManager *fileManager = [[NSFileManager alloc ]init]; NSDictionary *fileSysAttributes = [fileManager attributesOfFileSystemForPath:path error:nil]; NSNumber *totalSpace = [fileSysAttributes objectForKey:NSFileSystemSize]; return [NSString stringWithFormat:@"%.2fG",[totalSpace longLongValue]/1024.0/1024.0/1024.0];#else return nil;#endif}
關於iOS裝置的那些事