Comment obtenir le code MAC d'un périphérique iOS par programme dans mon application?
Maintenant, les appareils iOS 7 - retournent toujours retournent une adresse MAC de 02: 00: 00: 00: 00: 00.
Donc, mieux utiliser [UIDevice identifierForVendor]
il est donc préférable d'appeler cette méthode pour obtenir une clé unique spécifique à app
La catégorie sera plus appropriée
#import "UIDevice+Identifier.h"
- (NSString *) identifierForVendor1
{
if ([[UIDevice currentDevice] respondsToSelector:@selector(identifierForVendor)]) {
return [[[UIDevice currentDevice] identifierForVendor] UUIDString];
}
return @"";
}
Appelez maintenant la méthode ci-dessus pour obtenir une adresse unique
NSString *like_UDID=[NSString stringWithFormat:@"%@",
[[UIDevice currentDevice] identifierForVendor1]];
NSLog(@"%@",like_UDID);
Vous pouvez obtenir l'adresse MAC à l'aide de la fonction suivante:
+(NSString *)getMacAddress
{
int mgmtInfoBase[6];
char *msgBuffer = NULL;
NSString *errorFlag = NULL;
size_t length;
// 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";
// Get the size of the data available (store in len)
else if (sysctl(mgmtInfoBase, 6, NULL, &length, NULL, 0) < 0)
errorFlag = @"sysctl mgmtInfoBase failure";
// Alloc memory based on above call
else if ((msgBuffer = malloc(length)) == NULL)
errorFlag = @"buffer allocation failure";
// Get system information, store in buffer
else if (sysctl(mgmtInfoBase, 6, msgBuffer, &length, NULL, 0) < 0)
{
free(msgBuffer);
errorFlag = @"sysctl msgBuffer failure";
}
else
{
// Map msgbuffer to interface message structure
struct if_msghdr *interfaceMsgStruct = (struct if_msghdr *) msgBuffer;
// Map to link-level socket structure
struct sockaddr_dl *socketStruct = (struct sockaddr_dl *) (interfaceMsgStruct + 1);
// Copy link layer address data in socket structure to an array
unsigned char macAddress[6];
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(IsDEBUG) NSLog(@"Mac Address: %@", macAddressString);
// Release the buffer memory
free(msgBuffer);
return macAddressString;
}
// Error...
if(IsDEBUG) NSLog(@"Error: %@", errorFlag);
return errorFlag;
}
Mais comme il l'a dit #Randomclik, l'adresse mac n'est pas disponible à partir de iOS 7 et plus.
forme Apple:
Dans iOS 7 et versions ultérieures, si vous demandez l'adresse MAC d'un périphérique iOS, le système renvoie la valeur 02: 00: 00: 00: 00: 00. Si vous devez identifier le périphérique, utilisez plutôt la propriété identifierForVendor de UIDevice. (Les applications qui ont besoin d'un identifiant pour leurs propres objectifs publicitaires doivent utiliser plutôt la propriété advertisingIdentifier de ASIdentifierManager.)
Conversation sur l'adresse MAC:
Comment puis-je obtenir par programme l'adresse MAC d'un iphone
Il semble que dans iOS 7 et versions ultérieures, obtenir une adresse MAC ne fonctionnera pas. Regardez Quoi de neuf sur le document iOS d’Apple. (Section API obsolètes.)
tout le monde est bien avisé d'utiliser la méthode officielle ios 7 et d'utiliser [UIDevice identifierForVendor]
Et pensez aussi à la migration d'anciennes hypothèses.
Vous pouvez l'obtenir en combinant les deux réponses suivantes, je suppose.
Tout d’abord, recherchez l’ip du périphérique en utilisant les éléments suivants:
https://stackoverflow.com/a/30754194/1089206
Deuxièmement, recherchez le MAC de cette adresse en utilisant les éléments suivants:
https://stackoverflow.com/a/31246085/1089206
Je vais l'essayer maintenant et je vous ferai savoir comment ça se passe.