亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > iOS > 正文

超全的iOS各種設備信息獲取方法總結(包括iPhone8/iPhone X)

2020-07-26 02:35:22
字體:
來源:轉載
供稿:網友

前言

在開發中,有的時候為了統計用戶信息、下發廣告,服務器端往往需要手機用戶設備及app的各種信息,這些信息的獲取可以根據不同的設備或者App、系統版本來提供不同的功能或更好的用戶體驗,或者讓開發者能更好的分析用戶的問題原因。

下面講述一下各種信息的獲取方式:

點擊下載以上展示效果的GitHub源碼 ,大家也可以 本地下載

一行代碼就搞定的統一來!

 // 這個方法后面會列出來 NSString *deviceName = [self getDeviceName]; NSLog(@"設備型號-->%@", deviceName);  NSString *iPhoneName = [UIDevice currentDevice].name; NSLog(@"iPhone名稱-->%@", iPhoneName);  NSString *appVerion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"]; NSLog(@"app版本號-->%@", appVerion);  CGFloat batteryLevel = [[UIDevice currentDevice] batteryLevel]; NSLog(@"電池電量-->%f", batteryLevel);  NSString *localizedModel = [UIDevice currentDevice].localizedModel; NSLog(@"localizedModel-->%@", localizedModel);  NSString *systemName = [UIDevice currentDevice].systemName; NSLog(@"當前系統名稱-->%@", systemName);  NSString *systemVersion = [UIDevice currentDevice].systemVersion; NSLog(@"當前系統版本號-->%@", systemVersion); struct utsname systemInfo; uname(&systemInfo); NSString *device_model = [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding]; NSLog(@"device_model-->%@", device_model); // 這個方法后面會單獨列出 NSString *macAddress = [self getMacAddress]; NSLog(@"macAddress-->%@", macAddress);  // 這個方法后面會單獨列出 NSString *deviceIP = [self getDeviceIPAddresses]; NSLog(@"deviceIP-->%@", deviceIP); // 設備上次重啟的時間 NSTimeInterval time = [[NSProcessInfo processInfo] systemUptime]; NSDate *lastRestartDate = [[NSDate alloc] initWithTimeIntervalSinceNow:(0 - time)];

廣告位標識符:在同一個設備上的所有App都會取到相同的值,是蘋果專門給各廣告提供商用來追蹤用戶而設的,用戶可以在 設置|隱私|廣告追蹤里重置此id的值,或限制此id的使用,故此id有可能會取不到值,但好在Apple默認是允許追蹤的,而且一般用戶都不知道有這么個設置,所以基本上用來監測推廣效果,是戳戳有余了

 NSString *idfa = [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString]; NSLog(@"廣告位標識符idfa-->%@", idfa);

UUID是Universally Unique Identifier的縮寫,中文意思是通用唯一識別碼。它是讓分布式系統中的所有元素,都能有唯一的辨識資訊,而不需要透過中央控制端來做辨識資訊的指 定。這樣,每個人都可以建立不與其它人沖突的 UUID。在此情況下,就不需考慮數據庫建立時的名稱重復問題。蘋果公司建議使用UUID為應用生成唯一標識字符串。

 NSString *uuid = [[[UIDevice currentDevice] identifierForVendor] UUIDString]; NSLog(@"唯一識別碼uuid-->%@", uuid);

獲取設備型號

