2013-04-13 20 views
10

Chcę utworzyć UDID dla urządzenia iPhone/iPad, które pozostanie niezmienione, więc proszę powiedz mi, czy ktoś ma na to pomysł?Alternatywny sposób tworzenia niepowtarzalnego identyfikatora jednorazowego użytku

Mam wyszukiwanie wokół Google i przepełnienie stosu, ale nie ma rozwiązania.

Również niektóre sugerują użycie OpenUDID i CFUUID, ale CFUUID będzie inne, gdy użytkownicy usuwają i ponownie instalują twoją aplikację. Ale chcę użyć tego samego identyfikatora UDID dla każdej aplikacji, która wygeneruje się po raz pierwszy i powinna pozostać niezmieniona przez cały okres użytkowania urządzenia dla każdej aplikacji.

+0

Pomyśl można dodać identyfikator aplikacji do ID urządzenia i podjąć hash -Kod tego. Nie wiem, jak uzyskać stały identyfikator urządzenia w systemie iThings. –

Odpowiedz

8

EDIT 2

powodu aktualizacji iOS, jak i na nowej dokumentacji identifierForVendor nie zachowuje wartości w App ponownych instalacji. Widziałem odpowiedź na this link. Może to pomóc w taki czy inny sposób. Wystarczy zauważyć, że tylko UDID zachowa się nawet po zresetowaniu systemu, więc prawdopodobnie ta odpowiedź może stać się ograniczeniem dla programistów poszukujących dożywotniego UDID nawet po zresetowaniu systemu. Poza tym wspomniana odpowiedź wydaje się przydatna.

Zobacz także summary here.


identifierForVendor jest dostępny od UIDevice Class Reference.

Wartość tej właściwości jest taka sama dla aplikacji, które pochodzą z samego dostawcy działającego na tym samym urządzeniu.

[[UIDevice currentDevice] identifierForVendor].UUIDString 

Uwaga:Dostępne w iOS 6.0 i nowszych.

Edycja 1 Zgodnie z nowym wydaniem UIDevice Class Reference

wartość w tym właściwości pozostaje niezmieniona podczas aplikacji (lub innego aplikacja od tego samego dostawcy) jest zainstalowany w urządzeniu iOS. Wartość zmienia się, gdy użytkownik usuwa wszystkie aplikacje tego dostawcy z urządzenia , a następnie ponownie instaluje jedną lub więcej z nich. Dlatego też, jeśli Twoja aplikacja przechowuje wartość tej właściwości w dowolnym miejscu, jeśli chcesz, aplikacja z wdziękiem obsługuje sytuacje, w których zmienia się identyfikator.


EDIT

Chciałbym, aby zobaczyć na this popular link

1) MD5 MAC + CFBundleIdentifier

[[UIDevice currentDevice] uniqueDeviceIdentifier] 

To pozostanie sam na aplikacji ale różne dla każdego aplikacja. Jeśli usuniesz i ponownie zainstalujesz aplikację, będzie ona taka sama dla każdej aplikacji.

2) MD5 MAC

[[UIDevice currentDevice] uniqueGlobalDeviceIdentifier] 

ta pozostanie taki sam dla wszystkich aplikacji z tego samego urządzenia. Jeśli usuniesz i zainstalujesz ponownie aplikację, będzie ona taka sama dla każdego urządzenia.

Edycja 3

Uwaga: Roztwór w iOS 7 nie jest przydatny jako uniqueidentifier nie jest już dostępny z iOS7.

+0

: - Wartość identyfikatoraForVendor nie zmieni się dla tej aplikacji dla tego urządzenia, prawda? –

+1

Wartość identyfikatoraForVendor nigdy się nie zmieni dla tego pertikularnego programu Vender + App +. –

+0

Słowa dokumentu Apple: "Wartość tej właściwości jest taka sama dla aplikacji pochodzących od tego samego dostawcy działającego na tym samym urządzeniu. Inna wartość jest zwracana dla aplikacji na tym samym urządzeniu, które pochodzą od różnych dostawców, a także dla aplikacji na różne urządzenia niezależnie od dostawcy. " –

