Estoy creando una aplicación de chat, para lo cual necesito verificar cada uno de los miembros de mi lista de contactos si están registrados en mi aplicación y mostrar la lista de miembros registrados en mi aplicación. Actualmente estoy llamando a una API para verificar cada número uno por uno. En el caso de 800 contactos, se llama 800 veces. Sé que esta no es la mejor manera de hacerlo. Entonces, ¿alguien puede ayudarme y sugerirme que lo haga de una mejor manera?

A continuación se muestra mi código:

 func createContactNumbersArray() {
    for i in 0...self.objects.count-1 {
        let contact:CNContact! = self.objects[i]
        if contact.phoneNumbers.count > 0 {
            for j in 0...contact.phoneNumbers.count-1 {
                print((contact.phoneNumbers[j].value).value(forKey: "digits")!)
                let tappedContactMobileNumber = (contact.phoneNumbers[j].value).value(forKey: "digits")
                let phoneNo = self.separateISDCodeMobileNo(mobileNo:tappedContactMobileNumber as! String)
                contactNumbersArray.append(phoneNo.1)
            }
        }
    }
    callGetAppUserDetailService(mobileNumber: self.contactNumbersArray[currentIndex] as! String)
}

Estoy haciendo todo este proceso en segundo plano y actualizando la lista de miembros al frente en el escenario actual. Quiero hacer todo el proceso tan rápido como Whatsapp.

3
Gautam Shrivastav 14 sep. 2018 a las 10:59

3 respuestas

La mejor respuesta

No hay forma de hacerlo sin modificaciones de fondo. Por lo tanto, debe trabajar estrechamente con su ingeniero de back-end y crear una API para esto.

Aquí hay un consejo sobre cómo puede construir esta API:

Para tener 2 API:

1) Cargue la libreta de direcciones de usuario completa en el back-end en una sola solicitud, algo así como:

let addressBook = NSMutableOrderedSet()

let contact1 = AddressBookContact()
contact1.name = "Jony Ive"
contact1.phone = "1-800-300-2000"
addressBook.add(contact1)

let contact2 = AddressBookContact()
contact2.name = "Steve Why"
contact2.phone = "412739123123"
addressBook.add(contact2)

let deviceUDID = nil

Request.uploadAddressBook(withUdid: deviceUDID, addressBook: addressBook, force: false, successBlock: { (updates) in

}) { (error) in

}

2) Como siguiente paso: recupere una lista de usuarios ya registrados con teléfonos de su libreta de direcciones, algo como esto:

let deviceUDID = nil

Request.registeredUsersFromAddressBook(withUdid: nil, successBlock: { (users) in

}) { (error) in

}

Así que ahora puedes mostrarlo en la interfaz de usuario

Encontré este ejemplo aquí https://developers.connectycube.com/ios/address-book

1
Rubycon 14 sep. 2018 a las 14:46

Creo que debe guardar el número de teléfono del usuario en su base de datos cuando el usuario registre su aplicación. Luego puede encontrar contactos que ya han utilizado su aplicación de chat.

0
Dogan Altinbas 14 sep. 2018 a las 08:09

De hecho, puede hacer poco en el cliente. La forma normal es: el servidor proporciona una interfaz que admite la verificación de una matriz de números de teléfono y devuelve los números de teléfono registrados en el servidor.

0
Sven Shao 14 sep. 2018 a las 08:43