რა ტიპის დაშვებები არსებობს 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>
მნიშვნელოვანია, ნებართვები მოთხოვნათ შესაბამის დროს, როდესაც ფუნქცია საჭიროებს ნებართვას, რათა თავიდან აიცილოთ უარყოფითი მომხმარებლის გამოცდილება.