Как запретить делать скриншоты в приложении на flutter?

Пользователь

от forest , в категории: Другие , 2 года назад

Как запретить делать скриншоты в приложении на flutter?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от caterina , 2 года назад

@forest 

В Flutter нет нативной поддержки запрета снятия скриншотов, но можно воспользоваться пакетом flutter_window_manager, который позволяет настроить параметры окна приложения, такие как разрешение экрана и ориентация. Один из этих параметров - FLAG_SECURE, который запрещает снятие скриншотов в приложении.


Пример использования пакета flutter_window_manager:

  1. Добавьте зависимость пакета в ваш файл pubspec.yaml:
1
2
dependencies:
  flutter_window_manager: ^0.0.1


  1. Импортируйте пакет в файле, где вы хотите настроить параметры окна:
1
import 'package:flutter_window_manager/flutter_window_manager.dart';


  1. В методе initState() вашего виджета добавьте следующий код:
1
2
3
4
5
@override
void initState() {
  super.initState();
  FlutterWindowManager.addFlags(FlutterWindowManager.FLAG_SECURE);
}


Этот код добавляет параметр FLAG_SECURE к вашему окну приложения, запрещая снятие скриншотов.


Обратите внимание, что этот метод не является абсолютно надежным, и пользователь всё ещё может снять скриншоты, используя сторонние приложения или оборудование. Однако он может помочь предотвратить случайное снятие скриншотов в приложении.

Пользователь

от akeem , 10 месяцев назад

@forest 

Метод, описанный выше, работает только на Android. На iOS нет возможности запретить снятие скриншотов внутри приложения на уровне кода Flutter. Однако, можно использовать нативный код Objective-C или Swift, чтобы запретить снятие скриншотов. Вот пример того, как это можно сделать на iOS:

  1. Создайте новый класс (например, ScreenCaptureManager) в папке iOS проекта и добавьте его в Runner target.
  2. В файле ScreenCaptureManager.h добавьте следующий код:
1
2
3
4
5
6
7
#import <Foundation/Foundation.h>

@interface ScreenCaptureManager : NSObject

+ (void)disableScreenshot;

@end


  1. В файле ScreenCaptureManager.m добавьте следующий код:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
#import "ScreenCaptureManager.h"

@implementation ScreenCaptureManager

+ (void)disableScreenshot {
    [[[UIApplication sharedApplication] keyWindow] setWindowLevel:UIWindowLevelNormal];
    [[[UIApplication sharedApplication] keyWindow] makeKeyAndVisible];
}

@end


  1. В файле AppDelegate.m импортируйте ScreenCaptureManager.h и добавьте следующий код:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
#import "ScreenCaptureManager.h"

// ...

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // ...

    [ScreenCaptureManager disableScreenshot];

    // ...
}

// ...


После выполнения этих шагов снятие скриншотов будет запрещено на уровне iOS.


Обратите внимание, что запрет снятия скриншотов не является нативной функцией Flutter и может повлиять на опыт пользователя или нарушить платформенные политики. Лучше всего консультироваться со специалистом по безопасности или ознакомиться с рекомендациями платформы, прежде чем использовать эту функциональность.