2015-06-09 11 views
7

iOS9 lehnt Benutzerinfo-Funktionen for CloudKit und ABPerson ab.Suchen nach Benutzername oder Vor-/Nachname in iOS9 CloudKit/ABPerson (ABAddressBook)

z.B. in den Eigenschaften von CKDiscoveredUserInfo

Vornamen "Veraltet in iOS 9.0

Nachnamen" Veralteten in iOS 9,0

Ich mag Nachnamen und Vornamen wie zuvor in iOS8 Wolkenjungen zur Verfügung gestellt.

Wie die ähnlichen Informationen in iOS9 CloudKit, ABPerson oder etwas anderes abrufen?

Short of grace method is this

[[UIDevice currentDevice] name]; 

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

beide Druck z.B. John'iPhone.

+0

Gute Frage. Ich schlage vor, diese Woche auf der WWDC auf die Sitzung zu CloudKit zu warten, um etwas über die Änderungen und ihre Bedeutung zu erfahren. – harryhorn

Antwort

3

Im documentation for CKDiscoverAllContactsOperation Sie können das sehen:

Die Suche nach dem Adressbuch des Benutzers hat keine persönlichen Daten nicht zurück über die Kontakte des Benutzers. Die Suche gibt nur die IDs der entsprechenden Benutzerdatensätze zurück, die nur Daten enthalten, die Ihre App dort platziert. CloudKit verwendet die Adressbuchinformationen, um Benutzer der App zu identifizieren, die der aktuelle Benutzer kennt. Da das System anstelle Ihrer App auf das Adressbuch zugreift, zeigt das System dem Benutzer keine Eingabeaufforderung an, wenn dieser Zugriff erfolgt.

Wenn Sie im CloudKit-Dashboard nachsehen, können Sie sehen, dass in der User-Tabelle auch kein Name vorhanden ist. Sie können es also auch nicht holen.

Ich nehme an, Apple macht den Dienst anonym. Sie müssen etwas selbst implementieren, um einen Namen an eine ID anzuhängen. Wie Sie beschrieben haben, können Sie den Gerätenamen verwenden oder Sie können den Benutzer selbst seinen Namen eingeben lassen.

Meine erste Idee war dies zu implementieren, indem zuerst alle Kontakte mit ABAddressBookCopyArrayOfAllPeople abgefragt wurden und dann alle E-Mails mit CKDiscoverUserInfosOperation für jede E-Mail nachgeschlagen wurden. aber anscheinend wurde das auch in iOS 9 eingestellt.

Es sieht aus wie Apple den Zugriff auf alle persönlichen Daten stoppt. Wenn Sie zum prerelease library gehen und nach Adresse filtern, sehen Sie noch viele Referenzen. Aber sobald Sie auf eine Detailseite gehen, sehen Sie nur, dass alles veraltet ist.

+0

Danke. Es inspiriert meine Antwort. Liebe deine Arbeit mit EV CloudKit in Github und das Gespräch mit dir dort. – Kevin

4

Für iOS9, Benutzer persönliche Kontaktinformationen über Contact Framework

Die Kontakte Rahmen zu erhalten bietet eine Objective-C und Swift API des Benutzers Kontaktinformationen zuzugreifen.

ABAdressBook Ersetzen

Dieser Rahmen auf allen Apple-Plattformen verfügbar und ersetzt die Adressbuch Rahmen in iOS und OS X.

Insbesondere CNContact

Der CNContact ist eine Thread-sichere Klasse, die einen unveränderlichendarstelltWertobjekt für Kontakteigenschaften, wie der Vorname und Telefon Nummern eines Kontakts.

Fetching Kontakte

Sie Kontakte holen können den Kontakt Shop (CNContactStore) mit, die der Datenbank der Kontakte Benutzer darstellt

für Kontakte Datenbank (neu in iOS Benutzerhandbuch Suche 9.0)

Name, Familienname, Geburtstag, Telefonnummer und mo Re.

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)") 
} 

für Current User Info Suche

if let personInfo:CNContact = CKDiscoveredUserInfo.displayContact{ 

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