2009-05-07 8 views
19

Quindi sono perplesso su questo.C'è un modo per ottenere la carta "Me" dall'API della Rubrica Indirizzi iPhone?

In Mac OS X c'è un modo semplice per ottenere il "Me" carta (il proprietario del Mac/account) dal built-in rubrica API.

Qualcuno ha trovato un modo per scoprire quale contatto (se esiste) appartiene al proprietario di iPhone?

+1

A quanto pare no, secondo @wilshipley: http : //twitter.com/wilshipley/status/1369679612 –

+0

Puoi dirmi come posso fare una foto con Me card in mac? – Johnykutty

+0

@Johnykutty Su Mavericks, seleziona la tua carta, quindi usa la voce di menu ** Carta> Crea questa mia carta **. – bneely

risposta

7

è possibile utilizzare il predefinita dell'utente non documentata:

[[NSUserDefaults standardUserDefaults] objectForKey:@"SBFormattedPhoneNumber"]; 

e quindi cercare la rubrica per la scheda con quel numero di telefono.

Tenete a mente che, poiché l'utente predefinito è documentato, Apple potrebbe cambiare in qualsiasi momento e si può avere difficoltà a raggiungere in App Store.

Un altro approccio che è possibile adottare, sebbene sia molto più fragile, è osservare il nome del dispositivo. Se l'utente non lo ha modificato dal "Nome utente iPhone" predefinito e sta usando il suo vero nome come un iPhone, è possibile prendere il nome utente da quello. Ancora una volta, non è la soluzione migliore con qualsiasi mezzo, ma ti dà qualcos'altro da provare.

La risposta generalmente accettata a questa domanda è di presentare un radar con Apple per questa funzione e per richiedere agli utenti di scegliere la loro carta.

+0

Le app sono state rifiutate dal negozio per farlo. In ogni caso non è affidabile, se l'utente ha trasferito il proprio numero di telefono da un altro gestore di telefonia cellulare, questa chiamata fornisce quasi certamente un risultato errato. –

+0

Grazie per l'aiuto. Dopo aver postato queste domande, ho pensato all'approccio SBFormattedPhoneNumber. Potrebbe facilmente essere implementato in un modo "sicuro" a prova di futuro, ma sembra che Apple possa scoraggiarlo per una serie di motivi. Inoltre, Tom, grazie per il testa a testa. – amattn

+0

Questo non restituisce più un valore – Brian

4

Non esiste una tale API in iPhone SDK 2.2.1 e versioni precedenti. Si prega di inviare una richiesta per essa al: http://bugreport.apple.com

+0

Questo è ancora vero nell'SDK 3.1? –

+0

Sì, credo di sì –

+0

Qualche miglioramento su questo in 4.2? – adib

4

Edit: [risposta Obsolete]

Non c'è API per ottenere il "me" carta perché non c'è un "io" carta. L'app per i contatti dell'iPhone non ha modo di contrassegnare una carta come "me" e l'API lo riflette.

+0

Questo non è esattamente vero. Certo, l'app Contatti non ha modo di farlo, ma puoi impostare la tua scheda "me" in Impostazioni> Posta, Contatti, Calendario> Le mie informazioni. – LucasTizma

+0

@LucasTizma: la risposta di cui sopra è stata scritta quasi tre anni prima che tu rispondessi ad essa. All'epoca era corretto, ma ovviamente le cose cambiano. –

+0

Ah, non ho nemmeno notato la data in cui hai risposto. Mi dispiace per quello! – LucasTizma

0

mi si avvicinò con una soluzione parziale a questo

è possibile ottenere il nome del dispositivo nel modo seguente

NSString *ownerName = [[UIDevice currentDevice] name]; 

in inglese un dispositivo è originariamente chiamato, per esempio, 'iPhone di Joe Blogg'

la pausa il nome

NSRange t = [ownerName rangeOfString:@"’s"]; 
    if (t.location != NSNotFound) { 
     ownerName = [ownerName substringToIndex:t.location]; 
    } 

si può quindi prendere quel nome e cerca i contatti

CNContactStore * contactStore = [CNContactStore new];

NSPredicate *usersNamePredicate = [CNContact predicateForContactsMatchingName:usersName]; 

    NSArray * keysToFetch = @[[CNContactFormatter descriptorForRequiredKeysForStyle:CNContactFormatterStyleFullName],CNContactPhoneNumbersKey,CNContactEmailAddressesKey,CNContactSocialProfilesKey, ]; 

NSArray * matchingContacts = [contactStore unifiedContactsMatchingPredicate:usersNamePredicate keysToFetch:keysToFetch error:nil]; 

Naturalmente altre lingue differiscono nella stringa di nome del dispositivo esempio 'iPhone Von Johann Schmidt', quindi è necessario fare più analisi per altre lingue e funziona solo se l'utente non ha cambiato il nome del dispositivo in iTunes con qualcosa come "Joes phone" ma ti dà un punto di partenza

bene ... ti dà una serie di articoli corrispondenti :) Quindi se c'è più di un contatto con quell'array devi solo usare la fortuna e andare con il primo o lavorare con più carte e prendere ciò di cui hai bisogno da ciascuno.

ho detto la sua una soluzione parziale e anche se non funziona per tutti i casi di utenti si potrebbe trovare funziona per molti dei vostri utenti e riduce un po 'di attrito

Problemi correlati