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) և 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>

Կարևոր է՝ թույլտվությունները խնդրել համապատասխան պահին՝ այն ֆունկցիան օգտագործելու ժամանակ, որը պահանջում է թույլտվությունը, որպեսզի չստեղծվի բացասական օգտագործողի փորձ։