有没有办法通过iPhone SDK的标准API获取自己的电话号码?

时间:2013-06-13 04:56:39

标签: ios objective-c

我想通过iPhone SDK的标准API获取自己的电话号码? 我使用了一些代码片段,但没有得到电话号码。

NSString *num = [[NSUserDefaults standardUserDefaults] stringForKey:@"SBFormattedPhoneNumber]; 
NSLog(@"Phone Number: %@", num);

NSString *path = [NSHomeDirectory() stringByAppendingPathComponent:@"Library/Preferences/.GlobalPreferences.plist"]; 

NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:path];

NSLog(@"dict =  %@", dict);

我也希望在itunes上使用app,所以不想使用任何私有方法。

感谢您的帮助

1 个答案:

答案 0 :(得分:2)

没有可靠的方法来做到这一点。 Apple出于安全原因以及并非所有iOS设备都有电话号码(想想iPad / iPod)这样做都是这样做的。但是,似乎在某些时候似乎工作的唯一方法是使用设备名称,搜索用户的名称,并查看地址簿中是否存在该名称,然后希望存在用户自己的地址簿条目。但这不是一种万无一失的方法,肯定会导致潜在的误报结果(特别是对于通用名称或维护不良的地址簿)。另外,我不知道这在非英语语言中会有多么有效。因此,仅将其用作建议值以提示用户(即“这是您的电话号码吗?”)。以下是一些可以帮助您执行此操作的代码:

// Try to figure out user's name from device name
NSString *deviceName                = UIDevice.currentDevice.name;
NSUInteger index;
if ((index = [deviceName rangeOfString:@"'s iPhone"].location)  != NSNotFound ||
    (index = [deviceName rangeOfString:@"'s iPad"].location)    != NSNotFound ||
    (index = [deviceName rangeOfString:@"'s iPod"].location)    != NSNotFound ||
    (index = [deviceName rangeOfString:@"’s iPhone"].location)  != NSNotFound ||
    (index = [deviceName rangeOfString:@"’s iPad"].location)    != NSNotFound ||
    (index = [deviceName rangeOfString:@"’s iPod"].location)    != NSNotFound)
{
    NSString *potentialName             = [deviceName substringToIndex:index];
    if (potentialName.length > 0)
    {
        // Search against the address book for an entry with the same name
    }
}