パッケージ、リポジトリ、アプリカテゴリを検索

パッケージ詳細v0.2.0

disable_screenshots

スクリーンショットを無効にするための3つの関連機能を提供します。それぞれは、スクリーンショットのモニタリング、グローバルな透かしの追加、スクリーンショットの無効化(Androidのみ対応)です。

AndroidiOS
30日間ダウンロード
61
いいね数
33
Pub ポイント
115

パッケージをインストール

flutter pub add disable_screenshots

パッケージ概要

公開情報に基づく選定ガイドです。参考としてご利用ください。

disable_screenshots パッケージは、不正なスクリーンショットを防ぐことでアプリのセキュリティを強化するための3つの関数を提供しています。スクリーンショットが撮影されたことを検出するためのスクリーンショットモニタリングを有効にし、共有を妨げるためにグローバルな透かしを追加できるほか、Androidデバイスでのスクリーンショットを無効にできます。iOS対応は記載されていますが、実際のスクリーンショット無効化機能はAndroidのみに限定されています。このパッケージはFlutter Pub経由で簡単に統合でき、機密情報を扱うアプリに適しています。その機能は、高セキュリティ環境におけるユーザーのプライバシーとデータ整合性を保護することを目的としています。

用途

  • 機密なアプリコンテンツの保護
  • 金融または医療関連アプリケーションのセキュリティ確保
  • 不正な画面共有を防ぐ
  • デジタル著作権管理の強化
  • スクリーンショットの試行を監視する

主な機能

  • スクリーンショットのモニタリング
  • グローバルな透かしオーバーレイ
  • Android専用のスクリーンショット無効化
  • シンプルなFlutter統合
  • プライバシー重視のデザイン

適している対象

  • 機密データを含むアプリ
  • 著作権のある教材を備えた教育プラットフォーム
  • セキュアなバンキングまたはエンタープライズアプリ
  • デジタルメディアのコンテンツ保護
  • ユーザーのプライバシーを最優先する開発チーム

注意事項

  • iOS スクリーンショットの無効化機能なし
  • ウォーターマークはUIの美的感覚に影響を与える可能性があります
  • Android 固有の権限が必要です
  • 完全なスクリーンショットブロッキングのため Android 限定
  • 過剰に使用すると、ユーザー体験に影響を与える可能性があります

元の README

関連するソースリポジトリの README 原文のスナップショットです。最新の内容はリポジトリをご覧ください。

disable_screenshots

在Flutter开发中,有时我们需要对App的内容进行管控,避免敏感信息暴露,所以开发了这个插件。此插件提供三个禁用截屏的相关功能,分别是:截屏监控行为、全局添加水印、禁用截屏(仅支持Android)。

Getting Started

Add dependency
dependencies:
  disable_screenshots: 0.0.1 #latest version
功能演示

demo_gif

使用样例
class RootApp extends StatefulWidget {
  @override
  _RootAppState createState() => _RootAppState();
}

class _RootAppState extends State<RootApp> {
  // 初始化插件
  DisableScreenshots _plugin = DisableScreenshots();
  // 监控截屏行为的stream
  StreamSubscription<void> _screenshotsSubscription;
  int _screenshotsCount = 0;
  bool _disableScreenshots = false;

  @override
  void initState() {
    super.initState();
    _screenshotsSubscription = _plugin.onScreenShots.listen((event) {
      // 监控到截屏行为会回调到这里
      setState(() {
        _screenshotsCount++;
      });
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('禁止截屏'),
      ),
      body: Column(
        children: <Widget>[
          Center(
            child: Text("监控到截屏次数:$_screenshotsCount"),
          ),
          Center(
            child: Text(_disableScreenshots ? "禁止截屏状态" : "允许截屏状态"),
          ),
          RaisedButton(
              onPressed: () {
                // 添加默认样式的水印
                _plugin.addWatermark(context, "默认水印",
                    rowCount: 4, columnCount: 8);
              },
              child: Text("添加默认水印")),
          RaisedButton(
              onPressed: () {
                // 添加自定义widget当做水印
                _plugin.addCustomWatermark(context,
                    Watarmark(rowCount: 3, columnCount: 10, text: "自定义水印"));
              },
              child: Text("添加自定义水印")),
          RaisedButton(
              onPressed: () {
                // 移除水印
                _plugin.removeWatermark();
              },
              child: Text("删除水印")),
          RaisedButton(
              onPressed: () async {
                bool flag = !_disableScreenshots;
                // 禁用或允许截屏(只支持iOS)
                await _plugin.disableScreenshots(flag);
                setState(() {
                  _disableScreenshots = flag;
                });
              },
              child: Text(_disableScreenshots ? "允许截屏(仅android适用)" : "禁用截屏(仅android适用)")),
          RaisedButton(
              onPressed: () {
                Navigator.of(context).push(MaterialPageRoute(
                    builder: (_) => Scaffold(
                          appBar: AppBar(
                            title: Text("我是新页面"),
                          ),
                          body: Center(child: Text("new page")),
                        )));
              },
              child: Text("进入新页面"))
        ],
      ),
    );
  }

  @override
  void dispose() {
    super.dispose();
    //取消截屏监控可以调用cancel()方法
    if (_screenshotsSubscription != null) {
      _screenshotsSubscription.cancel();
    }
  }
}
已知问题
  1. 在老的flutter项目中,在iOS平台运行可能出现编译问题无法运行。这个是由于老的flutter项目里面没有使用到swift,所以没有briging文件,但是插件使用了swift,所以会编译失败,这种情况直接使用xcode在iOS项目中创建一个swift文件,会自动生成briding文件。
  2. 在某些安卓设备上(华为P30、Mi 10、三星Note10、OPPO reno3 Pro等),存在不能捕获截屏事件的问题,如果大家有解决方案,请提交pull request,谢谢!
其它

此Plugin的创建流程,可以参考博文如何创建一个Flutter Plugin

カテゴリー

ソースリポジトリ

このパッケージを使用しているプロジェクト

データはまだありません。