Por que eu devo ler este artigo:Até o iOS 8, a única maneira de acessar os contatos era através do antigo framework Address Book – escrito ainda em C. No WWDC 2015, a Apple finalmente ouviu os feedbacks de muitos desenvolvedores e apresentou o Contacts, um framework muito claro e objetivo disponível em Objective-C e Swift.

A grande vantagem do Contacts é a possiblidade de gerenciar os dados dos contatos utilizando interfaces customizadas ou já existentes no framework ContactsUI.

No exemplo prático, serão ilustradas as formas de recuperar os contatos, utilizando filtros e demais opções, como adicionar, remover e editar um novo contato, e por fim, as opções de exibição do contato na interface.

Qualquer desenvolvedor que já tenha utilizado o framework Address Book há de concordar que era uma parte relativamente complicada de se trabalhar do SDK do iOS.

Principalmente pelo fato de ser escrita em C, requeria gerenciamento explícito de memória, além de uma conversão de tipos para ser utilizada com o ARC. O SDK do iOS 9 trouxe consigo o framework Contacts, com suporte a Swift e Objective-C, para substituir definitivamente o Address Book.

Outro fato interessante sobre o Contacts é que ele é multiplataforma. O mesmo código pode ser utilizado com os SDKs do iOS 9, OS X El Capitan e watchOS 2.

É fundamental que o leitor tenha em mente que os contatos de um usuário são parte importante da experiência ao utilizar o iPhone.

Dessa maneira, a Apple respeita a privacidade do usuário, que precisa autorizar o aplicativo a utilizar seus contatos. Além disso, a importância de um framework robusto para lidar com contatos é reforçada no WWDC 2015, já que todos os dados envolvendo contatos são considerados muito importantes para a experiência do usuário.

Exemplificando uma situação típica, quando o usuário recebe uma ligação, há uma enorme diferença entre ver que ela é feita por um simples número de telefone ou por um contato, com foto personalizada e dados customizados. Por isso, é interessante que os desenvolvedores possam lidar com esses dados de maneira segura e inteligente.

Com o lançamento do iOS 9, a Apple disponibiliza maneiras eficazes de modificar e personalizar os contatos. Como será visto no exemplo prático, é possível atribuir a um contato:

· Listas de e-mail e telefone;

· Novos tipos de e-mail e telefone, além dos tradicionais casa/trabalho;

· Uma foto de perfil;

· Data de nascimento;

· Notas de texto.

Os contatos são recuperados de maneira unificada. Isso quer dizer que a procura é feita não somente na base de dados dos contatos, mas também em outros lugares em que os contatos estiverem sincronizados no aparelho, como no iCloud.

A classe CNContact

No framework Contacts, a classe que encapsula os dados do contato é a CNContact. Imutável, contém um grande número de atributos, dentre os quais se pode destacar: primeiro nome, sobrenome, foto de perfil, números de telefone, lista de e-mails, lista de endereços físicos e data de aniversário. Possui também sua versão mutável, a classe CNMutableContact.

Quanto aos tipos de seus atributos, nome e sobrenome são NSString, como é de se esperar. Data de aniversário é do tipo NSDateComponents e imagem de perfil é do tipo NSData. O destaque aqui fica para as listas de e-mail, endereços físicos e números de telefone.

As três listas citadas são de objetos do tipo CNLabeledValue, outra novidade do Contacts. Semelhante a um NSDictionary, atribui-se um valor (value) para uma chave (label). O label é um NSString, enquanto o value é algum objeto que implemente os protocolos NSCopying e NSSecureEncoding.

Como exemplo, para definir o e-mail pessoal do contato, atribui-se o valor do e-mail para a chave pré-definida CNLabelHome. O framework possui algumas outras chaves, como CNLabelWork, que podem ser usadas tanto para as listas de e-mail como para endereços físicos e números de telefone. Além disso, é possível adicionar labels personalizados.

Adicionando, removendo e editando um contato

O Contacts possui inúmeras novas classes, mas possivelmente a mais importante e mais usada é a CNContactsStore. Essa classe representa o banco de dados de contatos do usuário no aparelho e possui uma grande variedade de funções, como as de recuperar, criar, editar e remover contatos.

Adicionar um novo contato consiste em inicialmente criar um objeto CNContact, conforme descrito na seção anterior.

Após setar as propriedades desejadas, cria-se um objeto CNSaveRequest, que conterá o CNContact criado. Para salvar esse novo contato no aparelho, basta que uma instância de CNContactsStore execute um método que salva o objeto CNSaveRequest.

...

Quer ler esse conteúdo completo? Tenha acesso completo