Sesuai dokumentasi ini di situs apple (gulir ke bawah ke Privasi di tengah halaman), akses ke buku alamat harus diberikan sebelum dapat diakses secara terprogram. Inilah yang akhirnya saya lakukan.
#import <AddressBookUI/AddressBookUI.h>
// Request authorization to Address Book
ABAddressBookRef addressBookRef = ABAddressBookCreateWithOptions(NULL, NULL);
if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusNotDetermined) {
ABAddressBookRequestAccessWithCompletion(addressBookRef, ^(bool granted, CFErrorRef error) {
if (granted) {
// First time access has been granted, add the contact
[self _addContactToAddressBook];
} else {
// User denied access
// Display an alert telling user the contact could not be added
}
});
}
else if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusAuthorized) {
// The user has previously given access, add the contact
[self _addContactToAddressBook];
}
else {
// The user has previously denied access
// Send an alert telling user to change privacy setting in settings app
}
Perbarui Untuk iOS 9 dan yang lebih baru:
Dari situs web Apple:
Penting
Kerangka UI Buku Alamat tidak digunakan lagi di iOS 9. Gunakan API yang ditentukan dalam kerangka ContactsUI sebagai gantinya. Untuk mempelajari lebih lanjut, lihat ContactsUI
granted
parameter di blok penyelesaian.Itu trik yang sempurna untuk saya!
Di iOS6, apple memperkenalkan kontrol privasi baru, pengguna dapat mengontrol akses kontak dan kalender oleh setiap aplikasi. Jadi, di sisi kode, Anda perlu menambahkan beberapa cara untuk meminta izin. Di iOS5 atau sebelumnya, kami selalu dapat menelepon
untuk mendapatkan buku alamat tanpa masalah, tetapi di iOS6, jika Anda tidak memiliki izin, panggilan ini hanya akan mengembalikan penunjuk kosong. Itulah mengapa kita perlu mengubah metode untuk mendapatkan ABAddressBookRef.
Dalam kode, semaphore digunakan untuk memblokir hingga respons, sementara ABAddressBookRequestAccessWithCompletion akan meminta izin jika aplikasi tidak meminta sebelumnya. Jika tidak, itu hanya akan mengikuti pengaturan di Pengaturan-Privasi-Kontak.
SUMBER: http://programmerjoe.blogspot.com/2012/10/ios6-permissions-contacts.html
sumber
if (ABAddressBookRequestAccessWithCompletion != NULL)
pemeriksaan, untuk mengontrol apakah akan masuk keABAddressBookGetAuthorizationStatus()
bagian kode Kyle bekerja dengan baik untuk saya dengan iOS 5 dan 6.Untuk kerangka kontak:
sumber
sumber
Memiliki beberapa masalah dengan Yunas kode pada iOS6.1 di Xcode5. Dengan beberapa adaptasi kecil, ini berhasil untuk saya.
Masalahnya adalah ARC di iOS 6, tidak memungkinkan
dispatch_release(sema);
Berikut kode kerja. Catatan: Saya menggunakanm_addressbook
alih-alihaddressbook
sebagai ABAddressBookRef!ViewController.m
sumber
sumber
Jika ada yang punya masalah dengan addressBook di iOS5 maka Gunakan
Insted dari
sumber
Untuk menambahkan deskripsi ke peringatan digunakan di InfoPlist.strings.
NSContactsUsageDescription = "TESTING!";
sumber
Swift 3. Jangan lupa mengimpor Kontak
sumber
Menurut dokumentasi pengembangan Apple terbaru iOS, apple bersikeras untuk menggunakan Kontak selain AddressBook .
Di atas kode obyektif c membantu untuk menemukan izin akses kontak cuaca diberikan atau tidak.
sumber
Dengan iOS 6 Anda harus meminta izin seperti ini
sumber
Untuk mendapatkan Addressbook di ios
sumber
Kode ini menunjukkan bagaimana mengatur izin dan bagaimana mendapatkan semua kontak dari telepon dan menunjukkan kontak dalam daftar dengan label tag
sumber