7

iOS9では、CloudKitおよびABPersonのユーザー情報機能が非推奨になりました。

たとえば、CKDiscoveredUserInfo のプロパティで

firstName" iOS 9.0 で非推奨

lastName" iOS 9.0 で非推奨

以前に iOS8 CloudKit で提供されていた姓と名が必要です。

iOS9 CloudKit、ABPerson などで同様の情報を取得するにはどうすればよいですか?

ショートオブグレース方法はこちら

[[UIDevice currentDevice] name]; 

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

どちらも John'iPhone などを印刷します。

4

2 に答える 2

4

iOS9 の場合、Contact Frameworkを介してユーザーの個人連絡先情報を取得する

Contacts フレームワークは、ユーザーの連絡先情報にアクセスするための Objective-C および Swift API を提供します。

ABAdressBook の置き換え

このフレームワークは、すべての Apple プラットフォームで利用でき、iOS および OS X の Address Book フレームワークを置き換えます。

具体的には、CNContact

CNContact は、連絡先の名前や電話番号など、連絡先プロパティの不変値オブジェクトを表すスレッド セーフなクラスです。

連絡先の取得

ユーザーの連絡先データベースを表す連絡先ストア (CNContactStore) を使用して、連絡先を取得できます。

ユーザーの連絡先データベースの検索 (iOS 9.0 の新機能)

卵子の名前、姓、誕生日、電話番号など。

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

現在のユーザー情報の検索

if let personInfo:CNContact = CKDiscoveredUserInfo.displayContact{

println("first name: \(personInfo.givenName) last name: \(personInfo.familyName) ")   }
于 2015-06-13T07:57:06.853 に答える
3

CKDiscoverAllContactsOperationのドキュメントでは、次のことがわかります。

ユーザーのアドレス帳を検索しても、ユーザーの連絡先に関する個人データは返されません。検索では、対応するユーザー レコードの ID のみが返されます。これには、アプリがそこに配置したデータのみが含まれます。CloudKit は、アドレス帳の情報を使用して、現在のユーザーが知っているアプリのユーザーを識別します。システムはアプリではなくアドレス帳にアクセスするため、そのアクセスが発生したときに、システムはユーザーにプロンプ​​トを表示しません。

CloudKit ダッシュボードを見ると、User テーブルにも名前がないことがわかります。したがって、取得することもできません。

Apple がサービスを匿名化していると思います。ID に名前を付けるには、自分で何かを実装する必要があります。説明したように、デバイス名を使用するか、ユーザー自身に自分の名前を入力させることができます。

私の最初のアイデアは、まず ABAddressBookCopyArrayOfAllPeopleを使用してすべての連絡先を照会し、次に各電子メールに対してCKDiscoverUserInfosOperationを使用してすべての電子メールを 検索することで、これを実装することでした。どうやらそれも iOS 9 で廃止されたようです。

Apple はすべての個人データへのアクセスを停止しているようです。プレリリース ライブラリに移動してアドレスをフィルターすると、まだ多くの参照が表示されます。しかし、詳細ページに移動するとすぐに、すべてが非推奨になっていることがわかります。

于 2015-06-12T11:02:27.093 に答える