除了要求用户输入他们的姓名外,是否有任何方法可以从设备上获取它?
我尝试了这个库,它试图从[UIDevice currentDevice] name]
中提取名称,但在很多情况下都不起作用:
https://github.com/tiboll/TLLNameFromDevice
在iOS 6中,用户的名字是否出现在电话簿或我们可以访问的任何其他地方?
除了要求用户输入他们的姓名外,是否有任何方法可以从设备上获取它?
我尝试了这个库,它试图从[UIDevice currentDevice] name]
中提取名称,但在很多情况下都不起作用:
https://github.com/tiboll/TLLNameFromDevice
在iOS 6中,用户的名字是否出现在电话簿或我们可以访问的任何其他地方?
你可以遍历通讯录中的所有联系人,看是否有任何联系人被标记为所有者。
请注意,这样做会弹出"此应用程序要访问通讯录"消息。此外,苹果对此类事情并不太感兴趣。在应用程序审核指南中规定,应用程序不能未经用户允许使用个人信息。
您可以使用Square的解决方案:
JBDeviceOwner和ABGetMe都可以为您完成此操作。
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)")
}
)
}
}
)
}
)
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)")
}
)
}
}
}
)
}
)
您可以使用:
NSLog(@"user == %@",[[[NSHost currentHost] names] objectAtIndex:0]);
+currentHost
和-names
。鉴于警告,我不确定苹果公司是否有意将其作为公开可访问的API提供(或不提供),但是在不需要包含任何额外的头文件或链接其他的libraries
/frameworks
的情况下,一切都按预期工作。
编辑1:
您还可以查看此链接
编辑2:
如果您已经将您的应用程序与Facebook集成,您可以轻松地检索用户信息,请参见Facebook获取用户数据。