Saya telah mencoba menemukan beberapa informasi mengenai pengalih multitasking baru di iOS 7 dan terutama tangkapan layar yang diambil OS saat aplikasi masuk ke mode hibernasi.
Apakah ada cara untuk mematikan fitur atau tangkapan layar ini sepenuhnya? Atau dapatkah saya menyembunyikan aplikasi sekaligus dari pengalih? Aplikasi perlu berjalan di latar belakang, tetapi kami tidak ingin menampilkan tangkapan layar apa pun dari aplikasi.
Tangkapan layar berpotensi berisiko keamanan, pikirkan di sepanjang garis untuk aplikasi perbankan di mana nomor kartu atau ringkasan akun Anda akan tersedia untuk siapa saja yang mengklik dua kali tombol beranda pada perangkat.
Adakah yang tahu tentang ini? Terima kasih.
Jawaban:
Dalam Mempersiapkan UI Anda untuk Berjalan di Latar Belakang , Apple mengatakan:
Lihat T&J Teknis QA1838: Mencegah Informasi Sensitif Muncul di Pengalih Tugas
Selain mengaburkan / mengganti informasi sensitif, Anda mungkin juga ingin memberi tahu iOS 7 untuk tidak mengambil cuplikan layar melalui
ignoreSnapshotOnNextApplicationLaunch
, yang dokumentasinya mengatakan:Karena itu, tampaknya snapshot layar masih diambil dan oleh karena itu saya telah mengajukan laporan bug. Tetapi Anda harus menguji lebih lanjut dan melihat apakah menggunakan pengaturan ini membantu.
Jika ini adalah aplikasi perusahaan, Anda mungkin juga ingin melihat pengaturan yang sesuai yang
allowScreenShot
diuraikan di bagian Batasan Muatan dari Referensi Profil Konfigurasi.Berikut adalah implementasi yang mencapai apa yang saya butuhkan. Anda dapat mempresentasikan milik Anda sendiri
UIImageView
, atau Anda dapat menggunakan pola protokol-delegasi untuk mengaburkan informasi rahasia:Saya kemudian memberikan properti kepada delegasi aplikasi saya untuk itu:
Pengontrol tampilan saya menyetelnya:
Pengontrol tampilan jelas mengimplementasikan protokol itu:
Dan, akhirnya, delegasi aplikasi saya memanfaatkan protokol dan properti ini:
Catatan, saya menggunakan
applicationWillResignActive
daripada yang disarankanapplicationDidEnterBackground
, karena, seperti yang ditunjukkan orang lain, yang terakhir tidak dipanggil saat mengetuk dua kali tombol beranda saat aplikasi sedang berjalan.Saya berharap saya dapat menggunakan pemberitahuan untuk menangani semua ini, daripada pola protokol-delegasi, tetapi dalam pengujian terbatas saya, pemberitahuan tidak ditangani secara tepat waktu, tetapi pola di atas berfungsi dengan baik.
sumber
ignoreSnapshotOnNextApplicationLaunch
metode ini diabaikan jika tidak dipanggil selama pemulihan status, seperti yang dijelaskan di sini .ignoreSnapshotOnNextApplicationLaunch
tidak benar, bahwa, seperti yang kita semua amati, snapshot sebenarnya diambil, tetapi tidak akan digunakan pada peluncuran berikutnya.Ini adalah solusi yang saya kerjakan untuk aplikasi saya:
Seperti yang dikatakan Tommy: Anda dapat menggunakan applicationWillResignActive. Apa yang saya lakukan adalah membuat UIImageView dengan SplashImage saya dan menambahkannya sebagai subview ke jendela utama saya-
Saya menggunakan metode ini daripada applicationDidEnterBackground karena applicationDidEnterBackground tidak akan dipicu jika Anda mengetuk dua kali tombol beranda, dan applicationWillResignActive akan terpicu. Saya mendengar orang mengatakan meskipun itu dapat dipicu dalam kasus lain juga, jadi saya masih menguji sekitar untuk melihat apakah itu memberi masalah, tetapi sejauh ini tidak ada! ;)
Di sini untuk menghapus imageview:
Semoga ini membantu!
Catatan: Saya mengujinya pada simulator dan perangkat nyata: Ini Tidak Akan Ditampilkan di simulator, tetapi pada perangkat nyata!
sumber
Metode cepat dan mudah ini akan menghasilkan snapshot hitam di atas ikon aplikasi Anda di iOS7 atau pengalih aplikasi yang lebih baru.
Pertama, ambil jendela kunci aplikasi Anda (biasanya disiapkan di AppDelegate.m dalam application: didFinishLaunchingWithOptions), dan sembunyikan saat aplikasi Anda akan dipindahkan ke latar belakang:
Kemudian, hapus-sembunyikan jendela kunci aplikasi Anda saat aplikasi Anda kembali aktif:
Pada titik ini, periksa pengalih aplikasi dan verifikasi bahwa Anda melihat snapshot hitam di atas ikon aplikasi Anda. Saya perhatikan bahwa jika Anda meluncurkan pengalih aplikasi segera setelah memindahkan aplikasi Anda ke latar belakang, mungkin ada penundaan ~ 5 detik di mana Anda akan melihat cuplikan aplikasi Anda (yang ingin Anda sembunyikan!), Setelah yang dialihkan ke snapshot serba hitam. Saya tidak yakin ada apa dengan penundaan itu; jika ada yang punya saran, silakan bergabung.
Jika Anda menginginkan warna selain hitam di pengalih, Anda dapat melakukan sesuatu seperti ini dengan menambahkan subview dengan warna latar belakang yang Anda inginkan:
Lalu, hapus subview warna ini saat aplikasi Anda kembali aktif:
sumber
Saya menggunakan solusi berikut: ketika aplikasi akan mengundurkan diri saya mendapatkan snapshot appWindow sebagai Tampilan dan menambahkan blur padanya. Lalu saya menambahkan tampilan ini ke jendela aplikasi
bagaimana cara melakukannya:
di appDelegate sebelum implementasi tambahkan baris:
tambahkan metode ini:
buat implementasi appDelegate Anda menjadi seperti berikut:
Saya membuat proyek Contoh di Swift dan Objective C . Kedua proyek melakukan tindakan berikut dalam:
-aplikasi: didResignActive - snapshot dibuat, diburamkan dan ditambahkan ke jendela aplikasi
-aplikasi: tampilan blur willBecomeActive sedang dihapus dari jendela.
Cara Penggunaan:
Objecitve C
Tambahkan
AppDelegate+NVSBlurAppScreen
file .h dan .m ke proyek Andadi metode -applicationWillResignActive Anda: tambahkan baris berikut:
di metode -applicationDidEnterBackground Anda: tambahkan baris berikut:
Cepat
tambahkan file AppDelegateExtention.swift ke proyek Anda
dalam fungsi applicationWillResignActive Anda, tambahkan baris berikut:
dalam fungsi applicationDidBecomeActive Anda, tambahkan baris berikut:
sumber
jika hanya digunakan
[self.window addSubview:imageView];
dalamapplicationWillResignActive
fungsi, imageView ini tidak akan mencakup UIAlertView, UIActionSheet atau MFMailComposeViewController ...Solusi terbaik adalah
sumber
Memberikan solusi saya sendiri sebagai "jawaban", padahal solusi ini sangat tidak bisa diandalkan. Terkadang saya mendapatkan layar hitam sebagai tangkapan layar, terkadang XIB dan terkadang tangkapan layar dari aplikasi itu sendiri. Bergantung pada perangkat dan / atau jika saya menjalankan ini di simulator.
Harap diperhatikan bahwa saya tidak dapat memberikan kode apa pun untuk solusi ini karena ada banyak detail khusus aplikasi di sana. Tetapi ini harus menjelaskan inti dasar solusi saya.
sumber
Anda dapat menggunakan aktivator untuk mengonfigurasi klik ganda tombol beranda untuk meluncurkan multitasking dan menonaktifkan klik ganda default tombol beranda dan meluncurkan jendela multitasking. Metode ini dapat digunakan untuk mengubah tangkapan layar ke gambar default aplikasi. Ini berlaku untuk aplikasi dengan fitur perlindungan kode sandi default.
sumber
Xamarin.iOS
Diadaptasi dari https://stackoverflow.com/a/20040270/7561
Alih-alih hanya menunjukkan warna, saya ingin menunjukkan layar peluncuran saya.
sumber