0

Po raz pierwszy wygeneruj identyfikator UUID (używając prawdopodobnie interfejsu API CFUUIDRef) i zapisz go w pęku kluczy.

+0

Jeśli użytkownik zaktualizuje ios lub zainstaluje nowy ios, to dane pęku kluczy zostaną usunięte, czy nie? –

+0

Chcę przechowywać stworzony unikatowy identyfikator na całe życie, czy to możliwe? –

+0

@sunilz Wiem, czytam twoje pytanie. Moja odpowiedź jest tutaj. Nie wiem, jaki masz problem. –

2

Ważne jest, aby zauważyć różnicę między identyfikatorem UDID a identyfikatorem UUID.

"Unikalny identyfikator urządzenia" UDID jest specyficzny dla sprzętu. To nigdy się nie zmienia dla konkretnego urządzenia. Z tego powodu stał się on problemem dotyczącym prywatności, a Apple blokuje aplikacje, które próbują z niego korzystać. W rezultacie firma Apple wygenerowała skrót "identyfikator urządzenia", w szczególności w przypadku użycia reklamy. Ten nowy identyfikator jest nazywany IFA i jest dostępny w iOS 6.0 lub nowszym.

UUID "uniwersalny unikalny identyfikator" nie jest specyficzny dla sprzętu. Jest to skrót używany do identyfikacji urządzenia; ale nie jest to wartość absolutna. Na przykład PhoneGap generuje identyfikator UUID na podstawie właściwości urządzenia; to właśnie otrzymujesz, gdy robisz device.uuid. Jeśli usuniesz aplikację i zainstalujesz ją ponownie, otrzymasz nowy identyfikator hash. UUID nie jest blokowany przez Apple.

Myślę, że najlepszym rozwiązaniem jest użycie IFA, z OpenUDID jako kopią zapasową dla iOS < 6.0.

Oto kod, którego używamy. Jeśli IFA nie jest dostępny, pobierz OpenUDID. [[Musisz zainstalować OpenUDID, przeczytaj więcej na ten temat tutaj, https://github.com/ylechelle/OpenUDID.]]

NSString* uuid = nil; 
if ([[UIDevice currentDevice] respondsToSelector:@selector(identifierForVendor)]) { 
    // IOS 6 new Unique Identifier implementation, IFA 
    uuid = [[[UIDevice currentDevice] identifierForVendor] UUIDString]; 
} else { 
    // Before iOS6 (or if IFA disabled) you shoud use a custom implementation for uuid 
    // Here I use OpenUDID (you have to import it into your project) 
    // https://github.com/ylechelle/OpenUDID 
    NSString* openUDID = [OpenUDID value]; 
    uuid = [OpenUDID value]; 
} 
+0

Dziękuję za odpowiedź. Ale mam pytanie: Jeśli usuniesz aplikację i zainstalujesz ponownie, wyłączysz urządzenie, zaktualizujesz lub zainstalujesz nowe iOS, to OpenUDID pozostanie taki sam jak poprzedni? –

+0

Możesz przeczytać więcej o OpenUDID na stronie projektu. Jest to jednak uniwersalnie unikalny ciąg wspólny dla wielu aplikacji na urządzeniu. Na przykład Gmail, Chrome i Dropbox używają OpenUDID (nie mam pojęcia, ale po prostu używam nazw dla aplikacji). Pierwsza pobierana aplikacja mówi, że Gmail ustawi OpenUDID jako silny. Druga i trzecia aplikacja odczyta ten sam ciąg OpenUDID. Powiedzmy jednak, że usuniesz Gmaila - zamiast utraty ciągu OpenUDID będzie on obsługiwany przez inne aplikacje, które go używają. (Aby się go pozbyć, wszystkie aplikacje musiały zostać usunięte). – Federico