Лучший способ получить имя пользователя с устройства?

Я создал функцию, которая извлекает имя пользователя из имени устройства.

Идея состоит в том, чтобы пропустить шаги настройки, чтобы пользователь мог сразу перейти к игре при первом запуске приложения.

Это неоптимальный подход , поскольку я никогда не могу доверять имени устройства, чтобы оно содержало имя пользователя. Возникает вопрос: Как лучше это сделать?

Моя функция ниже получает правильное имя ...

  • ... если имя устройства по умолчанию не изменилось («Sanna's iPod» )
  • ... на английском языке,
  • ... на французском и аналогичных («iPod de Sanna»)
  • ... на шведском и аналогичном («Sannas iPod»), если имя не заканчивается на S («Johannes iPod» => возвращает «Johanne», но скорее должен возвращать «Johannes», чтобы быть правильным, так как само имя заканчивается на S.)

Очевидно, что имя не будет правильным, если пользователь изменил имя устройства не в форме по умолчанию.

- (NSString *) extractPlayerNameFromDeviceName: (NSString *) deviceName  {

    // get words in device name
    NSArray *words = [deviceName componentsSeparatedByString:@" "];
    NSMutableArray *substrings = [[NSMutableArray alloc] init]; 
    for (NSString *word in words) {
        NSArray *subwords = [word componentsSeparatedByString:@"'"];
        [substrings addObjectsFromArray:subwords];
    }

    // find the name part of the device name
    NSString *playerName = [NSString stringWithString: @""];
    for (NSString *word in substrings) {
        if ([word compare:@"iPhone"] != 0
            && [word compare:@"iPod"] != 0
            && [word compare:@"iPad"] != 0
            && [word length] > 2) {
            playerName = word;
        }
    }

    // remove genitive
    unichar lastChar = [playerName characterAtIndex:[playerName length] - 1];
    if (lastChar == 's') {
        playerName = [playerName substringToIndex:[playerName length] - 1];
    }
    lastChar = [playerName characterAtIndex:[playerName length] - 1];
    if (lastChar == '\'') {
        playerName = [playerName substringToIndex:[playerName length] - 1];
    }
    return playerName;
}

Я использую его для предложения имени пользователя в моем приложении. Таким образом, большинству пользователей не придется утруждать себя написанием имен пользователей.

Мое приложение не связано с другими сервисами, такими как iTunes или Facebook, но каждому пользователю нужно имя пользователя. Итак, как мне получить имя?

13
задан JOG 7 February 2012 в 20:33
поделиться