// 獲取設備型號然后手動轉化為對應名稱- (NSString *)getDeviceName{ // 需要#import "sys/utsname.h" #warning 題主嘔心瀝血總結??!最全面!親測!全網獨此一份?。?struct utsname systemInfo; uname(&systemInfo); NSString *deviceString = [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding];  if ([deviceString isEqualToString:@"iPhone3,1"]) return @"iPhone 4"; if ([deviceString isEqualToString:@"iPhone3,2"]) return @"iPhone 4"; if ([deviceString isEqualToString:@"iPhone3,3"]) return @"iPhone 4"; if ([deviceString isEqualToString:@"iPhone4,1"]) return @"iPhone 4S"; if ([deviceString isEqualToString:@"iPhone5,1"]) return @"iPhone 5"; if ([deviceString isEqualToString:@"iPhone5,2"]) return @"iPhone 5 (GSM+CDMA)"; if ([deviceString isEqualToString:@"iPhone5,3"]) return @"iPhone 5c (GSM)"; if ([deviceString isEqualToString:@"iPhone5,4"]) return @"iPhone 5c (GSM+CDMA)"; if ([deviceString isEqualToString:@"iPhone6,1"]) return @"iPhone 5s (GSM)"; if ([deviceString isEqualToString:@"iPhone6,2"]) return @"iPhone 5s (GSM+CDMA)"; if ([deviceString isEqualToString:@"iPhone7,1"]) return @"iPhone 6 Plus"; if ([deviceString isEqualToString:@"iPhone7,2"]) return @"iPhone 6"; if ([deviceString isEqualToString:@"iPhone8,1"]) return @"iPhone 6s"; if ([deviceString isEqualToString:@"iPhone8,2"]) return @"iPhone 6s Plus"; if ([deviceString isEqualToString:@"iPhone8,4"]) return @"iPhone SE"; // 日行兩款手機型號均為日本獨占,可能使用索尼FeliCa支付方案而不是蘋果支付 if ([deviceString isEqualToString:@"iPhone9,1"]) return @"國行、日版、港行iPhone 7"; if ([deviceString isEqualToString:@"iPhone9,2"]) return @"港行、國行iPhone 7 Plus"; if ([deviceString isEqualToString:@"iPhone9,3"]) return @"美版、臺版iPhone 7"; if ([deviceString isEqualToString:@"iPhone9,4"]) return @"美版、臺版iPhone 7 Plus"; if ([deviceString isEqualToString:@"iPhone10,1"]) return @"國行(A1863)、日行(A1906)iPhone 8"; if ([deviceString isEqualToString:@"iPhone10,4"]) return @"美版(Global/A1905)iPhone 8"; if ([deviceString isEqualToString:@"iPhone10,2"]) return @"國行(A1864)、日行(A1898)iPhone 8 Plus"; if ([deviceString isEqualToString:@"iPhone10,5"]) return @"美版(Global/A1897)iPhone 8 Plus"; if ([deviceString isEqualToString:@"iPhone10,3"]) return @"國行(A1865)、日行(A1902)iPhone X"; if ([deviceString isEqualToString:@"iPhone10,6"]) return @"美版(Global/A1901)iPhone X";  if ([deviceString isEqualToString:@"iPod1,1"]) return @"iPod Touch 1G"; if ([deviceString isEqualToString:@"iPod2,1"]) return @"iPod Touch 2G"; if ([deviceString isEqualToString:@"iPod3,1"]) return @"iPod Touch 3G"; if ([deviceString isEqualToString:@"iPod4,1"]) return @"iPod Touch 4G"; if ([deviceString isEqualToString:@"iPod5,1"]) return @"iPod Touch (5 Gen)";  if ([deviceString isEqualToString:@"iPad1,1"]) return @"iPad"; if ([deviceString isEqualToString:@"iPad1,2"]) return @"iPad 3G"; if ([deviceString isEqualToString:@"iPad2,1"]) return @"iPad 2 (WiFi)"; if ([deviceString isEqualToString:@"iPad2,2"]) return @"iPad 2"; if ([deviceString isEqualToString:@"iPad2,3"]) return @"iPad 2 (CDMA)"; if ([deviceString isEqualToString:@"iPad2,4"]) return @"iPad 2"; if ([deviceString isEqualToString:@"iPad2,5"]) return @"iPad Mini (WiFi)"; if ([deviceString isEqualToString:@"iPad2,6"]) return @"iPad Mini"; if ([deviceString isEqualToString:@"iPad2,7"]) return @"iPad Mini (GSM+CDMA)"; if ([deviceString isEqualToString:@"iPad3,1"]) return @"iPad 3 (WiFi)"; if ([deviceString isEqualToString:@"iPad3,2"]) return @"iPad 3 (GSM+CDMA)"; if ([deviceString isEqualToString:@"iPad3,3"]) return @"iPad 3"; if ([deviceString isEqualToString:@"iPad3,4"]) return @"iPad 4 (WiFi)"; if ([deviceString isEqualToString:@"iPad3,5"]) return @"iPad 4"; if ([deviceString isEqualToString:@"iPad3,6"]) return @"iPad 4 (GSM+CDMA)"; if ([deviceString isEqualToString:@"iPad4,1"]) return @"iPad Air (WiFi)"; if ([deviceString isEqualToString:@"iPad4,2"]) return @"iPad Air (Cellular)"; if ([deviceString isEqualToString:@"iPad4,4"]) return @"iPad Mini 2 (WiFi)"; if ([deviceString isEqualToString:@"iPad4,5"]) return @"iPad Mini 2 (Cellular)"; if ([deviceString isEqualToString:@"iPad4,6"]) return @"iPad Mini 2"; if ([deviceString isEqualToString:@"iPad4,7"]) return @"iPad Mini 3"; if ([deviceString isEqualToString:@"iPad4,8"]) return @"iPad Mini 3"; if ([deviceString isEqualToString:@"iPad4,9"]) return @"iPad Mini 3"; if ([deviceString isEqualToString:@"iPad5,1"]) return @"iPad Mini 4 (WiFi)"; if ([deviceString isEqualToString:@"iPad5,2"]) return @"iPad Mini 4 (LTE)"; if ([deviceString isEqualToString:@"iPad5,3"]) return @"iPad Air 2"; if ([deviceString isEqualToString:@"iPad5,4"]) return @"iPad Air 2"; if ([deviceString isEqualToString:@"iPad6,3"]) return @"iPad Pro 9.7"; if ([deviceString isEqualToString:@"iPad6,4"]) return @"iPad Pro 9.7"; if ([deviceString isEqualToString:@"iPad6,7"]) return @"iPad Pro 12.9"; if ([deviceString isEqualToString:@"iPad6,8"]) return @"iPad Pro 12.9"; if ([machineString isEqualToString:@"iPad6,11"]) return @"iPad 5 (WiFi)"; if ([machineString isEqualToString:@"iPad6,12"]) return @"iPad 5 (Cellular)"; if ([machineString isEqualToString:@"iPad7,1"]) return @"iPad Pro 12.9 inch 2nd gen (WiFi)"; if ([machineString isEqualToString:@"iPad7,2"]) return @"iPad Pro 12.9 inch 2nd gen (Cellular)"; if ([machineString isEqualToString:@"iPad7,3"]) return @"iPad Pro 10.5 inch (WiFi)"; if ([machineString isEqualToString:@"iPad7,4"]) return @"iPad Pro 10.5 inch (Cellular)";  if ([deviceString isEqualToString:@"AppleTV2,1"]) return @"Apple TV 2"; if ([deviceString isEqualToString:@"AppleTV3,1"]) return @"Apple TV 3"; if ([deviceString isEqualToString:@"AppleTV3,2"]) return @"Apple TV 3"; if ([deviceString isEqualToString:@"AppleTV5,3"]) return @"Apple TV 4"; if ([deviceString isEqualToString:@"i386"]) return @"Simulator"; if ([deviceString isEqualToString:@"x86_64"]) return @"Simulator";  return deviceString;}

