2012-09-17 3 views
9

La mia app deve memorizzare i contatti di un utente sui nostri server (dato il permesso dell'utente ovviamente). Uno dei suoi requisiti è quello di riflettere eventuali modifiche sulla rubrica dei dispositivi (aggiungi/modifica/cancella) al server.Rubrica iOS - Come sapere quale contatto è stato aggiunto/modificato/eliminato?

Esiste un modo semplice/best practice per determinare quali contatti della rubrica sono stati modificati prima di rilanciare un'applicazione?

Tutto quello che posso vedere sono metodi di callback per notificare un'applicazione di una modifica nella rubrica, ma sembra che non ci siano modi documentati per determinare quali contatti sono stati aggiunti, modificati o cancellati.

Quello che sto pensando in questo momento è confrontare manualmente il nuovo elenco di contatti con uno memorizzato sul dispositivo, quindi aggiornare sia l'applicazione che il server delle modifiche. Ma penso che potrebbe essere troppo se l'utente ha una grande quantità di contatti.

Grazie!

+0

penso che questo [risposta StackOverflow] (http://stackoverflow.com/questions/12348916/addressbook-synchronization-in-ios) potrebbe essere utile per voi. –

risposta

1

Cerca in libsqlite3.dylib e crea un database sql che acceda ai file flat generati per tutte le proprietà necessarie e quindi confronta periodicamente il tuo database con i dispositivi degli utenti. Assicurati che entrambi i database acquisiscano solo le necessità essenziali di cui avrai bisogno dal framework di abaddressbook.

Esempio progetto iOS con biblioteca sqlite3 è qui:

http://www.techotopia.com/index.php/An_Example_SQLite_based_iOS_7_Application

& Particolare a farlo con ABAddressbook per le proprietà multi-valore del contatto qui:

http://linuxsleuthing.blogspot.com/2012/10/addressing-ios6-address-book-and-sqlite.html

+1

Questo non è il modo ideale per iterare ogni volta i contatti .. Meglio usare "ABAddressBookRegisterExternalChangeCallback" – Mrug

2

Devi registra la tua classe con lo ABAddressBookRegisterExternalChangeCallback passando un ABAddressBookRef e il callback ("addressBookDidChang e" nel mio esempio)

ABAddressBookRef addressBook = //... 

ABAddressBookRegisterExternalChangeCallback(addressBook, addressBookDidChange(__bridge_retained void *)self); 

void addressBookDidChange(ABAddressBookRef addressBook, CFDictionaryRef info, void *context) 
{ 
    //Something changed from last application launch, insert your logic here... 

    //If you want to handle it in a "Objective-C" method you can do something like: 
    [((__bridge ABManager*) context) yourObjectiveCMethod]; 

} 
+2

Indica che qualcosa è accaduto con la rubrica ancora non risponde - Quale contatto è stato aggiunto/modificato/cancellato? –

+1

@VenuGopalTewari Puoi salvare i tuoi contatti prima e confrontarli con i contatti estratti nell'indirizzo di callbackBookDidChange – andreacipriani

+0

puoi suggerire qualche buona logica o qualche esempio o qualsiasi codice di esempio. – Ayaz