Flutter uygulamalarında hangi izin türleri vardır?
sobes.tech yapay zeka
AI'dan gelen yanıt
Flutter uygulamalarında izinler, cihazın işletim sistemi (Android veya iOS) tarafından yönetilir. Flutter, bu izinleri istemek ve doğrulamak için platformun API'lerine erişim sağlar.
Ana izin türleri:
- Kurulum zamanı izinleri (Install-time permissions): Uygulama yüklenirken otomatik olarak verilir. Çalışma sırasında kullanıcılardan açıkça izin istemez. Android'de
normalvesignaturekategorilerine aittir. - Çalışma zamanı izinleri (Runtime permissions): Konum, kamera, mikrofon, kişiler ve dosyalar gibi en önemli ve hassas izinler. Uygulama çalışırken kullanıcının açık onayını gerektirir. Kullanıcı bu izni verebilir veya reddedebilir. Android'de
dangerouskategorisine aittir. - Özel izinler (Special permissions): Kullanıcıyla özel etkileşim gerektiren izinler, örneğin diğer pencerelerin üzerine çizim yapma izni (
ACTION_MANAGE_OVERLAY_PERMISSION) veya sistem ayarlarını değiştirme izni (WRITE_SETTINGS).
Flutter, izinlerle etkileşim kurmak ve API'leri kullanmak için eklentiler kullanır. En yaygın eklenti permission_handlerdır.
permission_handler ile çalışırken aşağıdaki izin durumları kullanılır:
granted: İzin verildi.denied: İzin reddedildi (yeniden istenebilir).restricted: Platform tarafından kısıtlandı.permanentlyDenied: İzin kalıcı olarak reddedildi, kullanıcının uygulama ayarlarına yönlendirilmesi gerekir.limited: Kısmi izin verildi (örneğin, iOS'ta sadece seçili fotoğraflara erişim).
Kamera erişimi için izin isteme örneği:
import 'package:permission_handler/permission_handler.dart';
// İzin istemek için asenkron fonksiyon
Future<void> requestCameraPermission() async {
// İzin durumunu al
var status = await Permission.camera.status;
// Eğer izin henüz verilmediyse
if (status.isDenied) {
// İzni iste
status = await Permission.camera.request();
// İstek sonrası durumu kontrol et
if (status.isGranted) {
// İzin verildi, kamerayı kullanabilirsin
print('Kamera izni verildi');
} else if (status.isPermanentlyDenied) {
// İzin kalıcı olarak reddedildi, kullanıcıyı ayarlara yönlendir
print('Kamera izni kalıcı olarak reddedildi, ayarları aç');
openAppSettings(); // permission_handler'dan ayarları açma fonksiyonu
} else {
// İzin reddedildi, tekrar istenebilir
print('Kamera izni reddedildi');
}
} else if (status.isGranted) {
// Zaten izin verilmiş
print('Kamera izni zaten verildi');
}
}
Android için AndroidManifest.xml ve iOS için Info.plist dosyalarına uygun izinleri eklemek önemlidir.
AndroidManifest.xml örneği:
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Kamera erişimi izni -->
<uses-permission android:name="android.permission.CAMERA"/>
<application
...>
<!-- Aktiviteleriniz -->
</application>
</manifest>
Info.plist dosyasına izin kullanım açıklaması ekleme örneği:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
...
<!-- Kamera kullanım nedeni açıklaması -->
<key>NSCameraUsageDescription</key>
<string>Bu uygulama, fotoğraf çekmek için kameranızı kullanır.</string>
...
</dict>
</plist>
İzinleri, ihtiyaç duyulan fonksiyon kullanılırken istemek, kullanıcı deneyimini olumsuz etkilememek için önemlidir.