獲取 iPhone 設備顏色/外殼顏色

#warning 該方法是私有API,上線會被拒// 由于每款手機同一顏色具體色號不一樣,如 iPhone 6和 iPhone SE粉色的兩個具體色值是不一樣的,因此在這里只能返回一個色號UIDevice *device = [UIDevice currentDevice];SEL selector = NSSelectorFromString(@"deviceInfoForKey:");if (![device respondsToSelector:selector]) { selector = NSSelectorFromString(@"_deviceInfoForKey:");}if ([device respondsToSelector:selector]) { // 消除警告“performSelector may cause a leak because its selector is unknown” IMP imp = [device methodForSelector:selector]; NSString * (*func)(id, SEL, NSString *) = (void *)imp;  NSString *deviceColor = func(device, selector, @"DeviceColor"); NSString *deviceEnclosureColor = func(device, selector, @"DeviceEnclosureColor"); NSLog(@"deviceColor --> %@ /n @"deviceEnclosureColor --> %@ ", deviceColor, deviceEnclosureColor);}

這里是一些已知的設備顏色

mac 地址

- (NSString *)getMacAddress { int mib[6]; size_t len; char *buf; unsigned char *ptr; struct if_msghdr *ifm; struct sockaddr_dl *sdl;  mib[0] = CTL_NET; mib[1] = AF_ROUTE; mib[2] = 0; mib[3] = AF_LINK; mib[4] = NET_RT_IFLIST;  if ((mib[5] = if_nametoindex("en0")) == 0) { printf("Error: if_nametoindex error/n"); return NULL; }  if (sysctl(mib, 6, NULL, &len, NULL, 0) < 0) { printf("Error: sysctl, take 1/n"); return NULL; }  if ((buf = malloc(len)) == NULL) { printf("Could not allocate memory. error!/n"); return NULL; }  if (sysctl(mib, 6, buf, &len, NULL, 0) < 0) { printf("Error: sysctl, take 2"); return NULL; }  ifm = (struct if_msghdr *)buf; sdl = (struct sockaddr_dl *)(ifm + 1); ptr = (unsigned char *)LLADDR(sdl);  NSString *outstring = [NSString stringWithFormat:@"%02x%02x%02x%02x%02x%02x", *ptr, *(ptr+1), *(ptr+2), *(ptr+3), *(ptr+4), *(ptr+5)]; free(buf);  return [outstring uppercaseString];}

