Sobes.tech
Junior

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 normal ve signature kategorilerine 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 dangerous kategorisine 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.