[iOS][Android] バックグラウンドタスク一覧表示時のスナップショットをガードする方法

eye-catch-ios-and-android

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

スナップショットを加工する

iOS や Android で現在実行中のタスク一覧を表示した時のスナップショットを加工する方法を紹介します。
セキュリティレベルの高い項目を表示するような画面(パスワード入力画面など)では、この処理を施すというのもアリだと思います。

iOS

AppDelegate クラスでバックグラウンドに回った時とフォアグラウンドに戻った時に、それぞれガード用のビューコントローラを表示/非表示します。

@interface AppDelegate ()

@property (nonatomic) UIViewController *snapshotViewController;

@end
- (void)applicationDidEnterBackground:(UIApplication *)application
{
    UIViewController *blankViewController = [UIViewController new];
    blankViewController.view.backgroundColor = [UIColor blackColor];

    UIViewController *controller = self.window.rootViewController;

    while (controller.presentedViewController) {
        controller = controller.presentedViewController;
    }

    [controller presentViewController:blankViewController animated:NO completion:nil];

    self.snapshotViewController = controller;
}
- (void)applicationWillEnterForeground:(UIApplication *)application
{
    [self.snapshotViewController dismissViewControllerAnimated:NO completion:nil];
    self.snapshotViewController = nil;
}

こちら に Apple 公式のサンプルがありますが、このコードだとモーダルなビューが表示されている時には意図通りに動かないため、多少改良しています。

実行結果

backgroud_snapshot_guard_1

ちなみに Apple の iTunes Connect アプリ ではブラーがかかるように処理されています。

backgroud_snapshot_guard_2

Android

Android では適用したいアクティビティにて以下のコードを組み込むだけです。

getWindow().addFlags(WindowManager.LayoutParams.FLAG_SECURE);

ただし FLAG_SECURE を設定すると、そのアクティビティにおいて スクリーンキャプチャ が実行できなくなるので気をつけてください。

実行結果

backgroud_snapshot_guard_3

リンク

ミレニアム・ファルコン製作日記 #15

15 号 表紙

mfd_15_1

パーツ

mfd_15_2

mfd_15_3

mfd_15_4

成果

mfd_15_5

mfd_15_6

今回の作業は以下の 3 つでした。

  • 半径方向肋材を組み立てる
  • フレームを組み立てる
  • 外殻プレートの取り付け

これまでに揃った下部フレームを、12 号で組み立てた枠組みに加えました。
これで船体下部の 4 分の 1 が完成しました。
4 分の 1 でこの大きさ、デカイ!

スター・ウォーズ/フォースの覚醒 MovieNEX

いよいよ自宅でも「スター・ウォーズ/フォースの覚醒」を鑑賞できるようになりました!
公式のディズニーストア で注文すればフライングゲットできます。
一刻も早く観たい方はこちらで注文されてはいかがでしょうか?
私はもうボーナス・コンテンツまで鑑賞済みです。
メイキングはイイネ。

それではまた次回。

May the Force be with you!