ユーザーに名前の入力を求める以外に、デバイスから名前を削除する方法はありますか?
[UIDevice currentDevice] name]
から名前を抽出しようとするこのライブラリを試しましたが、多くの状況で機能しません。
https://github.com/tiboll/TLLNameFromDevice
ユーザーの名前は、電話帳またはiOS 6でアクセスできる他の場所にありますか?
アドレス帳のすべての連絡先を調べて、所有者フラグが付いている連絡先があるかどうかを確認できます。
これを行うと、「このアプリはアドレス帳へのアクセスを望んでいます」というメッセージがポップアップ表示されることに注意してください。また、Appleはこの種のことにあまり熱心ではありません。アプリレビューガイドでは、アプリがユーザーの許可なしに個人情報を使用することはできないと指定されています。
Squareのソリューション を使用できます:
JBDeviceOwner と ABGetMe の両方がこれを行います。
次を使用できます。
NSLog(@"user == %@",[[[NSHost currentHost] names] objectAtIndex:0]);
メソッド+currentHost
および-names
が見つからないというコンパイラの警告を受け取りました。警告を考えると、これを公的にアクセス可能なAPIとして利用可能にする(または利用できない)というAppleの意図はわかりませんが、追加のヘッダーファイルを含めたり、追加のlibraries
/frameworks
。
編集1:これもご覧ください リンク
編集2:アプリをFacebookと統合している場合は、ユーザー情報を簡単に取得できます。 Facebook Fetch User Data を参照してください。
CloudKit を使用できます。 Swift(エラーを無視)のスニペットに続いて:
let container = CKContainer.defaultContainer()
container.fetchUserRecordIDWithCompletionHandler(
{
(recordID, error) in
container.requestApplicationPermission(
.PermissionUserDiscoverability,
{
(status, error2) in
if (status == CKApplicationPermissionStatus.Granted)
{
container.discoverUserInfoWithUserRecordID(
recordID,
completionHandler:
{
(info, error3) in
println("\(info.firstName) \(info.lastName)")
}
)
}
}
)
}
)
上記のコードは、 http://www.snip2code.com/Snippet/109633/CloudKit-User-Info のコードに基づいています。
人々の時間を節約するために。 Swift4の場合:
let container = CKContainer.default()
container.fetchUserRecordID(
completionHandler: {
(recordID, error) in
guard let recordID = recordID else {
return
}
container.requestApplicationPermission(
.userDiscoverability,
completionHandler: {
(status, error2) in
if (status == CKContainer_Application_PermissionStatus.granted)
{
if #available(iOS 10.0, *) {
container.discoverUserIdentity(withUserRecordID:
recordID,
completionHandler:
{
(info, error3) in
guard let info = info else {
return
}
print("\(info.firstName) \(info.lastName)")
}
)
}
}
}
)
}
)
ただし、CKUserIdentityは姓または名を公開しなくなりました
したがって、この答えは機能しなくなります。