Sobes.tech
Junior

Welche Arten von Berechtigungen gibt es in Flutter-Anwendungen?

sobes.tech KI

Antwort von AI

Berechtigungen in Flutter-Anwendungen werden vom Betriebssystem des Geräts (Android oder iOS) verwaltet. Flutter bietet Zugriff auf die entsprechenden Plattform-APIs, um diese Berechtigungen anzufordern und zu überprüfen.

Haupttypen von Berechtigungen:

  • Installationszeit-Berechtigungen (Install-time permissions): Werden automatisch bei der Installation der Anwendung gewährt. Erfordern keine explizite Anfrage beim Benutzer während der Laufzeit. Unter Android gehören sie zu den Kategorien normal und signature.
  • Laufzeit-Berechtigungen (Runtime permissions): Die wichtigsten und sensibelsten Berechtigungen, wie Zugriff auf Standort, Kamera, Mikrofon, Kontakte und Dateien. Erfordern eine explizite Anfrage beim Benutzer während der Laufzeit. Der Benutzer kann diese Berechtigung gewähren oder ablehnen. Unter Android gehören sie zur Kategorie dangerous.
  • Spezielle Berechtigungen (Special permissions): Berechtigungen, die eine besondere Interaktion mit dem Benutzer erfordern, um gewährt zu werden, z.B. die Erlaubnis, über anderen Fenstern zu zeichnen (ACTION_MANAGE_OVERLAY_PERMISSION) oder Systemeinstellungen zu ändern (WRITE_SETTINGS).

Flutter verwendet Plugins, um mit der Plattform-API zu interagieren und Berechtigungen zu verwalten. Das am häufigsten verwendete Plugin ist permission_handler.

Bei der Arbeit mit permission_handler werden folgende Berechtigungsstatus verwendet:

  • granted: Berechtigung erteilt.
  • denied: Berechtigung abgelehnt (kann erneut angefragt werden).
  • restricted: Berechtigung durch die Plattform eingeschränkt.
  • permanentlyDenied: Berechtigung endgültig abgelehnt, der Benutzer muss zu den App-Einstellungen geleitet werden.
  • limited: Berechtigung teilweise erteilt (z.B. Zugriff nur auf ausgewählte Fotos auf iOS).

Beispiel für die Anforderung einer Berechtigung für den Zugriff auf die Kamera:

import 'package:permission_handler/permission_handler.dart';

// Asynchrone Funktion zur Anforderung der Berechtigung
Future<void> requestCameraPermission() async {
  // Status der Berechtigung abrufen
  var status = await Permission.camera.status;
  // Wenn die Berechtigung noch nicht erteilt wurde
  if (status.isDenied) {
    // Berechtigung anfordern
    status = await Permission.camera.request();
    // Status nach der Anfrage überprüfen
    if (status.isGranted) {
      // Berechtigung erteilt, Kamera kann verwendet werden
      print('Kameraberechtigung erteilt');
    } else if (status.isPermanentlyDenied) {
      // Berechtigung dauerhaft abgelehnt, Benutzer zu den Einstellungen leiten
      print('Kameraberechtigung dauerhaft abgelehnt, Einstellungen öffnen');
      openAppSettings(); // Funktion von permission_handler zum Öffnen der Einstellungen
    } else {
      // Berechtigung abgelehnt, kann erneut angefragt werden
      print('Kameraberechtigung abgelehnt');
    }
  } else if (status.isGranted) {
    // Berechtigung bereits erteilt
    print('Kameraberechtigung bereits erteilt');
  }
}

Es ist wichtig, die entsprechenden Berechtigungen in den Manifest-Dateien für Android (android/app/src/main/AndroidManifest.xml) und in Info.plist für iOS (ios/Runner/Info.plist) hinzuzufügen.

Beispiel für die Hinzufügung einer Berechtigung in AndroidManifest.xml:

<manifest xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- Berechtigung für den Zugriff auf die Kamera -->
    <uses-permission android:name="android.permission.CAMERA"/>
    <application
        ...>
        <!-- Deine Aktivitäten -->
    </application>
</manifest>

Beispiel für die Hinzufügung einer Beschreibung für die Verwendung der Berechtigung in Info.plist (für iOS, erforderlich für Laufzeitberechtigungen):

<?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>
	...
	<!-- Beschreibung des Grundes für die Verwendung der Kamera -->
	<key>NSCameraUsageDescription</key>
	<string>Diese Anwendung verwendet Ihre Kamera, um Fotos aufzunehmen.</string>
	...
</dict>
</plist>

Es ist wichtig, Berechtigungen zum passenden Zeitpunkt anzufordern, wenn die Funktion, die sie benötigt, genutzt wird, um eine negative Nutzererfahrung zu vermeiden.