• 获取手机 id 与 ip


    //id

    #import <AdSupport/AdSupport.h>

    //ip

    #include <ifaddrs.h>

    #include <arpa/inet.h>

     

    #pragma mark -- 获取用户 id

     

    //通过AdSupport获取UUID(原因AdSupport可以跨应用)

    - (NSString *)appleIFA {

        

        NSString *ifa = nil;

        Class ASIdentifierManagerClass = NSClassFromString(@"ASIdentifierManager");

        if (ASIdentifierManagerClass) { // a dynamic way of checking if AdSupport.framework is available

            SEL sharedManagerSelector = NSSelectorFromString(@"sharedManager");

            id sharedManager = ((id (*)(id, SEL))[ASIdentifierManagerClass methodForSelector:sharedManagerSelector])(ASIdentifierManagerClass, sharedManagerSelector);

            SEL advertisingIdentifierSelector = NSSelectorFromString(@"advertisingIdentifier");

            NSUUID *advertisingIdentifier = ((NSUUID* (*)(id, SEL))[sharedManager methodForSelector:advertisingIdentifierSelector])(sharedManager, advertisingIdentifierSelector);

            ifa = [advertisingIdentifier UUIDString];

        }

        return ifa;

    }

     

     

    //如果不支持AdSupport,那就使用IFV/IDFV (Identifier for Vendor)

     

    - (NSString *)appleIFV {

        if(NSClassFromString(@"UIDevice") && [UIDevice instancesRespondToSelector:@selector(identifierForVendor)]) {

            // only available in iOS >= 6.0

            return [[UIDevice currentDevice].identifierForVendor UUIDString];

        }

        return nil;

    }

     

     

    #pragma mark -- 获取用户ip

    ios获取ip地址

    字数297 阅读287 评论1 

    包含头文件

    #include <ifaddrs.h>

    #include<arpa/inet.h>

    #include<net/if.h>

    #define IOS_CELLULAR    @"pdp_ip0"

    #define IOS_WIFI        @"en0"

    #define IOS_VPN        @"utun0"

    #define IP_ADDR_IPv4    @"ipv4"

    #define IP_ADDR_IPv6    @"ipv6"

    获取ip方式  NSLog(@"-----%@",[self getIPAddress:YES]);

    - (NSString *)getIPAddress:(BOOL)preferIPv4

    {

    NSArray *searchArray = preferIPv4 ?

    @[ IOS_VPN @"/" IP_ADDR_IPv4, IOS_VPN @"/" IP_ADDR_IPv6, IOS_WIFI @"/" IP_ADDR_IPv4, IOS_WIFI @"/" IP_ADDR_IPv6, IOS_CELLULAR @"/" IP_ADDR_IPv4, IOS_CELLULAR @"/" IP_ADDR_IPv6 ] :

    @[ IOS_VPN @"/" IP_ADDR_IPv6, IOS_VPN @"/" IP_ADDR_IPv4, IOS_WIFI @"/" IP_ADDR_IPv6, IOS_WIFI @"/" IP_ADDR_IPv4, IOS_CELLULAR @"/" IP_ADDR_IPv6, IOS_CELLULAR @"/" IP_ADDR_IPv4 ] ;

    NSDictionary *addresses = [self getIPAddresses];

    NSLog(@"addresses: %@", addresses);

    __block NSString *address;

    [searchArray enumerateObjectsUsingBlock:^(NSString *key, NSUInteger idx, BOOL *stop)

    {

    address = addresses[key];

    if(address) *stop = YES;

    } ];

    return address ? address : @"0.0.0.0";

    }

    - (NSDictionary *)getIPAddresses

    {

    NSMutableDictionary *addresses = [NSMutableDictionary dictionaryWithCapacity:8];

    // retrieve the current interfaces - returns 0 on success

    struct ifaddrs *interfaces;

    if(!getifaddrs(&interfaces)) {

    // Loop through linked list of interfaces

    struct ifaddrs *interface;

    for(interface=interfaces; interface; interface=interface->ifa_next) {

    if(!(interface->ifa_flags & IFF_UP) /* || (interface->ifa_flags & IFF_LOOPBACK) */ ) {

    continue; // deeply nested code harder to read

    }

    const struct sockaddr_in *addr = (const struct sockaddr_in*)interface->ifa_addr;

    char addrBuf[ MAX(INET_ADDRSTRLEN, INET6_ADDRSTRLEN) ];

    if(addr && (addr->sin_family==AF_INET || addr->sin_family==AF_INET6)) {

    NSString *name = [NSString stringWithUTF8String:interface->ifa_name];

    NSString *type;

    if(addr->sin_family == AF_INET) {

    if(inet_ntop(AF_INET, &addr->sin_addr, addrBuf, INET_ADDRSTRLEN)) {

    type = IP_ADDR_IPv4;

    }

    } else {

    const struct sockaddr_in6 *addr6 = (const struct sockaddr_in6*)interface->ifa_addr;

    if(inet_ntop(AF_INET6, &addr6->sin6_addr, addrBuf, INET6_ADDRSTRLEN)) {

    type = IP_ADDR_IPv6;

    }

    }

    if(type) {

    NSString *key = [NSString stringWithFormat:@"%@/%@", name, type];

    addresses[key] = [NSString stringWithUTF8String:addrBuf];

    }

    }

    }

    // Free memory

    freeifaddrs(interfaces);

    }

    return [addresses count] ? addresses : nil;

    }

     

     

     

     

    //设备ip地址

    #import <ifaddrs.h>

    #import <arpa/inet.h>

    - (NSString *)deviceIPAdress {

        NSString *address = @"an error occurred when obtaining ip address";

        struct ifaddrs *interfaces = NULL;

        struct ifaddrs *temp_addr = NULL;

        int success = 0;

        

        success = getifaddrs(&interfaces);

        

        if (success == 0) { // 0 表示获取成功

            

            temp_addr = interfaces;

            while (temp_addr != NULL) {

                if( temp_addr->ifa_addr->sa_family == AF_INET) {

                    // Check if interface is en0 which is the wifi connection on the iPhone

                    if ([[NSString stringWithUTF8String:temp_addr->ifa_name] isEqualToString:@"en0"]) {

                        // Get NSString from C String

                        address = [NSString stringWithUTF8String:inet_ntoa(((struct sockaddr_in *)temp_addr->ifa_addr)->sin_addr)];

                    }

                }

                

                temp_addr = temp_addr->ifa_next;

            }

        }

        

        freeifaddrs(interfaces);

        return address;

    }

     

     

     

     

     

     

     

  • 相关阅读:
    MySql插入查询的数据(命名Sql常用)
    odoo前端
    巧用 Odoo act_window 的 flags实现一些个性化的视图控制
    JDK安装
    2018年3月开始新的一年计划
    odoo10 api 装饰器
    odoo10 添加自动执行server action
    odoo中各组件的颜色及用法tree,kanban,many2many_tags,app_ui_enhance
    python virtualenv学习
    odoo10 fields.Selection 根据权限显示不同的selection内容
  • 原文地址:https://www.cnblogs.com/daxueshan/p/6046784.html
Copyright © 2020-2023  润新知