Sobes.tech
Junior

Flutter tətbiqlərində hansı icazə növləri mövcuddur?

sobes.tech Süni İntellekt

AI-dan cavab

Flutter tətbiqlərində icazələr cihazın əməliyyat sisteminə (Android və ya iOS) aiddir. Flutter müvafiq platforma API-lərinə çıxış imkanı verir ki, bu da bu icazələrin sorğulanması və yoxlanması üçün istifadə olunur.

Əsas icazə növləri:

  • Quraşdırma zamanı icazələr (Install-time permissions): Tətbiq quraşdırıldıqda avtomatik verilir. Tətbiq işləyərkən istifadəçidən açıq sorğu tələb etmir. Android-də normalsignature kateqoriyalarına aiddir.
  • İş vaxtı icazələr (Runtime permissions): Ən vacib və həssas icazələr, məsələn, yer, kamera, mikrofon, əlaqələr və fayllara giriş. Tətbiq işləyərkən istifadəçidən açıq sorğu tələb edir. İstifadəçi bu icazəni verə və ya rədd edə bilər. Android-də dangerous kateqoriyasına aiddir.
  • Xüsusi icazələr (Special permissions): İstifadəçi ilə xüsusi qarşılıqlı əlaqə tələb edən icazələr, məsələn, digər pəncərələr üzərində çəkmək üçün icazə (ACTION_MANAGE_OVERLAY_PERMISSION) və ya sistem parametrlərini dəyişmək üçün icazə (WRITE_SETTINGS).

Flutter platforma API-ləri ilə qarşılıqlı əlaqə və icazələrin idarə olunması üçün plugin-lərdən istifadə edir. Ən çox istifadə olunan plugin permission_handler-dır.

permission_handler istifadə edilərkən aşağıdakı icazə statusları istifadə olunur:

  • granted: İcazə verilib.
  • denied: İcazə rədd olunub (yenidən soruşula bilər).
  • restricted: Platforma tərəfindən məhdudlaşdırılıb.
  • permanentlyDenied: İcazə tamamilə rədd olunub, istifadəçi tətbiq parametrlərinə yönəldilməlidir.
  • limited: İcazə qismən verilib (məsələn, yalnız seçilmiş şəkillərə giriş iOS-də).

Kamera girişinə icazə sorğulama nümunəsi:

import 'package:permission_handler/permission_handler.dart';

// Asinxron funksiya icazənin sorğulanması üçün
Future<void> requestCameraPermission() async {
  // İcazə statusunu alırıq
  var status = await Permission.camera.status;
  // Əgər icazə hələ verilməyibsə
  if (status.isDenied) {
    // İcazəni soruşuruq
    status = await Permission.camera.request();
    // Sorğudan sonra statusu yoxlayırıq
    if (status.isGranted) {
      // İcazə verilib, kameradan istifadə edə bilərik
      print('Kamera icazəsi verilib');
    } else if (status.isPermanentlyDenied) {
      // İcazə tamamilə rədd olunub, istifadəçini parametrlərə yönəldirik
      print('Kamera icazəsi tamamilə rədd olunub, parametrləri açmaq lazımdır');
      openAppSettings(); // permission_handler-dən funksiya
    } else {
      // İcazə rədd olunub, yenidən soruşula bilər
      print('Kamera icazəsi rədd olunub');
    }
  } else if (status.isGranted) {
    // İcazə artıq verilib
    print('Kamera icazəsi artıq verilib');
  }
}

Android üçün AndroidManifest.xml və iOS üçün Info.plist fayllarına müvafiq icazələri əlavə etmək vacibdir.

AndroidManifest.xml-ə icazə əlavə nümunəsi:

<manifest xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- Kamera üçün icazə -->
    <uses-permission android:name="android.permission.CAMERA"/>
    <application
        ...>
        <!-- Sizin fəaliyyətləriniz -->
    </application>
</manifest>

Info.plist-ə icazə istifadə izahını əlavə nümunəsi (iOS üçün, iş vaxtı icazələri üçün tələb olunur):

<?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 istifadə səbəbinin izahı -->
	<key>NSCameraUsageDescription</key>
	<string>Bu tətbiq şəkil çəkmək üçün kameranızı istifadə edir.</string>
	...
</dict>
</plist>

İstifadəçi təcrübəsini pozmamaq üçün icazələri müvafiq funksiyadan istifadə etdiyiniz zaman sorğulamaq vacibdir.