IP地址

- (NSString *)getDeviceIPAddresses {  int sockfd = socket(AF_INET, SOCK_DGRAM, 0);  NSMutableArray *ips = [NSMutableArray array];  int BUFFERSIZE = 4096;  struct ifconf ifc;  char buffer[BUFFERSIZE], *ptr, lastname[IFNAMSIZ], *cptr;  struct ifreq *ifr, ifrcopy;  ifc.ifc_len = BUFFERSIZE; ifc.ifc_buf = buffer;  if (ioctl(sockfd, SIOCGIFCONF, &ifc) >= 0){  for (ptr = buffer; ptr < buffer + ifc.ifc_len; ){    ifr = (struct ifreq *)ptr;  int len = sizeof(struct sockaddr);    if (ifr->ifr_addr.sa_len > len) {  len = ifr->ifr_addr.sa_len;  }    ptr += sizeof(ifr->ifr_name) + len;  if (ifr->ifr_addr.sa_family != AF_INET) continue;  if ((cptr = (char *)strchr(ifr->ifr_name, ':')) != NULL) *cptr = 0;  if (strncmp(lastname, ifr->ifr_name, IFNAMSIZ) == 0) continue;    memcpy(lastname, ifr->ifr_name, IFNAMSIZ);  ifrcopy = *ifr;  ioctl(sockfd, SIOCGIFFLAGS, &ifrcopy);    if ((ifrcopy.ifr_flags & IFF_UP) == 0) continue;    NSString *ip = [NSString stringWithFormat:@"%s", inet_ntoa(((struct sockaddr_in *)&ifr->ifr_addr)->sin_addr)];  [ips addObject:ip]; } }  close(sockfd); NSString *deviceIP = @"";  for (int i=0; i < ips.count; i++) { if (ips.count > 0) {  deviceIP = [NSString stringWithFormat:@"%@",ips.lastObject]; } } return deviceIP;}

CPU

