除了要求用户输入他们的名字外,还有什么方法可以将其从设备上取下来吗?
我试过这个库,试图从[UIDevice currentDevice] name]
中提取名称,但这在很多情况下都不起作用:
https://github.com/tiboll/TLLNameFromDevice
用户的姓名是否出现在电话簿中或我们在iOS 6中可以访问的任何其他位置?
答案 0 :(得分:11)
您可以浏览AddressBook中的所有联系人,看看是否有任何联系人标记了所有者标记。
请注意,执行此操作会弹出“此应用程序需要访问通讯录”消息。苹果也不太热衷于这些事情。在应用程序评论指南中,指定应用程序未经用户许可不得使用个人信息。
答案 1 :(得分:8)
您可以使用Square's solution:
JBDeviceOwner和ABGetMe都会为你做这件事。
答案 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)