Sobes.tech
Junior

Milyen jogosultságtípusok léteznek Flutter alkalmazásokban?

sobes.tech MI

Válasz az MI-től

A Flutter alkalmazások engedélyeit az eszköz operációs rendszere (Android vagy iOS) kezeli. A Flutter hozzáférést biztosít a platform API-hoz az engedélyek kéréséhez és ellenőrzéséhez.

A fő engedélytípusok:

  • Telepítési idő engedélyek (Install-time permissions): Automatikusan megadódnak az alkalmazás telepítésekor. Nem igényelnek kifejezett kérdést a felhasználótól az alkalmazás futása közben. Androidon a normal és signature kategóriákhoz tartoznak.
  • Futási idejű engedélyek (Runtime permissions): A legfontosabb és legérzékenyebb engedélyek, mint például a hely, kamera, mikrofon, kapcsolatok és fájlok hozzáférése. Kifejezett kérés szükséges az alkalmazás futása közben. A felhasználó adhat vagy elutasíthat ilyen engedélyt. Androidon a dangerous kategóriába tartoznak.
  • Speciális engedélyek (Special permissions): Olyan engedélyek, amelyek külön interakciót igényelnek a felhasználóval a megadásukhoz, például az overlay (átfedés) engedély (ACTION_MANAGE_OVERLAY_PERMISSION) vagy a rendszerbeállítások írási engedélye (WRITE_SETTINGS).

A Flutter pluginokat használ az API-kkal való kommunikációhoz és az engedélyek kezeléséhez. A legelterjedtebb plugin a permission_handler.

A permission_handler használatakor az alábbi engedélyállapotokat használjuk:

  • granted: Az engedély megadva.
  • denied: Az engedély elutasítva (újra kérhető).
  • restricted: Az engedély platform által korlátozott.
  • permanentlyDenied: Az engedély véglegesen elutasítva, a felhasználót az alkalmazás beállításaira kell irányítani.
  • limited: Az engedély részben megadva (például csak kiválasztott fényképekhez iOS-en).

Példa engedély kérésére a kamera eléréséhez:

import 'package:permission_handler/permission_handler.dart';

// Aszinkron függvény az engedély kéréséhez
Future<void> requestCameraPermission() async {
  // Az engedély állapotának lekérése
  var status = await Permission.camera.status;
  // Ha az engedély még nincs megadva
  if (status.isDenied) {
    // Kérjük az engedélyt
    status = await Permission.camera.request();
    // Ellenőrizzük a státuszt a kérés után
    if (status.isGranted) {
      // Az engedély megadva, használhatjuk a kamerát
      print('A kamerához való engedély megadva');
    } else if (status.isPermanentlyDenied) {
      // Az engedély véglegesen elutasítva, a felhasználót az beállításokra irányítjuk
      print('A kamerához való engedély véglegesen elutasítva, nyissa meg a beállításokat');
      openAppSettings(); // A permission_handler függvénye
    } else {
      // Az engedély elutasítva, de újra kérhető
      print('A kamerához való engedély elutasítva');
    }
  } else if (status.isGranted) {
    // Az engedély már megadva
    print('A kamerához való engedély már megadva');
  }
}

Az Android AndroidManifest.xml és az iOS Info.plist fájlokban megfelelő engedélyeket kell hozzáadni.

AndroidManifest.xml példája:

<manifest xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- Kamera hozzáférés engedélye -->
    <uses-permission android:name="android.permission.CAMERA"/>
    <application
        ...>
        <!-- Az aktivitásaid -->
    </application>
</manifest>

Az iOS Info.plist-be az engedély használatának leírását kell hozzáadni (futási időben szükséges):

<?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>
	...
	<!-- A kamera használatának indoklása -->
	<key>NSCameraUsageDescription</key>
	<string>Ez az alkalmazás a fényképezéshez használja a kamerát.</string>
	...
</dict>
</plist>

Fontos, hogy a megfelelő pillanatban kérje az engedélyeket, amikor a funkció, amelyhez szükséges, használatban van, hogy elkerülje a negatív felhasználói élményt.