除了要求用户输入他们的名字之外,还有什么方法可以将其从设备中取出?
我尝试了这个库,它试图从中提取名称[UIDevice currentDevice] name]
,但这在很多情况下都不起作用:
https://github.com/tiboll/TLLNameFromDevice
用户的姓名是否存在于电话簿或我们在 iOS 6 中可以访问的任何其他地方?
除了要求用户输入他们的名字之外,还有什么方法可以将其从设备中取出?
我尝试了这个库,它试图从中提取名称[UIDevice currentDevice] name]
,但这在很多情况下都不起作用:
https://github.com/tiboll/TLLNameFromDevice
用户的姓名是否存在于电话簿或我们在 iOS 6 中可以访问的任何其他地方?
好吧,您可以浏览地址簿中的所有联系人,看看其中是否有任何人标有所有者标志。
请注意,这样做会弹出“此应用程序想要访问地址簿”消息。苹果也不是很热衷于这类事情。在应用审查指南中规定,未经用户许可,应用不得使用个人信息。
您可以使用Square 的解决方案:
JBDeviceOwner和ABGetMe都会为您执行此操作。
您可以使用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 不再公开名字或姓氏
所以这个答案不再有效。
您可以使用:
NSLog(@"user == %@",[[[NSHost currentHost] names] objectAtIndex:0]);
我确实收到了编译器警告,这些方法+currentHost
并-names
没有找到。鉴于警告,我不确定 Apple 是否打算将其作为可公开访问的 API 提供(或不提供),但是,一切似乎都按预期工作,无需包含任何额外的头文件或额外的libraries
/链接frameworks
。
编辑1: 您也可以看看这个链接
编辑 2: 如果您已将应用程序与 Facebook 集成,则可以轻松检索用户信息,请参阅Facebook Fetch User Data