Проверка CNContactPickerViewController для номера мобильного телефона в iOS Swift

Я использовал CNContactPickerViewController, чтобы пользователь мог выбрать контакт из своего списка контактов, хранящегося на телефоне. Я использую имя и номер контакта, используя методы делегата CNContactPicker. Код, как показано ниже

    func contactPicker(_ picker: CNContactPickerViewController, didSelect contact: CNContact) {
    // You can fetch selected name and number in the following way

    // user name
    let userName: String = "\(contact.givenName) \(contact.familyName)"

    // user phone number
    let userPhoneNumbers:[CNLabeledValue<CNPhoneNumber>] = contact.phoneNumbers
    let firstPhoneNumber:CNPhoneNumber = userPhoneNumbers[0].value

    // user phone number string
    let primaryPhoneNumberStr:String = firstPhoneNumber.stringValue

   // print(primaryPhoneNumberStr)

    textfieldName.text = userName
    textfieldContactNo.text = primaryPhoneNumberStr
}

Я хотел бы применить к нему проверки после проверки -

  1. Выбранный номер — это номер мобильного или стационарного телефона.

  2. Проверьте, есть ли у номера код страны.

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


person PersianBlue    schedule 05.09.2019    source источник
comment
см. это для справки: stackoverflow.com/questions/51062085/   -  person Anbu.Karthik    schedule 05.09.2019
comment
См. этот: stackoverflow.com/a/57771254/6144643   -  person Sagar Chauhan    schedule 05.09.2019


Ответы (1)


Это сложный вопрос, на который, я считаю, нет правильного и единственного ответа :) Я объясню, почему.

Давайте возьмем вашу первую проверку, которую вы хотите определить, номер телефона выбранного пользователем контакта является мобильным или стационарным телефоном. В настоящее время iOS не предоставляет опцию вызова стационарного телефона. Существующие варианты, как показано ниже.

введите здесь описание изображения

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

let phoneNumberType = userPhoneNumbers[0].label

С помощью оператора switch или if-else вы можете отфильтровать категорию. В качестве примера

    if (phoneNumberType?.contains("Mobile"))! {
        print("This is a mobile number")
    }

Вторая проверка, которую вы запрашиваете, — это проверить, есть ли у номера код страны. Посмотрите на следующий вывод отладки.

введите здесь описание изображения

Как видите, несмотря на то, что реальный номер телефона имеет код страны Новой Зеландии, ключ countryCode дает другой код, и я не знаю, почему. Вы можете извлечь номер телефона и создать свои собственные проверки (например, +, 00 ...), но есть несколько комбинаций, которые вам необходимо учитывать.

После всех этих усилий, если вы загружаете свою сборку в магазин приложений, существует вероятность отказа (если у вас нет веских аргументов), поскольку вы пытаетесь извлечь личную информацию пользователя. Вот почему мое самое первое предложение действительно;)

person AnujAroshA    schedule 05.09.2019