Frage

    

Diese Frage bereits eine Antwort hier:

         

ich eine Anwendung, die Ruhe zu einem Server kommuniziert, würde Ich mag die iphones entweder MAC-Adresse oder Geräte-ID für Einzigartigkeit Validierung erhalten, wie kann dies geschehen?

War es hilfreich?

Lösung

[[UIDevice currentDevice] uniqueIdentifier] ist garantiert für jedes Gerät eindeutig sein.

Andere Tipps

  

uniqueidentifier (Veraltet in iOS 5.0. Verwenden Sie stattdessen eine eindeutige Kennung spezifisch für Ihre Anwendung erstellen.)

Die docs Verwendung von CFUUIDCreate statt [[UIDevice currentDevice] uniqueIdentifier]

Hier ist also, wie Sie eine eindeutige ID in Ihrer App generieren

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

CFRelease(uuidRef);

Beachten Sie, dass Sie das uuidString in Benutzereinstellungen oder an anderer Stelle zu sparen, weil Sie nicht das gleiche uuidString wieder erzeugen können.

Sie können mit UIPasteboard Ihre generierten uUID zu speichern. Und wenn die App gelöscht werden und neu installieren Sie können die alte UUID aus UIPasteboard lesen. Die Paste Board wird abgewischt werden, wenn das Gerät gelöscht werden.

In iOS 6 sie haben die NSUUID Klasse , dass ist so konzipiert, UUID-Strings

erstellen

Auch hat sie in iOS 6 @property(nonatomic, readonly, retain) NSUUID *identifierForVendor auf die UIDevice Klasse

  

Der Wert dieser Eigenschaft ist für Anwendungen, die von dem kommen   selber Anbieter auf demselben Gerät ausgeführt wird. Ein anderer Wert zurückgegeben   für Anwendungen auf dem gleichen Gerät, die kommen von verschiedenen Herstellern, und für   Anwendungen auf verschiedenen Geräten unabhängig vom Hersteller.

     

Der Wert dieser Eigenschaft kann null sein, wenn der App in der ausgeführt werden   Hintergrund, zuvor hat der Benutzer das Gerät das erste Mal entsperrt   nachdem das Gerät neu gestartet wurde. Wenn der Wert gleich Null ist, warten und erhalten   der Wert es später erneut.

Auch in iOS 6 können Sie mit ASIdentifierManager Klasse von AdSupport.framework. Dort haben Sie

@property(nonatomic, readonly) NSUUID *advertisingIdentifier
  

Diskussion Im Gegensatz zu der identifierForVendor Eigenschaft des UIDevice,   der gleiche Wert wird auf alle Anbieter zurückgegeben. Diese Kennung kann   ändern, zum Beispiel, wenn der Benutzer die löscht geräte so sollte man nicht   zwischenzuspeichern.

     

Der Wert dieser Eigenschaft kann null sein, wenn der App in der ausgeführt werden   Hintergrund, zuvor hat der Benutzer das Gerät das erste Mal entsperrt   nachdem das Gerät neu gestartet wurde. Wenn der Wert gleich Null ist, warten und erhalten   der Wert es später erneut.

Edit:

Achten Sie darauf, dass der advertisingIdentifier zurückkehrt

  

00000000-0000-0000-0000-000000000000

, weil es scheint ein Bug in iOS zu sein. Verwandte Frage: Die advertisingIdentifier und identifierForVendor return „00000000-0000-0000 -0000-000000000000"

Für eine Mac-Adresse können Sie verwenden

#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

Verwendung:

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

verwenden:

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

In IOS 5 [[UIDevice currentDevice] uniqueIdentifier] ist veraltet.

Es ist besser -identifierForVendor oder -identifierForAdvertising zu verwenden.

Viele nützliche Informationen finden Sie hier:

iOS6 UDID - Welche Vorteile hat identifierForVendor haben über identifierForAdvertising?

Hier können wir MAC-Adresse für IOS-Gerät mit Asp.net C # -Code finden ...

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;
        }

.class Datei

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;

    }
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top