Ի՞նչ տեսակների թույլտվություններ կան 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) և iOS-ի 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>
Կարևոր է՝ թույլտվությունները խնդրել համապատասխան պահին՝ այն ֆունկցիան օգտագործելու ժամանակ, որը պահանջում է թույլտվությունը, որպեսզի չստեղծվի բացասական օգտագործողի փորձ։