Pergunta

Eu queria saber se era possível descobrir o UDID do iPhone do usuário. Alguém pode lançar alguma luz?

Foi útil?

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.enter image description here

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top