2014-09-11 5 views
5

In iOS 7 zeigte meine App einen Authentifizierungsbildschirm, wenn die App in den Hintergrund ging (durch Abonnieren von UIApplicationDidEnterBackgroundNotification). Der Authentifizierungs-Controller entfernte vertrauliche Informationen, sodass im Hintergrund-Screenshot keine Benutzerinformationen angezeigt wurden. In iOS 8 funktioniert das nicht mehr. Der Hintergrund-Screenshot zeigt nun die Ansicht an, in der der Benutzer zuletzt gearbeitet hat und nicht der Authentifizierungs-Controller ... obwohl, wenn die App wieder in den Vordergrund tritt, der Authentifizierungs-Controller aktiv ist.iOS 8: Entfernen Sie vertrauliche Informationen aus Ansichten, bevor Sie in den Hintergrund gehen

Ich fand eine Arbeit für jetzt. Anstatt UIApplicationDidEnterBackgroundNotification zu verwenden, kann ich name:UIApplicationWillResignActiveNotification verwenden, dies verursacht jedoch einen Flash, wenn der Benutzer die App verlässt.

Ist dies ein Fehler oder Apple bietet eine neue Möglichkeit, vertrauliche Informationen aus Ansichten zu entfernen, bevor Sie in den Hintergrund verschieben.

Hinweis: Putting ignoreSnapshotOnNextApplicationLaunch in applicationWillResignActive: und applicationDidEnterBackground: hat nicht geholfen.

Update: erstellt einen Fehlerbericht

+0

Ich würde es als Fehler mit Apple ablegen, nur um sicher zu sein, dass es kein Versehen ist. Im schlimmsten Fall ist Ihr Fehlerbericht ungültig und sie werden ihn verwerfen. –

+2

Hmmm. Meine App hat vertrauliche Daten immer gelöscht, wenn sie aktiv zurücktritt. Bis ich diesen Beitrag gelesen habe, habe ich den "Flash" nicht bemerkt, als ich den Home-Button meiner App unter iOS 8 angetippt habe. Ein Bugreport hört sich nach einer guten Idee an. – rmaddy

+0

Irgendein Wort auf dem Fehlerbericht? Das scheint ein großes Problem zu sein. – SAHM

Antwort

-1
here we are putting an imageview while the app animate to background - 
-(void)applicationWillResignActive:(UIApplication *)application 
{ 
    imageView = [[UIImageView alloc]initWithFrame:[self.window frame]]; 
    [imageView setImage:[UIImage imageNamed:@"[email protected]"]]; 
    [self.window addSubview:imageView]; 
} 

Here is the code to remove the imageview: 
- (void)applicationDidBecomeActive:(UIApplication *)application 
{ 
    if(imageView != nil) { 
     [imageView removeFromSuperview]; 
     imageView = nil; 
    } 
} 
It is working and tested many times. 
*** Please test this scenario into the device not in simulator. 
4

ähnlichen Ansatz @ Gurudev0777, sondern verwendet stattdessen UIBlurEffect den Inhalt zu verschleiern, und nicht die Kehrseite der Medaille über Metriken verschiedener Geräte Bildschirm besorgniserregend. Anwendung delegieren:

#define MY_BACKGROUND_SCREEN_TAG 1001//or any random but UNIQUE number. 

- (void)applicationDidEnterBackground:(UIApplication *)application 
{ 
    // Visual effect view for blur 
    UIBlurEffect *blurEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleDark]; 
    UIVisualEffectView *blurView = [[UIVisualEffectView alloc] initWithEffect:blurEffect]; 
    [blurView setAutoresizingMask:(UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight)]; 
    [blurView setFrame:self.window.frame]; 
    blurView.tag = MY_BACKGROUND_SCREEN_TAG; 

    [self.window addSubview:blurView]; 
} 

- (void)applicationWillEnterForeground:(UIApplication *)application 
{ 
    // remove blur view if present 
    UIView *view = [self.window viewWithTag:MY_BACKGROUND_SCREEN_TAG]; 
    if (view != nil) 
    { 
     [UIView animateWithDuration:0.2f animations:^{ 
      [view setAlpha:0]; 

     } completion:^(BOOL finished) { 
      [view removeFromSuperview]; 
     }]; 
    } 
} 

wirkt wie ein Zauber ...

Edited 2015.05.18: Danke @Simeon Reis für die Beobachtung über modale Dialoge, überarbeitete Unschärfe Ansicht hinzuzufügen, anstatt zu self.window von rootViewController.view

Bearbeitet 23.08.2016: Danke @tpankake für die Beobachtung re: Auto-Resizing-Maske.

+0

+1 zum Hinzufügen der Alpha-Animation - Details zählen! –

+0

Diese Qualitätslösung verwischt leider nicht, wenn ein Vollbild-Modal präsentiert wird (zumindest auf einem iPhone) - um dies zu umgehen, füge ich die Weichzeichnungsansicht zu "self.window" statt der Ansicht des Root-View-Controllers hinzu. –

+0

http://stackoverflow.com/questions/18959411/controlling-the-screenshot-in-the-ios-7-multitasking-switcher – TheCodingArt

Verwandte Themen