Sobes.tech
Junior

Welke soorten machtigingen bestaan er in Flutter-apps?

sobes.tech AI

Antwoord van AI

Toestemmingen in Flutter-apps worden beheerd door het besturingssysteem van het apparaat (Android of iOS). Flutter biedt toegang tot de relevante platform-API's om deze toestemmingen aan te vragen en te controleren.

Belangrijkste typen toestemmingen:

  • Installatietijd toestemmingen (Install-time permissions): Worden automatisch verleend bij installatie van de app. Vereisen geen expliciete aanvraag aan de gebruiker tijdens het gebruik. Op Android behoren ze tot de categorieën normal en signature.
  • Runtime toestemmingen (Runtime permissions): De belangrijkste en meest gevoelige toestemmingen, zoals toegang tot locatie, camera, microfoon, contacten en bestanden. Vereisen een expliciete aanvraag aan de gebruiker tijdens het gebruik. De gebruiker kan deze toestemmingen verlenen of weigeren. Op Android behoren ze tot de categorie dangerous.
  • Speciale toestemmingen (Special permissions): Toestemmingen die een speciale interactie met de gebruiker vereisen om toe te staan, zoals het tekenen boven andere vensters (ACTION_MANAGE_OVERLAY_PERMISSION) of het wijzigen van systeeminstellingen (WRITE_SETTINGS).

Flutter gebruikt plugins om te communiceren met de API van het platform en toestemmingen te beheren. De meest gebruikte plugin is permission_handler.

Bij gebruik van permission_handler worden de volgende toestemmingsstatussen gebruikt:

  • granted: Toestemming verleend.
  • denied: Toestemming geweigerd (kan opnieuw worden aangevraagd).
  • restricted: Toestemming beperkt door het platform.
  • permanentlyDenied: Toestemming definitief geweigerd, gebruiker moet naar de app-instellingen worden geleid.
  • limited: Toestemming gedeeltelijk verleend (bijvoorbeeld alleen toegang tot geselecteerde foto's op iOS).

Voorbeeld van het aanvragen van toestemming voor toegang tot de camera:

import 'package:permission_handler/permission_handler.dart';

// Asynchrone functie om toestemming aan te vragen
Future<void> requestCameraPermission() async {
  // Status van de toestemming ophalen
  var status = await Permission.camera.status;
  // Als de toestemming nog niet is verleend
  if (status.isDenied) {
    // Toestemming aanvragen
    status = await Permission.camera.request();
    // Status na aanvraag controleren
    if (status.isGranted) {
      // Toestemming verleend, camera gebruiken
      print('Camera toestemming verleend');
    } else if (status.isPermanentlyDenied) {
      // Toestemming permanent geweigerd, gebruiker naar instellingen leiden
      print('Camera toestemming permanent geweigerd, instellingen openen');
      openAppSettings(); // functie van permission_handler om instellingen te openen
    } else {
      // Toestemming geweigerd, opnieuw vragen mogelijk
      print('Camera toestemming geweigerd');
    }
  } else if (status.isGranted) {
    // Toestemming al verleend
    print('Camera toestemming al verleend');
  }
}

Het is belangrijk om de juiste toestemmingen toe te voegen aan de manifestbestanden voor Android (android/app/src/main/AndroidManifest.xml) en in Info.plist voor iOS (ios/Runner/Info.plist).

Voorbeeld van het toevoegen van toestemming in AndroidManifest.xml:

<manifest xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- Toestemming voor toegang tot de camera -->
    <uses-permission android:name="android.permission.CAMERA"/>
    <application
        ...>
        <!-- Jouw activiteiten -->
    </application>
</manifest>

Voorbeeld van het toevoegen van een beschrijving van het gebruik van toestemming in Info.plist (voor iOS, vereist voor runtime toestemmingen):

<?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>
	...
	<!-- Beschrijving van de reden voor het gebruik van de camera -->
	<key>NSCameraUsageDescription</key>
	<string>Deze app gebruikt je camera om foto's te maken.</string>
	...
</dict>
</plist>

Het is belangrijk om toestemmingen op het juiste moment aan te vragen wanneer de functie die ze vereist wordt gebruikt, om een negatieve gebruikerservaring te voorkomen.