Saya memiliki aplikasi komersial yang memiliki alasan yang sepenuhnya sah untuk melihat SSID dari jaringan yang terhubung: Jika terhubung ke jaringan Adhoc untuk perangkat perangkat keras pihak ke-3, ia harus berfungsi dengan cara yang berbeda daripada jika itu adalah terhubung ke internet.
Semua yang saya lihat tentang mendapatkan SSID memberitahu saya bahwa saya harus menggunakan Apple80211, yang saya pahami adalah perpustakaan pribadi. Saya juga membaca bahwa jika saya menggunakan perpustakaan pribadi Apple tidak akan menyetujui aplikasi.
Apakah saya terjebak di antara Apple dan tempat yang sulit, atau ada sesuatu yang saya lewatkan di sini?
Jawaban:
Pada iOS 7 atau 8, Anda dapat melakukan ini (perlu Hak untuk iOS 12+ seperti yang ditunjukkan di bawah ini):
Contoh output:
Perhatikan bahwa tidak ada jika didukung pada simulator. Uji pada perangkat Anda.
iOS 12
Anda harus mengaktifkan akses info wifi dari kemampuan.
Cepat 4.2
sumber
@import
bukan#import
). Dentang akan secara otomatis ditautkan dalam kerangka kerja yang diperlukan ketika modul, bukan hanya header, diimpor.CNCopyCurrentNetworkInfo
mengembalikan informasi yang berguna; jika tidak kembalinil
. Lihat: stackoverflow.com/questions/56583650/…Ini versi ARC yang dibersihkan, berdasarkan pada kode @ elsurudo:
sumber
UPDATE UNTUK iOS 10 dan lebih tinggi
CNCopySupportedInterfaces tidak lagi ditinggalkan di iOS 10. ( Referensi API )
Anda perlu mengimpor SystemConfiguration / CaptiveNetwork.h dan menambahkan SystemConfiguration.framework ke Pustaka Tertaut target Anda (dalam tahap pembuatan).
Berikut ini cuplikan kode dalam swift (Jawaban RikiRiocma) :
( Penting: CNCopySupportedInterfaces mengembalikan nol pada simulator.)
Untuk Objective-c, lihat jawaban Esad di sini dan di bawah
PEMBARUAN UNTUK iOS 9
Pada iOS 9 Captive Network sudah usang *. ( sumber )
* Tidak lagi ditinggalkan di iOS 10, lihat di atas.
Disarankan Anda menggunakan NEHotspotHelper ( sumber )
Anda perlu mengirim email ke apple di [email protected] dan meminta hak. ( sumber )
Kode Contoh ( Bukan kode saya. Lihat jawaban Pablo A ):
Catatan: Yup, mereka mencela CNCopySupportedInterfaces di iOS 9 dan membalikkan posisi mereka di iOS 10. Saya berbicara dengan insinyur jaringan Apple dan pembalikan itu terjadi setelah begitu banyak orang yang mengajukan Radars dan berbicara tentang masalah ini di forum Pengembang Apple.
sumber
Ini berfungsi untuk saya di perangkat (bukan simulator). Pastikan Anda menambahkan kerangka konfigurasi sistem.
sumber
Kode ini berfungsi dengan baik untuk mendapatkan SSID.
Dan ini hasilnya:
}
sumber
Jika Anda menjalankan iOS 12, Anda perlu melakukan langkah ekstra. Saya telah berjuang untuk membuat kode ini berfungsi dan akhirnya menemukan ini di situs Apple: "Penting Untuk menggunakan fungsi ini di iOS 12 dan yang lebih baru, aktifkan kapabilitas Akses Informasi WiFi untuk aplikasi Anda di Xcode. Ketika Anda mengaktifkan kemampuan ini, Xcode secara otomatis menambahkan hak Akses Informasi WiFi ke file hak dan ID Aplikasi Anda. " https://developer.apple.com/documentation/systemconfiguration/1614126-cncopycurrentnetworkinfo
sumber
Lihat CNCopyCurrentNetworkInfo di CaptiveNetwork: http://developer.apple.com/library/ios/#documentation/SystemConfiguration/Reference/CaptiveNetworkRef/Reference/reference.html .
sumber
Inilah versi singkat & manis Swift.
Ingatlah untuk menautkan dan mengimpor Kerangka Kerja:
Tetapkan metode:
Panggil metode ketika Anda membutuhkannya:
Seperti disebutkan di tempat lain, ini hanya berfungsi pada iDevice Anda. Ketika tidak menggunakan WiFi, metode ini akan mengembalikan nol - karenanya opsional.
sumber
Untuk iOS 13
Mulai dari iOS 13 aplikasi Anda juga membutuhkan akses Lokasi Inti untuk menggunakan
CNCopyCurrentNetworkInfo
fungsi kecuali jika mengkonfigurasi jaringan saat ini atau memiliki konfigurasi VPN:Jadi inilah yang Anda butuhkan (lihat dokumentasi apel ):
- Tautkan
CoreLocation.framework
perpustakaan- Tambahkan
location-services
sebagaiUIRequiredDeviceCapabilities
Kunci / Nilai di Info.plist- Tambahkan
NSLocationWhenInUseUsageDescription
Kunci / Nilai di Info.plist yang menjelaskan mengapa aplikasi Anda memerlukan Lokasi Inti- Tambahkan "Akses WiFi Hak informasi "untuk aplikasi Anda
Sekarang sebagai contoh Objective-C, periksa dulu apakah akses lokasi telah diterima sebelum membaca info jaringan menggunakan
CNCopyCurrentNetworkInfo
:sumber