Sobes.tech
Junior

რა ტიპის დაშვებები არსებობს Flutter-ის აპლიკაციებში?

sobes.tech AI

პასუხი AI-სგან

Flutter-ის აპლიკაციების ნებართვები მართავს მოწყობილობის ოპერაციულ სისტემას (Android ან iOS). Flutter უზრუნველყოფს შესაბამის API-ებს ამ ნებართვების მოთხოვნისა და შემოწმებისთვის:

ძირითადი ნებართვების ტიპები:

  • დაყენების დროის ნებართვები (Install-time permissions): ავტომატურად მიენიჭება აპლიკაციის ინსტალაციის დროს. არ საჭიროებს გამოხატულ მოთხოვნას აპლიკაციის მუშაობის დროს. Android-ში მიეკუთვნება normal და signature კატეგორიებს:
  • მუშაობის დროის ნებართვები (Runtime permissions): ყველაზე მნიშვნელოვანი და მგრძნობიარე ნებართვები, როგორიცაა მდებარეობის, კამერის, მიკროფონის, კონტაქტებისა და ფაილების წვდომა. საჭიროებს გამოხატულ მოთხოვნას აპლიკაციის მუშაობის დროს. მომხმარებელი შეუძლია მისცეს ან უარყოს ეს ნებართვა. Android-ში მიეკუთვნება dangerous კატეგორიას:
  • სპეციალური ნებართვები (Special permissions): ნებართვები, რომლებიც მოითხოვს განსაკუთრებულ ურთიერთქმედებას მომხმარებელთან, მაგალითად, სხვა ფანჯრების ზედაპირზე ხატვის ნებართვა (ACTION_MANAGE_OVERLAY_PERMISSION) ან სისტემური პარამეტრების ჩაწერის ნებართვა (WRITE_SETTINGS).

Flutter იყენებს პლაგინებს API-თან ურთიერთქმედებისთვის და ნებართვების მართვისთვის. ყველაზე გავრცელებული პლაგინი — permission_handler:

permission_handler-თან მუშაობისას გამოიყენება შემდეგი სტატუსები:

  • granted: ნებართვა გაცემულია.
  • denied: ნებართვა უარყოფილია (შესაძლებელია კვლავ მოთხოვნა).
  • restricted: ნებართვა შეზღუდულია პლატფორმის მიერ.
  • permanentlyDenied: ნებართვა საბოლოოდ უარყოფილია, საჭიროა მომხმარებლის გადამისამართება აპლიკაციის პარამეტრებში.
  • limited: ნებართვა ნაწილობრივ გაცემულია (მაგალითად, მხოლოდ შერჩეული ფოტოების წვდომა iOS-ზე).

მაგალითი ნებართვის მოთხოვნის:

import 'package:permission_handler/permission_handler.dart';

// ასინქრონული ფუნქცია ნებართვის მოთხოვნისთვის
Future<void> requestCameraPermission() async {
  // სტატუსის მიღება
  var status = await Permission.camera.status;
  // თუ ნებართვა ჯერ არ გაცემული
  if (status.isDenied) {
    // მოთხოვნა ნებართვისთვის
    status = await Permission.camera.request();
    // სტატუსის შემოწმება მოთხოვნის შემდეგ
    if (status.isGranted) {
      // ნებართვა გაცემულია, შეგიძლიათ გამოიყენოთ კამერა
      print('კამერის ნებართვა გაცემულია');
    } else if (status.isPermanentlyDenied) {
      // ნებართვა საბოლოოდ უარყოფილია, გახსენით პარამეტრები
      print('კამერის ნებართვა საბოლოოდ უარყოფილია, გახსენით პარამეტრები');
      openAppSettings(); // permission_handler-ის ფუნქცია პარამეტრებში გადასასვლელად
    } else {
      // ნებართვა უარყოფილია, მაგრამ შეიძლება კვლავ მოთხოვნა
      print('კამერის ნებართვა უარყოფილია');
    }
  } else if (status.isGranted) {
    // ნებართვა უკვე გაცემულია
    print('კამერის ნებართვა უკვე გაცემულია');
  }
}

უნდა დაამატოთ შესაბამისი ნებართვები Android-ის მანიაფესტში (android/app/src/main/AndroidManifest.xml) და Info.plist-ში (ios/Runner/Info.plist):

მაგალითად, ნებართვის დამატება AndroidManifest.xml-ში:

<manifest xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- კამერის წვდომის ნებართვა -->
    <uses-permission android:name="android.permission.CAMERA"/>
    <application
        ...>
        <!-- თქვენი აქტივობები -->
    </application>
</manifest>

და 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>
	...
	<!-- კამერის გამოყენების მიზეზის აღწერა -->
	<key>NSCameraUsageDescription</key>
	<string>ეს აპლიკაცია იყენებს თქვენს კამერას ფოტოების გადაღებისთვის.</string>
	...
</dict>
</plist>

მნიშვნელოვანია, ნებართვები მოთხოვნათ შესაბამის დროს, როდესაც ფუნქცია საჭიროებს ნებართვას, რათა თავიდან აიცილოთ უარყოფითი მომხმარებლის გამოცდილება.