Sobes.tech
Junior

Kādi ir Flutter lietojumprogrammās pieejamie atļauju tipi?

sobes.tech AI

Atbilde no AI

Flutter lietojumprogramu atļaujas pārvalda ierīces operētājsistēma (Android vai iOS). Flutter nodrošina piekļuvi attiecīgajiem API, lai pieprasītu un pārbaudītu šīs atļaujas:

Galvenie atļauju veidi:

  • Instalēšanas laikā atļaujas (Install-time permissions): Automātiski piešķirtas instalēšanas laikā. Nepieciešams tieši pieprasīt lietotājam darbības laikā. Android tās pieder pie normal un signature kategorijām.
  • Darbības laikā atļaujas (Runtime permissions): Visbūtiskākās un jutīgākās atļaujas, piemēram, piekļuve atrašanās vietai, kamerai, mikrofonam, kontaktiem un failiem. Prasa tiešu pieprasījumu darbības laikā. Lietotājs var piešķirt vai noraidīt šādu atļauju. Android tās pieder pie dangerous kategorijas.
  • Īpašas atļaujas (Special permissions): Atļaujas, kas prasa īpašu lietotāja mijiedarbību, piemēram, atļauja zīmēt virs citiem logiem (ACTION_MANAGE_OVERLAY_PERMISSION) vai sistēmas iestatījumu rakstīšanas atļauja (WRITE_SETTINGS).

Flutter izmanto spraudņus, lai ar API sadarboties un pārvaldītu atļaujas. Visbiežāk izmantotais spraudnis — permission_handler.

Ar permission_handler tiek izmantoti šādi statusi:

  • granted: Atļauja piešķirta.
  • denied: Atļauja noraidīta (iespējams, atkārtoti pieprasīt).
  • restricted: Atļauja ir ierobežota platformas dēļ.
  • permanentlyDenied: Atļauja galīgi noraidīta, nepieciešams novirzīt lietotāju uz lietotnes iestatījumiem.
  • limited: Atļauja daļēji piešķirta (piemēram, piekļuve tikai izvēlētām fotogrāfijām iOS).

Piemērs atļaujas pieprasījumam:

import 'package:permission_handler/permission_handler.dart';

// Asinhrona funkcija atļaujas pieprasīšanai
Future<void> requestCameraPermission() async {
  // Statusa iegūšana
  var status = await Permission.camera.status;
  // Ja atļauja vēl nav piešķirta
  if (status.isDenied) {
    // Pieprasīt atļauju
    status = await Permission.camera.request();
    // Pārbaudīt statusu pēc pieprasījuma
    if (status.isGranted) {
      // Atļauja piešķirta, var izmantot kameru
      print('Kameras atļauja piešķirta');
    } else if (status.isPermanentlyDenied) {
      // Atļauja galīgi noraidīta, atvērt iestatījumus
      print('Kameras atļauja galīgi noraidīta, atveriet iestatījumus');
      openAppSettings(); // permission_handler funkcija
    } else {
      // Atļauja noraidīta, bet vēl var pieprasīt
      print('Kameras atļauja noraidīta');
    }
  } else if (status.isGranted) {
    // Atļauja jau ir piešķirta
    print('Kameras atļauja jau ir piešķirta');
  }
}

Jāpiekrīt atbilstošas atļaujas Android manifestam (android/app/src/main/AndroidManifest.xml) un Info.plist (ios/Runner/Info.plist):

Android AndroidManifest.xml:

<manifest xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- Pieejas kameras atļauja -->
    <uses-permission android:name="android.permission.CAMERA"/>
    <application
        ...>
        <!-- Jūsu aktivitātes -->
    </application>
</manifest>

iOS Info.plist:

<?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>
	...
	<!-- Paskaidrojums par kameras izmantošanas iemeslu -->
	<key>NSCameraUsageDescription</key>
	<string>Šī lietotne izmanto jūsu kameru fotoattēlu uzņemšanai.</string>
	...
</dict>
</plist>

Svarīgi pieprasīt atļauju atbilstošajā brīdī, kad funkcija, kas prasa atļauju, tiek izmantota, lai izvairītos no negatīvas lietotāja pieredzes.