Saya menggunakan kode scifihifi-iphone idandersen untuk gantungan kunci dan menyimpan kata sandi
[SFHFKeychainUtils storeUsername:@"User" andPassword:@"123"
forServiceName:@"TestService" updateExisting:YES error:&error];
Ketika saya menghapus aplikasi dari perangkat, kata sandi tetap berada di gantungan kunci.
Saya ingin menghapus kata sandi dari gantungan kunci ketika pengguna menghapus aplikasi dari perangkat. Bagaimana saya bisa melakukan ini?
ios
objective-c
keychain
enc
sumber
sumber
Jawaban:
Anda dapat mengambil keuntungan dari fakta bahwa
NSUserDefaults
yang dibersihkan oleh instalasi dari sebuah aplikasi. Sebagai contoh:Ini memeriksa dan menetapkan kunci / nilai "FirstRun"
NSUserDefaults
pada saat pertama kali menjalankan aplikasi Anda jika belum ditetapkan. Ada komentar di mana Anda harus meletakkan kode untuk menghapus nilai dari gantungan kunci. Sinkronisasi dapat dipanggil untuk memastikan kunci / nilai "FirstRun" segera bertahan jika pengguna membunuh aplikasi secara manual sebelum sistem tetap ada.sumber
synchronize
) hilang dalam kasus itu. Sebaiknya panggil sinkronisasi setelah menyetel tombol jalankan pertama. Dan ya, NSUserDefaults dihapus ketika perangkat diatur ulang (dan tidak dikembalikan dari cadangan), dan itu bagus untuk kasus ini.Untuk pengguna yang mencari versi @ amro jawaban Swift 3.0 :
* perhatikan bahwa fungsi sinkronisasi () sudah usang
sumber
if !userDefaults.bool(forKey: "hasRunBefore") {
Itu lebih bersih.Tidak ada pemicu untuk melakukan kode ketika aplikasi dihapus dari perangkat. Akses ke gantungan kunci tergantung pada profil penyediaan yang digunakan untuk menandatangani aplikasi. Karenanya tidak ada aplikasi lain yang dapat mengakses informasi ini di gantungan kunci.
Ini tidak membantu Anda dengan tujuan untuk menghapus kata sandi di gantungan kunci ketika pengguna menghapus aplikasi dari perangkat tetapi itu akan memberi Anda kenyamanan bahwa kata sandi tidak dapat diakses (hanya dari menginstal ulang aplikasi asli).
sumber
Bagi mereka yang mencari versi Swift dari jawaban @ amro:
sumber
Versi C # Xamarin
... dan untuk menghapus catatan dari gantungan kunci (komentar TODO di atas)
sumber
if (VersionTracking.IsFirstLaunchEver) {// remove keychain items}
dari Xamarin.Essentials Anda tidak perlu kode untukuserDefaults
. Xamarin. Esensial membungkus itu untuk Anda .File akan dihapus dari direktori dokumen aplikasi Anda ketika pengguna mencopot pemasangan aplikasi. Mengetahui hal ini, yang harus Anda lakukan adalah memeriksa apakah ada file sebagai hal pertama yang terjadi
application:didFinishLaunchingWithOptions:
. Setelah itu, buat file tanpa syarat (meskipun itu hanya file dummy).Jika file tidak ada pada saat pemeriksaan, Anda tahu ini adalah yang pertama kali dijalankan sejak instalasi terbaru. Jika nanti Anda perlu tahu di aplikasi, simpan hasil boolean ke anggota delegasi aplikasi Anda.
sumber
Jawaban @ amro diterjemahkan ke Swift 4.0:
sumber
if !UserDefaults.standard.bool(forKey: "FirstInstall")
yang defaultnya salah jika kunci tidak ada. Dan .synchronize () tidak diperlukan.Ini tampaknya menjadi perilaku default di iOS 10.3 berdasarkan perilaku yang orang saksikan dalam beta # 2. Belum menemukan dokumentasi resmi tentang ini, jadi silakan berkomentar jika Anda punya.
sumber