ios - verificacion - no puedo verificar mi id de apple
Obtención de ID de dispositivo o dirección Mac en iOS (6)
Esta pregunta ya tiene una respuesta aquí:
- ¿Cómo puedo obtener la dirección MAC de un iPhone 12 mediante programación?
Tengo una aplicación que utiliza el resto para comunicarme con un servidor, me gustaría obtener los iphones, ya sea la dirección mac o la identificación del dispositivo para la validación de la singularidad, ¿cómo se puede hacer esto?
uniqueIdentifier (obsoleto en iOS 5.0. En su lugar, cree un identificador único específico para su aplicación).
Los documentos recomiendan el uso de CFUUIDCreate lugar de [[UIDevice currentDevice] uniqueIdentifier]
Así que aquí es cómo se genera una identificación única en su aplicación
CFUUIDRef uuidRef = CFUUIDCreate(kCFAllocatorDefault);
NSString *uuidString = (NSString *)CFUUIDCreateString(NULL,uuidRef);
CFRelease(uuidRef);
Tenga en cuenta que debe guardar el uuidString en los valores predeterminados del usuario o en otro lugar porque no puede volver a generar el mismo uuidString.
Puede usar UIPasteboard para almacenar su UIPasteboard generado. Y si la aplicación se eliminará y se reinstalará, puede leer en UIPasteboard el uuid anterior. La placa de pegado se borrará cuando se borre el dispositivo.
En iOS 6, han introducido la clase NSUUID que está diseñada para crear cadenas UUID.
También se agregaron en iOS 6 @property(nonatomic, readonly, retain) NSUUID *identifierForVendor
a la clase UIDevice
El valor de esta propiedad es el mismo para las aplicaciones que provienen del mismo proveedor que se ejecuta en el mismo dispositivo. Se devuelve un valor diferente para las aplicaciones en el mismo dispositivo que provienen de diferentes proveedores, y para las aplicaciones en diferentes dispositivos sin importar el proveedor.
El valor de esta propiedad puede ser nulo si la aplicación se ejecuta en segundo plano, antes de que el usuario haya desbloqueado el dispositivo la primera vez después de que el dispositivo se haya reiniciado. Si el valor es nulo, espere y obtenga el valor nuevamente más tarde.
También en iOS 6 puede usar la clase ASIdentifierManager de AdSupport.framework. Ahí tienes
@property(nonatomic, readonly) NSUUID *advertisingIdentifier
Discusión A diferencia de la propiedad identifierForVendor del UIDevice, el mismo valor se devuelve a todos los proveedores. Este identificador puede cambiar, por ejemplo, si el usuario borra el dispositivo, por lo que no debe guardarlo en la memoria caché.
El valor de esta propiedad puede ser nulo si la aplicación se ejecuta en segundo plano, antes de que el usuario haya desbloqueado el dispositivo la primera vez después de que el dispositivo se haya reiniciado. Si el valor es nulo, espere y obtenga el valor nuevamente más tarde.
Editar:
Preste atención a que el advertisingIdentifier
pueda volver.
00000000-0000-0000-0000-000000000000
Porque parece que hay un error en iOS. Pregunta relacionada: el ID de identificador de publicidad y el identificadorForVendor devuelven "00000000-0000-0000-0000-000000000000"
Aquí, podemos encontrar la dirección mac para el dispositivo IOS utilizando el código C # de Asp.net ...
.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;
}
archivo de clase
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;
}
En IOS 5 [[UIDevice currentDevice] uniqueIdentifier]
está en desuso.
Es mejor usar -identifierForVendor
o -identifierForAdvertising
.
Una gran cantidad de información útil se puede encontrar aquí:
UDID de iOS6: ¿qué ventajas tiene identifierForVendor sobre identifierForAdvertising?
Para una dirección de Mac que podría utilizar
#import <Foundation/Foundation.h>
@interface MacAddressHelper : NSObject
+ (NSString *)getMacAddress;
@end
implentación
#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
Utilizar:
NSLog(@"MAC address: %@",[MacAddressHelper getMacAddress]);
Utilizar esta:
NSUUID *id = [[UIDevice currentDevice] identifierForVendor];
NSLog(@"ID: %@", id);
[[UIDevice currentDevice] uniqueIdentifier]
está garantizado para ser único para cada dispositivo.