有什么方法可以获得iPhone用户的名字?

时间:2013-06-03 13:14:09

标签: iphone ios objective-c uidevice

除了要求用户输入他们的名字外,还有什么方法可以将其从设备上取下来吗?

我试过这个库,试图从[UIDevice currentDevice] name]中提取名称,但这在很多情况下都不起作用:

https://github.com/tiboll/TLLNameFromDevice

用户的姓名是否出现在电话簿中或我们在iOS 6中可以访问的任何其他位置?

5 个答案:

答案 0 :(得分:11)

您可以浏览AddressBook中的所有联系人,看看是否有任何联系人标记了所有者标记。

请注意,执行此操作会弹出“此应用程序需要访问通讯录”消息。苹果也不太热衷于这些事情。在应用程序评论指南中,指定应用程序未经用户许可不得使用个人信息。

答案 1 :(得分:8)

您可以使用Square's solution

  1. Get the device's name(例如“约翰史密斯的iPhone”)。
  2. 浏览手机上的联系人,查找名为“John Smith”的联系人。
  3. JBDeviceOwnerABGetMe都会为你做这件事。

答案 2 :(得分:2)

您可以使用:

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

我确实收到编译器警告,指出找不到方法+currentHost-names。鉴于此警告,我不确定Apple是否打算将其作为可公开访问的API提供(或不提供),但是,所有内容似乎都按预期工作,无需包含任何其他头文件或链接其他{{1 }} / libraries

编辑1: 您也可以查看此Link

编辑2: 如果您已将应用程序与Facebook集成,则可以轻松检索用户信息,请参阅Facebook Fetch User Data

答案 3 :(得分:2)

您可以使用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不再公开名字或姓氏

所以这个答案不再适用。

答案 4 :(得分:-1)

对于SWIFT,您可以使用

NSUserName()返回当前用户的登录名。

func NSUserName() -> String