2015-06-09 17 views
7

iOS9 deprecate le caratteristiche delle informazioni utente for CloudKit e ABPerson.Trova nome utente o nome/cognome in iOS9 CloudKit/ABPerson (ABAddressBook)

ad es. nelle proprietà di CKDiscoveredUserInfo

firstName "deprecato in iOS 9.0

lastName" deprecati in iOS 9,0

voglio il cognome e nome come precedentemente fornito in iOS 8 CloudKit.

Come recuperare le informazioni simili in iOS9 CloudKit, ABPerson o qualcos'altro?

Short of grace method is this

[[UIDevice currentDevice] name]; 

NSArray *nameArray = [[NSHost currentHost] names]; 
NSString *user = [nameArray objectAtIndex:0]; 

Entrambi stampa per esempio John'iPhone.

+0

Buona domanda. Suggerisco di aspettare la sessione su CloudKit questa settimana nel WWDC per ascoltare le modifiche e il loro significato. – harryhorn

risposta

3

Nel documentation for CKDiscoverAllContactsOperation si può vedere questo:

La ricerca della rubrica dell'utente non restituisce alcun dato personale sui contatti degli utenti. La ricerca restituisce solo gli ID dei record utente corrispondenti , che contengono solo i dati che l'app mette lì. CloudKit utilizza le informazioni della rubrica per identificare gli utenti di l'app che l'utente corrente conosce. Poiché il sistema accede alla rubrica anziché all'app, il sistema non visualizza un prompt all'utente quando si verifica tale accesso.

Quando si guarda nel dashboard di CloudKit, è possibile vedere che non c'è alcun nome nella tabella Utente. Quindi non puoi nemmeno recuperarlo.

Suppongo che Apple stia rendendo il servizio anonimo. Devi implementare qualcosa tu stesso per allegare un nome a un id. Come hai descritto puoi usare il nome del dispositivo o lasciare che l'utente stesso inserisca il suo nome.

La mia prima idea è stata quella di implementare questo primo interrogando tutti i contatti usando ABAddressBookCopyArrayOfAllPeople e poi cercando tutte le e-mail usando CKDiscoverUserInfosOperation per ogni e-mail. ma a quanto pare quello è stato anche interrotto in iOS 9.

Sembra che Apple stia bloccando l'accesso a tutti i dati personali. quando vai al prerelease library e filtri per l'indirizzo vedrai ancora molti riferimenti. Ma non appena vai su una pagina di dettaglio, vedrai solo che tutto è deprecato.

+0

Grazie. Ispira la mia risposta. Adoro il tuo lavoro con EV CloudKit in Github e la conversazione con te lì. – Kevin

4

Per iOS9, ottenendo utente informazioni personali tramite Contact Framework

L'Contatti quadro fornisce un Objective-C e API Swift per accedere informazioni di contatto dell'utente.

Sostituzione ABAdressBook

Questo quadro è disponibile su tutte le piattaforme Apple e sostituisce il Indirizzo quadro del Libro di iOS e OS X.

In particolare, CNContact

Il CNContact è una classe thread-safe che rappresenta unimmutabile Oggetto valoreper le proprietà del contatto, ad esempio il nome e il numero di telefono di un contatto.

Recuperare Contatti

È possibile recuperare i contatti utilizzando il negozio di contatto (CNContactStore), che rappresenta contatti dell'utente banca dati

Ricerca di contatti di utente del database (Nuove in iOS 9.0)

eggiven nome, cognome, compleanno, numero di telefono e mo ri.

let store = CNContactStore() 
let contacts = try store.unifiedContactsMatchingPredicate(CNContact.predicateForContactsMatchingName("Appleseed"), keysToFetch:[CNContactGivenNameKey, CNContactFamilyNameKey]) 

let contact = contacts!.first //assuming contain at least one contact 

// Checking if phone number is available for the given contact. 
if (contact.isKeyAvailable(CNContactPhoneNumbersKey)) { 
    print("\(contact.givenName) \(contact.familyName)") 
} else { 
    //Refetch the keys 
    let keysToFetch = [CNContactGivenNameKey, CNContactFamilyNameKey] 
    let refetchedContact = try store.unifiedContactWithIdentifier(contact.identifier, keysToFetch: keysToFetch) 
    print("\(refetchedContact.givenName) \(refetchedContact.familyName)") 
} 

Ricerca di Current User Info

if let personInfo:CNContact = CKDiscoveredUserInfo.displayContact{ 

println("first name: \(personInfo.givenName) last name: \(personInfo.familyName) ") }