web-dev-qa-db-ja.com

iOSアプリで画面キャプチャを防止する

セキュリティ上の理由から、アプリのユーザーによる画面キャプチャを防ぐ必要があります。表示するコンテンツは機密情報であり、デバイスにコピーしないでください。 スタックオーバーフローに関する1つの答えですが、Androidの場合 です。

画面キャプチャを防ぐことがiOSでどういうわけか可能ですか?

いくつかのボタンをクリックするだけでスクリーンショットをギャラリーにキャプチャすることはユーザーにとって非常に便利な機能ですが、それを防ぐための制限された要件もあります。ポインタはありますか?

25
zolio

もう1つの問題は、ウェットウェアでのスクリーンキャプチャです。カメラや他の電話などの別のデバイスでスクリーンをキャプチャする人のように。アプリでそれを禁止しても、誰かが画面の写真を撮ることを防ぐことは不可能です

15
JimBobBennett

スクリーンショットを完全に撮らないようにするno方法はあります。 Snapchatの機能を実行できます。これは、ユーザーが画面に触れて、表示している情報を表示することを要求することです。これは、システムのスクリーンショットイベントがタッチを中断するためです。これは完璧な方法ではなく、ユーザーが常にスクリーンショットを撮ることを防ぐことはできません。

詳細: スクリーンショットのiOS検出?

14
Joshua Gross

考えられる回避策の1つは、 Yovo です。このデモを見ただけで、心を打たれました!

http://vimeo.com/10824465

これはスクリーンショットを隠す非常に賢い方法であり、JimBobBennetによって提起された「ウェットウェア」のケースを部分的に処理することさえできます。

画像の上にぼかしマスクを設定し(アプリではフェンスパターンが使用されますが、どのパターンでも使用できます)、高速で移動します。ユーザーがスクリーンショットを撮ると、1つのフレームの静止画像が得られますが、それ自体は隠されています。

それは、私たちの脳が動くマスクの背後にある画像をつなぎ合わせることができるという事実を使用しています-動くファンの刃を「透けて見る」ことができる方法に似ています。

画像をキャプチャするには、そのビデオを記録する必要がありますが、これは非常に面倒です。

ここでの唯一の問題はIPかもしれません-Yovoは 0以上の特許 ...を持っていると主張しています.

13
Ismail Degani

背景に移動する前に、ビューから機密情報を削除します。アプリケーションがバックグラウンドに移行すると、システムはアプリケーションのメインウィンドウのスナップショットを取得し、アプリケーションをフォアグラウンドに戻すときに簡単に表示します。 applicationDidEnterBackground:メソッドから戻る前に、スナップショットの一部としてキャプチャされる可能性のあるパスワードおよびその他の機密の個人情報を非表示または非表示にする必要があります。

Swift 4でこのコードをアプリのデリゲートに追加します。

アプリデリゲートで変数を宣言する

var imageview : UIImageView?

func applicationWillResignActive(_ application: UIApplication) {

        imageview = UIImageView.init(image: UIImage.init(named: "bg_splash"))
        self.window?.addSubview(imageview!)
        // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
        // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game.
    }

func applicationDidBecomeActive(_ application: UIApplication) {
        if (imageview != nil){

            imageview?.removeFromSuperview()
            imageview = nil
        }
        // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
    }
7
Ourang-Zeb Khan

しばらく経ちましたが、私は ScreenShieldKit に出会いました。これは、メッセージングアプリConfideで使用されている特許出願中のテクノロジーです。それは、ユーザーがスクリーンショットを撮ることができるということですが、最後の写真ではコンテンツが空白になっています。彼らは最近、iOSバージョンをリリースしました。

3
Onur Çevik

UIApplicationUserDidTakeScreenshotNotificationを使用してスクリーンショットイベントをリッスンできると聞きました

 NSOperationQueue *mainQueue = [NSOperationQueue mainQueue];
[[NSNotificationCenter defaultCenter] addObserverForName:UIApplicationUserDidTakeScreenshotNotification
                                                  object:nil
                                                   queue:mainQueue
                                              usingBlock:^(NSNotification *note) {
                                                  // executes after screenshot
                                                  NSLog(@"Screenshot Detection : %@", note);
                                                  UIAlertView *screenshotAlert = [[UIAlertView alloc] initWithTitle:@"Screenshot Detected" message:@"Oh Oh no screenshot bruhh" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
                                                  [screenshotAlert show];
                                              }];

スクリーンショットファイルが作成されたときにすぐに削除できるとしたらどうでしょうか。

1
lxknvlk

たぶん 新しく撮ったスクリーンショットを検出する削除する アプリに認証がある場合.

ただし、ユーザーが機密情報を含むスクリーンショットを撮らないようにするには、ウォークアラウンドを試してください。それは良い習慣ではなく、ユーザーが完全にそうすることを防ぐことはできません。

0
Mint