Question

    

Cette question a déjà une réponse ici:

         

J'ai une application qui utilise le repos pour communiquer avec un serveur, je voudrais obtenir les iphones soit l'adresse MAC ou ID dispositif de validation unique, comment cela peut-il être fait?

Était-ce utile?

La solution

[[UIDevice currentDevice] uniqueIdentifier] est garanti d'être unique à chaque appareil.

Autres conseils

  

uniqueIdentifier (dépréciés dans iOS 5.0. Au lieu de cela, créer un identifiant unique spécifique à votre application.)

Les documents recommandent l'utilisation de CFUUIDCreate au lieu de [[UIDevice currentDevice] uniqueIdentifier]

Voici donc comment vous générez un identifiant unique dans votre application

CFUUIDRef uuidRef = CFUUIDCreate(kCFAllocatorDefault);
NSString *uuidString = (NSString *)CFUUIDCreateString(NULL,uuidRef);

CFRelease(uuidRef);

Notez que vous devez enregistrer le uuidString en défaut de l'utilisateur ou dans un autre endroit parce que vous ne pouvez pas générer de nouveau le même uuidString.

Vous pouvez utiliser UIPasteboard pour stocker votre UUID généré. Et si l'application vous sera supprimée et réinstallée pouvez lire UIPasteboard l'ancien UUID. Le conseil de pâte sera effacé lorsque l'appareil sera effacé.

Dans iOS 6, ils ont introduit le classe NSUUID qui est conçu pour créer des chaînes UUID

En outre, ils ajouté dans iOS 6 @property(nonatomic, readonly, retain) NSUUID *identifierForVendor à UIDevice classe

  

La valeur de cette propriété est la même pour les applications qui viennent de la   même fournisseur fonctionnant sur le même dispositif. Une autre valeur est renvoyée   pour les applications sur le même appareil qui proviennent de différents fournisseurs, et   des applications sur différents périphériques indépendamment du fournisseur.

     

La valeur de cette propriété peut être nul si l'application est en cours d'exécution dans le   fond, avant que l'utilisateur a ouvert la première fois le dispositif   après que le dispositif a été redémarré. Si la valeur est nulle, attendez et obtenir   la valeur plus tard.

De plus en 6 iOS, vous pouvez utiliser ASIdentifierManager classe de AdSupport.framework. Il vous

@property(nonatomic, readonly) NSUUID *advertisingIdentifier
  

Discussion Contrairement à la propriété identifierForVendor du UIDevice,   la même valeur est retournée à tous les fournisseurs. Cet identifiant peut   changer, par exemple, si l'utilisateur efface le périphérique de sorte que vous ne devriez pas   en cache.

     

La valeur de cette propriété peut être nul si l'application est en cours d'exécution dans le   fond, avant que l'utilisateur a ouvert la première fois le dispositif   après que le dispositif a été redémarré. Si la valeur est nulle, attendez et obtenir   la valeur plus tard.

Edit:

Faites attention que le advertisingIdentifier peut retourner

  

00000000-0000-0000-0000-000000000000

parce qu'il semble y avoir un bug dans iOS. question connexe: Le retour advertisingIdentifier et identifierForVendor « 00000000-0000-0000 -0000" -000000000000

Pour une adresse Mac, vous pouvez utiliser

#import <Foundation/Foundation.h>

@interface MacAddressHelper : NSObject

+ (NSString *)getMacAddress;

@end

implentation

#import "MacAddressHelper.h"
#import <sys/socket.h>
#import <sys/sysctl.h>
#import <net/if.h>
#import <net/if_dl.h>

@implementation MacAddressHelper

+ (NSString *)getMacAddress
{
  int                 mgmtInfoBase[6];
  char                *msgBuffer = NULL;
  size_t              length;
  unsigned char       macAddress[6];
  struct if_msghdr    *interfaceMsgStruct;
  struct sockaddr_dl  *socketStruct;
  NSString            *errorFlag = NULL;

  // 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 != NULL)
  {
    NSLog(@"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]];
  //NSLog(@"Mac Address: %@", macAddressString);  
  // Release the buffer memory
  free(msgBuffer);
  return macAddressString;
}

@end

Utilisation:

NSLog(@"MAC address: %@",[MacAddressHelper getMacAddress]);

Utilisez ceci:

NSUUID *id = [[UIDevice currentDevice] identifierForVendor];
NSLog(@"ID: %@", id);

Dans IOS 5 [[UIDevice currentDevice] uniqueIdentifier] est dépréciée.

Il est préférable d'utiliser -identifierForVendor ou -identifierForAdvertising.

Un grand nombre d'informations utiles sont disponibles ici:

iOS6 UDID - Quels sont les avantages identifierForVendor ont plus identifierForAdvertising?

Ici, nous pouvons trouver l'adresse MAC pour le périphérique IOS utilisant Asp.net C # Code ...

.aspx.cs

-
 var UserDeviceInfo = HttpContext.Current.Request.UserAgent.ToLower(); // User's Iphone/Ipad Info.

var UserMacAdd = HttpContext.Current.Request.UserHostAddress;         // User's Iphone/Ipad Mac Address



  GetMacAddressfromIP macadd = new GetMacAddressfromIP();
        if (UserDeviceInfo.Contains("iphone;"))
        {
            // iPhone                
            Label1.Text = UserDeviceInfo;
            Label2.Text = UserMacAdd;
            string Getmac = macadd.GetMacAddress(UserMacAdd);
            Label3.Text = Getmac;
        }
        else if (UserDeviceInfo.Contains("ipad;"))
        {
            // iPad
            Label1.Text = UserDeviceInfo;
            Label2.Text = UserMacAdd;
            string Getmac = macadd.GetMacAddress(UserMacAdd);
            Label3.Text = Getmac;
        }
        else
        {
            Label1.Text = UserDeviceInfo;
            Label2.Text = UserMacAdd;
            string Getmac = macadd.GetMacAddress(UserMacAdd);
            Label3.Text = Getmac;
        }

Fichier .class

public string GetMacAddress(string ipAddress)
    {
        string macAddress = string.Empty;
        if (!IsHostAccessible(ipAddress)) return null;

        try
        {
            ProcessStartInfo processStartInfo = new ProcessStartInfo();

            Process process = new Process();

            processStartInfo.FileName = "arp";

            processStartInfo.RedirectStandardInput = false;

            processStartInfo.RedirectStandardOutput = true;

            processStartInfo.Arguments = "-a " + ipAddress;

            processStartInfo.UseShellExecute = false;

            process = Process.Start(processStartInfo);

            int Counter = -1;

            while (Counter <= -1)
            {                  
                    Counter = macAddress.Trim().ToLower().IndexOf("mac address", 0);
                    if (Counter > -1)
                    {
                        break;
                    }

                    macAddress = process.StandardOutput.ReadLine();
                    if (macAddress != "")
                    {
                        string[] mac = macAddress.Split(' ');
                        if (Array.IndexOf(mac, ipAddress) > -1)                                
                        {
                            if (mac[11] != "")
                            {
                                macAddress = mac[11].ToString();
                                break;
                            }
                        }
                    }
            }
            process.WaitForExit();
            macAddress = macAddress.Trim();
        }

        catch (Exception e)
        {

            Console.WriteLine("Failed because:" + e.ToString());

        }
        return macAddress;

    }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top