NOTE Future development will occur at react-native-contacts. Migration is trivial (rename getContacts
-> getAll
)
getContacts
(callback) - returns all contacts as an array of objects
addContact
(contact, callback) - adds a contact to the AddressBook.
updateContact
(contact, callback) - where contact is an object with a valid recordID
deleteContact
(contact, callback) - where contact is an object with a valid recordID
checkPermission
(callback) - checks permission to use AddressBook.
requestPermission
(callback) - request permission to use AddressBook.
var AddressBook = require('react-native-addressbook')
AddressBook.getContacts( (err, contacts) => {
if(err && err.type === 'permissionDenied'){
// x.x
}
else{
console.log(contacts)
}
})
{
recordID: 1,
lastName: "Jung",
firstName: "Carl",
middleName: "",
emailAddresses: [{
label: "work",
email: "carl-jung@example.com",
}],
phoneNumbers: [{
label: "mobile",
number: "(555) 555-5555",
}],
thumbnailPath: "",
}
Currently all fields from the contact record except for thumbnailPath are supported for writing
var newPerson = {
lastName: "Nietzsche",
firstName: "Friedrich",
emailAddresses: [{
label: "work",
email: "mrniet@example.com",
}],
}
AddressBook.addContact(newPerson, (err) => { /*...*/ })
//contrived example
AddressBook.getContacts( (err, contacts) => {
//update the first record
let someRecord = contacts[0]
someRecord.emailAddresses.push({
label: "junk",
email: "mrniet+junkmail@test.com",
})
AddressBook.updateContact(someRecord, (err) => { /*...*/ })
//delete the second record
AddressBook.deleteContact(contacts[1], (err) => { /*...*/ })
})
Update and delete reference contacts by their recordID (as returned by the OS in getContacts). Apple does not guarantee the recordID will not change, e.g. it may be reassigned during a phone migration. Consequently you should always grab a fresh contact list with getContacts
before performing update and delete operations.
You can also delete a record using only it's recordID like follows: AddressBook.deleteContact({recordID: 1}, (err) => {})}
Permissions will automatically be checked and if needed requested upon calling getContacts. If you need more granular control you can using the checkPermission and requestPermission methods as follows:
AddressBook.checkPermission( (err, permission) => {
// AddressBook.PERMISSION_AUTHORIZED || AddressBook.PERMISSION_UNDEFINED || AddressBook.PERMISSION_DENIED
if(permission === 'undefined'){
AddressBook.requestPermission( (err, permission) => {
// ...
})
}
if(permission === 'authorized'){
// yay!
}
if(permission === 'denied'){
// x.x
}
})
npm install react-native-addressbook
Libraries
➜ Add Files to [your project's name]
./node_modules/react-native-addressbook/RCTAddressBook.xcodeproj
Build Phases
tab and in the Link Binary With Libraries
section add libRCTAddressBook.acheckPermission
& requestPermission
getContacts
(get all contacts)addContact
getContacts
options (a la camera roll's getPhotos)getContacts
Thanks to @mattotodd whose RCTAddressBook this is largely derived from.