web-dev-qa-db-ja.com

iPhoneユーザーの名前を取得する方法はありますか?

ユーザーに名前の入力を求める以外に、デバイスから名前を削除する方法はありますか?

[UIDevice currentDevice] name]から名前を抽出しようとするこのライブラリを試しましたが、多くの状況で機能しません。

https://github.com/tiboll/TLLNameFromDevice

ユーザーの名前は、電話帳またはiOS 6でアクセスできる他の場所にありますか?

16
Andrew

アドレス帳のすべての連絡先を調べて、所有者フラグが付いている連絡先があるかどうかを確認できます。

これを行うと、「このアプリはアドレス帳へのアクセスを望んでいます」というメッセージがポップアップ表示されることに注意してください。また、Appleはこの種のことにあまり熱心ではありません。アプリレビューガイドでは、アプリがユーザーの許可なしに個人情報を使用することはできないと指定されています。

11
rckoenes

Squareのソリューション を使用できます:

  1. デバイスの名前を取得 (例:「ジョンスミスのiPhone」)。
  2. 電話の連絡先を調べて、「JohnSmith」という名前の連絡先を探します。

JBDeviceOwnerABGetMe の両方がこれを行います。

8
Senseful

次を使用できます。

NSLog(@"user == %@",[[[NSHost currentHost] names] objectAtIndex:0]);

メソッド+currentHostおよび-namesが見つからないというコンパイラの警告を受け取りました。警告を考えると、これを公的にアクセス可能なAPIとして利用可能にする(または利用できない)というAppleの意図はわかりませんが、追加のヘッダーファイルを含めたり、追加のlibraries/frameworks

編集1:これもご覧ください リンク

編集2:アプリをFacebookと統合している場合は、ユーザー情報を簡単に取得できます。 Facebook Fetch User Data を参照してください。

2
Mutawe

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は姓または名を公開しなくなりました

したがって、この答えは機能しなくなります。

2
drowa