Display a view or splash screen before applicationDidEnterBackground (to avoid active view screenshot)

后端 未结 8 712
小鲜肉
小鲜肉 2020-11-27 15:40

I have confidential informations in my app, so I would like to hide them with a splash screen when the app is about to be moved to background.

I do run the app on iO

相关标签:
8条回答
  • 2020-11-27 15:56

    This fixed it for me, sorry this is for Xamarin.Forms but you should get the idea. You need to call UIView.SnapshotView(true) in xamarin or UIView snapshotViewAfterScreenUpdates on iOS. Works in DidEnterBackground on iOS7, and iOS8:

    public override void DidEnterBackground(UIApplication uiApplication)
    {
        App.Current.MainPage = new DefaultPage();
        **UIApplication.SharedApplication.KeyWindow.SnapshotView(true);**
        base.DidEnterBackground(uiApplication);
    }
    
    0 讨论(0)
  • 2020-11-27 16:09

    I think the problem is that you are testing in simulator. On device, it should work fine.

    I tested this and it worked. Add an imageview with your splash image when app enters in background -

    - (void)applicationDidEnterBackground:(UIApplication *)application
    {
    
            UIImageView *imageView = [[UIImageView alloc] initWithFrame:self.window.bounds];
    
            imageView.tag = 101;    // Give some decent tagvalue or keep a reference of imageView in self
        //    imageView.backgroundColor = [UIColor redColor];
            [imageView setImage:[UIImage imageNamed:@"Default.png"]];   // assuming Default.png is your splash image's name
    
            [UIApplication.sharedApplication.keyWindow.subviews.lastObject addSubview:imageView];
    }
    

    And when app comes back in foreground -

    - (void)applicationWillEnterForeground:(UIApplication *)application
    {
        UIImageView *imageView = (UIImageView *)[UIApplication.sharedApplication.keyWindow.subviews.lastObject viewWithTag:101];   // search by the same tag value
        [imageView removeFromSuperview];
    
    }
    

    NOTE - On simulator (iOS 7.0), the added subview is not show when you check by pressing home button twice (Cmd + H), but on device it works as expected (like paypal, BofA apps)

    EDIT: (Additional info)

    In addition to obscuring/replacing sensitive information by adding subview / blur as explained above, iOS 7 provides you ability to ignore the screen snapshot via ignoreSnapshotOnNextApplicationLaunch of UIApplication inside applicationWillResignActive or applicationDidEnterBackground.

    UIApplication.h

    // Indicate the application should not use the snapshot on next launch, even if there is a valid state restoration archive.
    // This should only be called from methods invoked from State Preservation, else it is ignored.
    - (void)ignoreSnapshotOnNextApplicationLaunch NS_AVAILABLE_IOS(7_0);
    

    Also, allowScreenShot flag can be explored in Restrictions Payload.

    0 讨论(0)
提交回复
热议问题