// CPU總數目- (NSUInteger)getCPUCount { return [NSProcessInfo processInfo].activeProcessorCount;}// 已使用的CPU比例- (float)getCPUUsage { float cpu = 0; NSArray *cpus = [self getPerCPUUsage]; if (cpus.count == 0) return -1; for (NSNumber *n in cpus) { cpu += n.floatValue; } return cpu;}// 獲取每個cpu的使用比例- (NSArray *)getPerCPUUsage { processor_info_array_t _cpuInfo, _prevCPUInfo = nil; mach_msg_type_number_t _numCPUInfo, _numPrevCPUInfo = 0; unsigned _numCPUs; NSLock *_cpuUsageLock;  int _mib[2U] = { CTL_HW, HW_NCPU }; size_t _sizeOfNumCPUs = sizeof(_numCPUs); int _status = sysctl(_mib, 2U, &_numCPUs, &_sizeOfNumCPUs, NULL, 0U); if (_status) _numCPUs = 1;  _cpuUsageLock = [[NSLock alloc] init];  natural_t _numCPUsU = 0U; kern_return_t err = host_processor_info(mach_host_self(), PROCESSOR_CPU_LOAD_INFO, &_numCPUsU, &_cpuInfo, &_numCPUInfo); if (err == KERN_SUCCESS) { [_cpuUsageLock lock];  NSMutableArray *cpus = [NSMutableArray new]; for (unsigned i = 0U; i < _numCPUs; ++i) {  Float32 _inUse, _total;  if (_prevCPUInfo) {  _inUse = (    (_cpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_USER] - _prevCPUInfo[(CPU_STATE_MAX * i) + CPU_STATE_USER])    + (_cpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_SYSTEM] - _prevCPUInfo[(CPU_STATE_MAX * i) + CPU_STATE_SYSTEM])    + (_cpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_NICE] - _prevCPUInfo[(CPU_STATE_MAX * i) + CPU_STATE_NICE])    );  _total = _inUse + (_cpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_IDLE] - _prevCPUInfo[(CPU_STATE_MAX * i) + CPU_STATE_IDLE]);  } else {  _inUse = _cpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_USER] + _cpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_SYSTEM] + _cpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_NICE];  _total = _inUse + _cpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_IDLE];  }  [cpus addObject:@(_inUse / _total)]; }  [_cpuUsageLock unlock]; if (_prevCPUInfo) {  size_t prevCpuInfoSize = sizeof(integer_t) * _numPrevCPUInfo;  vm_deallocate(mach_task_self(), (vm_address_t)_prevCPUInfo, prevCpuInfoSize); } return cpus; } else { return nil; }}

Disk磁盤空間

// 獲取磁盤總空間- (int64_t)getTotalDiskSpace { NSError *error = nil; NSDictionary *attrs = [[NSFileManager defaultManager] attributesOfFileSystemForPath:NSHomeDirectory() error:&error]; if (error) return -1; int64_t space = [[attrs objectForKey:NSFileSystemSize] longLongValue]; if (space < 0) space = -1; return space;}// 獲取未使用的磁盤空間- (int64_t)getFreeDiskSpace { NSError *error = nil; NSDictionary *attrs = [[NSFileManager defaultManager] attributesOfFileSystemForPath:NSHomeDirectory() error:&error]; if (error) return -1; int64_t space = [[attrs objectForKey:NSFileSystemFreeSize] longLongValue]; if (space < 0) space = -1; return space;}// 獲取已使用的磁盤空間- (int64_t)getUsedDiskSpace { int64_t totalDisk = [self getTotalDiskSpace]; int64_t freeDisk = [self getFreeDiskSpace]; if (totalDisk < 0 || freeDisk < 0) return -1; int64_t usedDisk = totalDisk - freeDisk; if (usedDisk < 0) usedDisk = -1; return usedDisk;}

Memory內存相關數據

