Flutter 앱에서 스크린샷을 차단하는 방법

2736 단어 dartmobileflutter
보안 수준이 높은 앱을 빌드할 때 사용자가 스크린샷을 찍지 못하도록 하는 것이 필수적일 수 있습니다. Android에서는 매우 간단하지만 iOS 부분에서는 약간 까다로워집니다. 나는 몇 달 전에 이 문제에 직면한 것을 기억하고 몇 시간 동안 몇 시간 동안 StackOverflow 답변을 스캔했습니다. iOS 부분에 대한 솔루션인 것을 우연히 발견했을 때 나는 좌절감을 느꼈습니다.

안드로이드의 경우:
  • mainActivity.(java/tk) 내에서 다음을 가져옵니다.

  • import io.flutter.embedding.android.FlutterFragmentActivity
    import io.flutter.embedding.engine.FlutterEngine
    import io.flutter.plugins.GeneratedPluginRegistrant
    import android.view.WindowManager.LayoutParams
    


  • 콘텐츠를 다음으로 바꿉니다.

  • class MainActivity: FlutterFragmentActivity() {
        override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
            window.addFlags(LayoutParams.FLAG_SECURE)
            GeneratedPluginRegistrant.registerWith(flutterEngine)
        }
    }
    


    이것은 Android에서 수행합니다.

    iOS의 경우:
  • AppDelegate.swift에서 아래와 같이 창 확장을 만들어야 합니다.

  •   extension UIWindow {
      func makeSecure() {
          let field = UITextField()
          field.isSecureTextEntry = true
          self.addSubview(field)
          field.centerYAnchor.constraint(equalTo: self.centerYAnchor).isActive = true
          field.centerXAnchor.constraint(equalTo: self.centerXAnchor).isActive = true
          self.layer.superlayer?.addSublayer(field.layer)
          field.layer.sublayers?.first?.addSublayer(self.layer)
        }
      }
    


    그런 다음 애플리케이션 함수에서 새 창 확장을 호출합니다.

    self.window.makeSecure()
    


    AppDelegate.swift는 다음과 같아야 합니다.

    import UIKit
    import Flutter
    
    @UIApplicationMain
    @objc class AppDelegate: FlutterAppDelegate {
      override func application(
        _ application: UIApplication,
        didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
      ) -> Bool {
        self.window.makeSecure()
        GeneratedPluginRegistrant.register(with: self)
        return super.application(application, didFinishLaunchingWithOptions: launchOptions)
      }
    }
    
      extension UIWindow {
      func makeSecure() {
          let field = UITextField()
          field.isSecureTextEntry = true
          self.addSubview(field)
          field.centerYAnchor.constraint(equalTo: self.centerYAnchor).isActive = true
          field.centerXAnchor.constraint(equalTo: self.centerXAnchor).isActive = true
          self.layer.superlayer?.addSublayer(field.layer)
          field.layer.sublayers?.first?.addSublayer(self.layer)
        }
      }
    


    출처: stackoverflow answer

    읽어주셔서 감사합니다. 도움이 되었기를 바랍니다.

    좋은 웹페이지 즐겨찾기