Como posso recuperar o UDID no iOS?
-
28-09-2019 - |
Pergunta
Eu queria saber se era possível descobrir o UDID do iPhone do usuário. Alguém pode lançar alguma luz?
Solução
Observação: A Apple não aceitará mais aplicativos que acessam o UDID de um dispositivo a partir de 1º de maio de 2013.
Em vez disso, você deve usar os novos métodos identifierForVendor
e advertisingIdentifier
no iOS 6+ para acessar isso. Ver postagem relacionada aqui Para mais detalhes.
Antigo Caminho (depreciado e resultará em rejeição da loja de aplicativos)
NSString *udid = [[UIDevice currentDevice] uniqueIdentifier];
A partir de iOS7, o uniqueIdentifier
A propriedade não está mais disponível.
Veja o UIDevice
referência.
Outras dicas
Como alguns disseram, em iOS5, isso foi preso:
NSString *udid = [[UIDevice currentDevice] uniqueIdentifier];
A Apple agora tem 3 APIs para obter um Uuid(Identificador universalmente exclusivo) do dispositivo:
Alternativa 1 (classe nsuuid):
NSString *udid = [[NSUUID UUID] UUIDString];
Alternativa 2 (classe Uidevice):
NSString *udid = [[[UIDevice currentDevice] identifierForVendor] UUIDString];
Alternativa 3 (ASIDEIDIDERMANAGER, Classe, remende a estrutura do AdSupport):
NSUUID *UUID = [[ASIdentifierManager sharedManager] advertisingIdentifier];
NSString *udid = [UUID UUIDString];
Mas eles são todos alfanuméricos e um identificador exclusivo do dispositivo tipical são apenas dígitos. Então, essas 3 APIs são inúteis, e as antigas [[Uidevice CurrentDevice] UniqueIdentifier] ainda funcionam no iOS6, mas por quanto tempo?
Se o aviso "depreciado" o incomodar, basta adicionar:
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
Espero que ajude!
Em iOS5 e acima, use este para encontrar o UDID
NSString *uuidString = nil;
CFUUIDRef uuid = CFUUIDCreate(NULL);
if (uuid) {
uuidString = (__bridge NSString *)CFUUIDCreateString(NULL, uuid);
CFRelease(uuid);
}
NSLog(@"UDID: [%@]", uuidString);
Pode valer a pena mencionar que o IdentifierForVendor não é exclusivo para um dispositivo, ele pode e acabará mudando.
Apple diz isso sobre IdentifierForVendor:
O valor dessa propriedade é o mesmo para aplicativos que vêm do mesmo fornecedor em execução no mesmo dispositivo. Um valor diferente é retornado para aplicativos no mesmo dispositivo que vem de diferentes fornecedores e para aplicativos em diferentes dispositivos, independentemente do fornecedor.
Se o valor for nulo, espere e obtenha o valor novamente mais tarde. Isso acontece, por exemplo, depois que o dispositivo foi reiniciado, mas antes do usuário desbloquear o dispositivo.
O valor nesta propriedade permanece o mesmo enquanto o aplicativo (ou outro aplicativo do mesmo fornecedor) é instalado no dispositivo iOS. O valor muda quando o usuário exclui todos os aplicativos desse fornecedor do dispositivo e posteriormente reinstala um ou mais deles. O valor também pode alterar ao instalar as compilações de teste usando o Xcode ou ao instalar um aplicativo em um dispositivo usando a distribuição ad-hoc. Portanto, se o seu aplicativo armazenar o valor dessa propriedade em qualquer lugar, você deve lidar com situações graciosamente em que o identificador muda.
Mas o que é ainda pior é que parece que a Apple também está removendo o último recurso de usar o endereço MAC como um identificador exclusivo, de acordo com Este blog AVG.
Então, o que fazer agora, se queremos identificar exclusivamente dispositivos - por exemplo. Para licenciamento, configurações ou outros propósitos?
Em iOS5 e acima, use este para encontrar o UDID
NsString *uuidString = nil;
Cfuuidref uuid = cfuuidCreate (nulo); ...
Eu acho que você está mostrando como gerar um número de identificação exclusivo, para não obter o ID exclusivo de um dispositivo.
Não posso comentar, mas gostaria de avisar os outros. Em resposta a Dzenbot, todos os métodos não estão dando os mesmos resultados:
Alternativa 1 (Classe NSUUID):
NSString *udid = [[NSUUID UUID] UUIDString];
Alternativa 2 (Uidevice Class) (disponível no iOS 6.0 e posterior):
NSString *udid = [[[UIDevice currentDevice] identifierForVendor] UUIDString];
Alternativa 1 gerar a Uuid aleatório enquanto Alternativa 2 dar uma corrigido uid o que não vai mudar.
A melhor maneira é fazer assim
NSString *udid = [[[UIDevice currentDevice]identifierForVendor]UUIDString];
Que tal usar [openudid] lib https://github.com/ylechelle/openudid
É muito simples. Vá para a janela Xcode e selecione dispositivos ou você pode encontrá -lo no organizador.
http://www.raywenderlich.com/2915/ios-code-signing-under-the-hood/organizerudid
Lembre -se de que a UDID está preterida no iOS 5. No iOS 7, a Apple agora sempre retorna um valor fixo ao consultar o Mac para frustrar especificamente o Mac como base para um id esquema. Então você agora realmente deveria usar -[Uidevice IdentifierForVendor ou crie um Uuid por Instalação. Espero que ajude para alguém.