简体   繁体   English

查找移动设备标识符(UDID或Android ID)

[英]Find mobile device identifier (UDID or Android id)

I want to find out the list of mobile devices which are all click my ad. 我想找出所有点击我的广告的移动设备列表。 Based on the details I want to re-target them 根据详细信息,我想重新定位它们

So I need to capture their identifier(UDID in ios and Android id in android phone) in order to identify them. 所以我需要捕获它们的标识符(ios中的UDID和android手机中的Android id)以便识别它们。

Can anyone suggest me good method or prefer any better way to achieve the above. 任何人都可以建议我一个好的方法,或者更喜欢更好的方法来实现上述目标。

For Android, you should check this thread : 对于Android,您应检查以下线程:

Will TelephonyManger.getDeviceId() return device id for Tablets like Galaxy Tab...? TelephonyManger.getDeviceId()是否会返回Galaxy Tab等平板电脑的设备ID?

Jorgesys' answer seems clean. Jorgesys的回答似乎很干净。

ANDROID: I am using this and seems to be working fine. ANDROID:我正在使用它,似乎工作正常。

public static String getDeviceAndroidID(Context context)
{
    String android_id = Secure.getString(context.getContentResolver(), Secure.ANDROID_ID);
    if(android_id != null)
        return android_id;
    else
        return "";
}

iOS: For iOS version less than 7 I am using MAC address of the device. iOS:对于小于7的iOS版本,我正在使用设备的MAC地址。 From iOS version 7 apple is providing a unique ID for this purpose. 从iOS版本7开始,苹果为此提供了唯一的ID。

(NSString *)getMacAddress
{
if(SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0"))
{
    NSString *strUID = nil;
    if(strUID == nil) strUID = [[[UIDevice currentDevice] identifierForVendor] UUIDString];
    return strUID;
}


int                 mgmtInfoBase[6];
char                *msgBuffer = NULL;
size_t              length;
unsigned char       macAddress[6];
struct if_msghdr    *interfaceMsgStruct;
struct sockaddr_dl  *socketStruct;
NSString            *errorFlag = nil;


// Setup the management Information Base (mib)
mgmtInfoBase[0] = CTL_NET;        // Request network subsystem
mgmtInfoBase[1] = AF_ROUTE;       // Routing table info
mgmtInfoBase[2] = 0;
mgmtInfoBase[3] = AF_LINK;        // Request link layer information
mgmtInfoBase[4] = NET_RT_IFLIST;  // Request all configured interfaces


// With all configured interfaces requested, get handle index
if ((mgmtInfoBase[5] = if_nametoindex("en0")) == 0)
    errorFlag = @"if_nametoindex failure";
else
{
    // Get the size of the data available (store in len)
    if (sysctl(mgmtInfoBase, 6, NULL, &length, NULL, 0) < 0)
        errorFlag = @"sysctl mgmtInfoBase failure";
    else
    {
        // Alloc memory based on above call
        if ((msgBuffer = malloc(length)) == NULL)
            errorFlag = @"buffer allocation failure";
        else
        {
            // Get system information, store in buffer
            if (sysctl(mgmtInfoBase, 6, msgBuffer, &length, NULL, 0) < 0)
                errorFlag = @"sysctl msgBuffer failure";
        }
    }
}
// Befor going any further...
if (errorFlag != nil)
{
    free(msgBuffer);
    if(ENABLE_LOG) DLog(@"Error: %@", errorFlag);
    return errorFlag;
}
// Map msgbuffer to interface message structure
interfaceMsgStruct = (struct if_msghdr *) msgBuffer;
// Map to link-level socket structure
socketStruct = (struct sockaddr_dl *) (interfaceMsgStruct + 1);
// Copy link layer address data in socket structure to an array
memcpy(&macAddress, socketStruct->sdl_data + socketStruct->sdl_nlen, 6);
// Read from char array into a string object, into traditional Mac address format
NSString *macAddressString = [NSString stringWithFormat:@"%02X:%02X:%02X:%02X:%02X:%02X",
                              macAddress[0], macAddress[1], macAddress[2],
                              macAddress[3], macAddress[4], macAddress[5]];
//if(ENABLE_LOG) DLog(@"Mac Address: %@", macAddressString);  
// Release the buffer memory
free(msgBuffer);
return macAddressString;
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM