[解決済み] iOS 7のマルチタスキングスイッチャーでスクリーンショットを制御する
質問
iOS 7 の新しいマルチタスク スイッチャーと、特にアプリが休止状態に入るときに OS が撮影するスクリーンショットについて、いくつかの情報を見つけようとしています。
この機能またはスクリーンショットを完全にオフにする方法はありますか? または、スイッチャーからアプリを完全に隠すことはできますか? アプリはバックグラウンドで実行する必要がありますが、アプリからのスクリーンショットは表示したくありません。
カード番号や口座の概要がデバイスのホーム ボタンをダブルクリックした人に公開されるような銀行アプリの場合、スクリーンショットは潜在的にセキュリティ リスクになります。
このことについて何かご存知の方はいらっしゃいますか?ありがとうございます。
どのように解決するのですか?
で UIをバックグラウンドで動作させるための準備 で、Apple が言っています。
アプリ スナップショット用に UI を準備する
アプリがバックグラウンドに入り、デリゲートメソッドが戻った後のある時点で、UIKit はアプリの現在のユーザーインターフェースのスナップショットを取得します。システムはその結果の画像をアプリのスイッチャーに表示します。また、アプリをフォアグラウンドに戻すときにも、一時的にこの画像が表示されます。
アプリの UI には、パスワードやクレジットカード番号などの機密性の高いユーザー情報を含めてはなりません。インターフェイスにそのような情報が含まれている場合、バックグラウンドに入るときにビューからそれを削除します。また、アプリのコンテンツを見えなくするアラート、一時的なインターフェイス、およびシステムビューコントローラーも削除してください。スナップショットは、アプリのインターフェイスを表し、ユーザーが認識できるようにする必要があります。アプリがフォアグラウンドに戻ったとき、データやビューを適切に復元することができます。
参照 Technical Q&A QA1838: タスクスイッチャーに機密情報が表示されないようにするために
機密情報を見えなくしたり置き換えたりすることに加えて、iOS 7 に画面のスナップショットを撮らないようにするために
ignoreSnapshotOnNextApplicationLaunch
とドキュメントに書かれています。
アプリを再起動したときに、スナップショットがアプリのユーザーインターフェイスを正しく反映できないと感じる場合は、アプリを再起動する前に
ignoreSnapshotOnNextApplicationLaunch
を使用して、そのスナップショット画像が取得されないようにすることができます。
とはいえ、画面のスナップショットはまだ撮影されるようなので、バグ レポートを提出しました。しかし、さらにテストして、この設定を使用することで解決するかどうかを確認する必要があります。
これがエンタープライズ アプリであった場合、適切な設定の
allowScreenShot
に概説されている
制限のペイロード
セクションの
コンフィギュレーションプロファイルリファレンス
私が必要としたことを実現する実装を紹介します。あなたは自分の
UIImageView
を提示することもできますし、delegate-protocolパターンを使って機密情報を見えなくすることもできます。
// SecureDelegate.h
#import <Foundation/Foundation.h>
@protocol SecureDelegate <NSObject>
- (void)hide:(id)object;
- (void)show:(id)object;
@end
そして、アプリのデリゲートにそのためのプロパティを与えました。
@property (weak, nonatomic) id<SecureDelegate> secureDelegate;
私のビューコントローラが設定します。
- (void)viewDidLoad
{
[super viewDidLoad];
AppDelegate *delegate = [[UIApplication sharedApplication] delegate];
delegate.secureDelegate = self;
}
ビューコントローラは明らかにそのプロトコルを実装しています。
- (void)hide:(id)object
{
self.passwordLabel.alpha = 0.0;
}
- (void)show:(id)object
{
self.passwordLabel.alpha = 1.0;
}
そして最後に、私のアプリのデリゲートは、このプロトコルとプロパティを利用します。
- (void)applicationWillResignActive:(UIApplication *)application
{
[application ignoreSnapshotOnNextApplicationLaunch]; // this doesn't appear to work, whether called here or `didFinishLaunchingWithOptions`, but seems prudent to include it
[self.secureDelegate hide:@"applicationWillResignActive:"]; // you don't need to pass the "object", but it was useful during my testing...
}
- (void)applicationDidBecomeActive:(UIApplication *)application
{
[self.secureDelegate show:@"applicationDidBecomeActive:"];
}
注:ここでは
applicationWillResignActive
ではなく、推奨されている
applicationDidEnterBackground
なぜなら、他の人が指摘したように、後者はアプリの実行中にホーム ボタンをダブルタップしても呼び出されないからです。
私は、デリゲート プロトコル パターンではなく、このすべてを処理するために通知を使用できればと思いますが、私の限られたテストでは、通知は十分にタイムリーに処理されませんが、上記のパターンはうまく機能します。
関連
-
[解決済み] アトミック属性と非アトミック属性の違いは何ですか?
-
[解決済み] キーボードがあるときに、UITextFieldを編集開始時に上に移動させるには?
-
[解決済み] iOSまたはmacOSで、インターネット接続が有効かどうかを確認するにはどうすればよいですか?
-
[解決済み] iOSのステータスバーの文字色を変更する方法
-
[解決済み] iOSのバージョンを確認する方法を教えてください。
-
[解決済み] iOS7でスタイルUITableViewStyleGroupedを持つUITableViewの上部に余分なパディングがあるのはなぜですか?
-
[解決済み] UITextFieldのテキスト変更イベント
-
[解決済み] UIButtonのタイトルを左揃えにするにはどうしたらよいですか?
-
[解決済み] iOS 7でステータスバーとナビゲーションバーがビューの境界を越えて表示される
-
[解決済み】iOSアプリの名前を変更する方法は?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
EXC_BAD_ACCESS (code=2, address=0x0)
-
[解決済み] iPhone 5の画面解像度に対応したアプリを開発・移行するには?
-
[解決済み] UIViewの左上と右上だけにcornerRadiusを設定する方法は?
-
[解決済み] iOS - UITextFieldの外側をタッチするとキーボードが外れる。
-
[解決済み] SwiftでURLから画像を読み込む/ダウンロードする
-
[解決済み] UILabelで複数行のテキストを表示する
-
[解決済み] iOS 13でダークモードをオプトアウトすることは可能ですか?
-
[解決済み] UIViewの角丸とドロップシャドウ?
-
[解決済み] Swiftのプロトコルでオプションのメソッドを定義するには?
-
[解決済み] ファイルはユニバーサル(3スライス)ですが、iOSの静的ライブラリのための(n)ARMv7-sスライスエラーが含まれていない、どうにかして回避するには?