// 系統總內存空間- (int64_t)getTotalMemory { int64_t totalMemory = [[NSProcessInfo processInfo] physicalMemory]; if (totalMemory < -1) totalMemory = -1; return totalMemory;}// 活躍的內存,正在使用或者很短時間內被使用過- (int64_t)getActiveMemory { mach_port_t host_port = mach_host_self(); mach_msg_type_number_t host_size = sizeof(vm_statistics_data_t) / sizeof(integer_t); vm_size_t page_size; vm_statistics_data_t vm_stat; kern_return_t kern;  kern = host_page_size(host_port, &page_size); if (kern != KERN_SUCCESS) return -1; kern = host_statistics(host_port, HOST_VM_INFO, (host_info_t)&vm_stat, &host_size); if (kern != KERN_SUCCESS) return -1; return vm_stat.active_count * page_size;}// 最近使用過,但是目前處于不活躍狀態的內存- (int64_t)getInActiveMemory { mach_port_t host_port = mach_host_self(); mach_msg_type_number_t host_size = sizeof(vm_statistics_data_t) / sizeof(integer_t); vm_size_t page_size; vm_statistics_data_t vm_stat; kern_return_t kern;  kern = host_page_size(host_port, &page_size); if (kern != KERN_SUCCESS) return -1; kern = host_statistics(host_port, HOST_VM_INFO, (host_info_t)&vm_stat, &host_size); if (kern != KERN_SUCCESS) return -1; return vm_stat.inactive_count * page_size;}// 空閑的內存空間- (int64_t)getFreeMemory { mach_port_t host_port = mach_host_self(); mach_msg_type_number_t host_size = sizeof(vm_statistics_data_t) / sizeof(integer_t); vm_size_t page_size; vm_statistics_data_t vm_stat; kern_return_t kern;  kern = host_page_size(host_port, &page_size); if (kern != KERN_SUCCESS) return -1; kern = host_statistics(host_port, HOST_VM_INFO, (host_info_t)&vm_stat, &host_size); if (kern != KERN_SUCCESS) return -1; return vm_stat.free_count * page_size;}// 已使用的內存空間- (int64_t)getUsedMemory { mach_port_t host_port = mach_host_self(); mach_msg_type_number_t host_size = sizeof(vm_statistics_data_t) / sizeof(integer_t); vm_size_t page_size; vm_statistics_data_t vm_stat; kern_return_t kern;  kern = host_page_size(host_port, &page_size); if (kern != KERN_SUCCESS) return -1; kern = host_statistics(host_port, HOST_VM_INFO, (host_info_t)&vm_stat, &host_size); if (kern != KERN_SUCCESS) return -1; return page_size * (vm_stat.active_count + vm_stat.inactive_count + vm_stat.wire_count);}// 用來存放內核和數據結構的內存,framework、用戶級別的應用無法分配- (int64_t)getWiredMemory { mach_port_t host_port = mach_host_self(); mach_msg_type_number_t host_size = sizeof(vm_statistics_data_t) / sizeof(integer_t); vm_size_t page_size; vm_statistics_data_t vm_stat; kern_return_t kern;  kern = host_page_size(host_port, &page_size); if (kern != KERN_SUCCESS) return -1; kern = host_statistics(host_port, HOST_VM_INFO, (host_info_t)&vm_stat, &host_size); if (kern != KERN_SUCCESS) return -1; return vm_stat.wire_count * page_size;}// 可釋放的內存空間:內存吃緊自動釋放,針對大對象存放所需的大塊內存空間- (int64_t)getPurgableMemory { mach_port_t host_port = mach_host_self(); mach_msg_type_number_t host_size = sizeof(vm_statistics_data_t) / sizeof(integer_t); vm_size_t page_size; vm_statistics_data_t vm_stat; kern_return_t kern;  kern = host_page_size(host_port, &page_size); if (kern != KERN_SUCCESS) return -1; kern = host_statistics(host_port, HOST_VM_INFO, (host_info_t)&vm_stat, &host_size); if (kern != KERN_SUCCESS) return -1; return vm_stat.purgeable_count * page_size;}

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對武林網的支持。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美成人三级视频网站| 日韩在线精品一区| 中文字幕9999| 久久久久久尹人网香蕉| 成人在线视频网站| 国产一区二区激情| 国产精品第一第二| 欧美孕妇孕交黑巨大网站| 久久久电影免费观看完整版| 亚洲成人网久久久| 2019中文字幕免费视频| 一本大道亚洲视频| 日本老师69xxx| 91欧美精品成人综合在线观看| 亚洲日本成人女熟在线观看| 欧洲日本亚洲国产区| 一区二区三区亚洲| 亚洲a∨日韩av高清在线观看| 亚洲一区av在线播放| 国产成人亚洲综合91| 国产精品吴梦梦| 色综合久久88色综合天天看泰| 日韩av影视综合网| 国产91精品视频在线观看| 成人久久一区二区三区| 91亚洲精华国产精华| 日韩专区中文字幕| 日韩视频一区在线| 黑丝美女久久久| 欧美性猛交xxxx免费看漫画| 欧美乱大交xxxxx另类电影| 在线日韩av观看| 欧美一级在线亚洲天堂| 91亚洲精品一区| 久久亚洲精品网站| 亚洲最大的成人网| 亚洲第一精品电影| 成人看片人aa| 亚洲а∨天堂久久精品喷水| 精品magnet| 欧美—级高清免费播放| 热草久综合在线| 中文字幕av一区| 精品视频在线观看日韩| 中文字幕久热精品在线视频| 色偷偷亚洲男人天堂| 一区二区三区视频免费在线观看| 日本成人激情视频| 亚洲欧美一区二区三区四区| 国产精品视频色| 亚洲欧美999| 最近2019年好看中文字幕视频| 国产精品久久久| 成人www视频在线观看| 丝袜亚洲另类欧美重口| 97在线观看视频| 日韩精品高清在线观看| 日韩精品视频在线观看免费| 亚洲国产成人久久综合| 中文字幕亚洲色图| 亚洲精选一区二区| 热久久美女精品天天吊色| 97国产一区二区精品久久呦| 91在线观看欧美日韩| 欧美成人免费一级人片100| 91国偷自产一区二区三区的观看方式| 久久精品视频中文字幕| 国产一级揄自揄精品视频| 久久国产精品偷| 色琪琪综合男人的天堂aⅴ视频| 91精品国产自产在线老师啪| 欧美激情亚洲综合一区| 欧美日韩美女视频| 亚洲精品xxx| 国产精品老女人精品视频| 亚洲欧美日韩图片| 亚洲午夜久久久影院| 2023亚洲男人天堂| 成人高清视频观看www| 日韩欧美国产激情| 国产精品草莓在线免费观看| 欧美激情一区二区三区久久久| 午夜精品蜜臀一区二区三区免费| 欧美精品激情视频| 亚洲一二三在线| 国产91网红主播在线观看| 8x海外华人永久免费日韩内陆视频| 久久人人看视频| 羞羞色国产精品| 美女久久久久久久久久久| 欧美日韩激情网| 精品国偷自产在线| 国产精品夫妻激情| 国产精品白丝jk喷水视频一区| 亚洲精品日韩av| 久久久国产精品免费| 黑人欧美xxxx| 精品欧美激情精品一区| 中文字幕亚洲综合久久筱田步美| 亚洲欧美日韩一区二区三区在线| 亚洲国产古装精品网站| 国产亚洲成av人片在线观看桃| 欧美激情按摩在线| 97国产一区二区精品久久呦| 精品av在线播放| 成人av在线天堂| 成人黄色在线播放| 久久青草精品视频免费观看| 欧美日韩亚洲网| 国产美女直播视频一区| 91精品国产高清自在线看超| 欧美国产在线视频| 黑人欧美xxxx| 国产精品夫妻激情| 91美女片黄在线观看游戏| 亚洲理论片在线观看| 91亚洲精品在线| 69av在线播放| 精品无码久久久久久国产| 中文字幕亚洲无线码a| 欧美在线免费观看| 国产精品久久久久久亚洲影视| 在线观看欧美www| 欧美日韩不卡合集视频| 91精品在线播放| 国产专区精品视频| 亚洲的天堂在线中文字幕| 国产精品你懂得| 国产精品白嫩初高中害羞小美女| 狠狠综合久久av一区二区小说| 久久中文字幕视频| 久久久女人电视剧免费播放下载| 粉嫩av一区二区三区免费野| 欧美性少妇18aaaa视频| 久久久久久久影院| 国产精品自产拍高潮在线观看| 欧美剧在线观看| 成人免费网站在线观看| 亚洲人成在线免费观看| 综合国产在线观看| 亚洲a一级视频| 欧美午夜视频一区二区| 久久影视三级福利片| 91超碰caoporn97人人| 国色天香2019中文字幕在线观看| 色偷偷偷综合中文字幕;dd| 欧美视频在线视频| 欧美孕妇与黑人孕交| 亚洲成人av片| 久久不射热爱视频精品| 韩国欧美亚洲国产| 97福利一区二区| 欧美电影在线观看完整版| 亚洲视频网站在线观看| 国产精品久久久久久久久久久新郎| 欧美在线精品免播放器视频| 欧美电影在线播放| 亚洲国产欧美在线成人app| 麻豆成人在线看| 91在线免费观看网站| 日韩一级裸体免费视频| 啊v视频在线一区二区三区| 欧美午夜无遮挡| 亚洲风情亚aⅴ在线发布|