在 FMX iOS App 中隐藏 App Switcher 的屏幕截图

Posted

技术标签:

【中文标题】在 FMX iOS App 中隐藏 App Switcher 的屏幕截图【英文标题】:Hide screenshot for App Switcher in FMX iOS App 【发布时间】:2021-06-21 21:47:42 【问题描述】:

在移动ios系统中,双击home键时,用户会进入一个App Switcher,会显示一系列App窗口。如果您自己的 App 窗口有敏感信息,则可能在此阶段泄露。

我已经设法使用FMX.Platform 来捕捉不同的应用事件。我试图更改为另一个TabItem,而不是敏感的TabItem。我的代码可以编译,但在 iOS 上的显示仍然保持不变。代码如下所示:

procedure TForm1.FormCreate(Sender: TObject);
var
  aFMXApplicationEventService: IFMXApplicationEventService;
begin
  if TPlatformServices.Current.SupportsPlatformService(IFMXApplicationEventService, IInterface(aFMXApplicationEventService)) then
    aFMXApplicationEventService.SetApplicationEventHandler(HandleAppEvent)
  else
    ShowMessage('Application Event Service is not supported.');
end;

...

function TForm1.HandleAppEvent(AAppEvent: TApplicationEvent; AContext: TObject): Boolean;
begin      
  if AAppEvent = TApplicationEvent.aeWillBecomeInactive then begin
    tempActiveTbaItem := TabControl1.TabIndex;
    TabControl1.TabIndex := 4; //4 is a blank tabItem
    TabControl1.UpdateEffects;
  end else
  if AAppEvent = TApplicationEvent.aeEnteredBackground then begin
    tempActiveTbaItem := TabControl1.TabIndex;
    TabControl1.TabIndex := 4;
  end else
  if (AAppEvent = TApplicationEvent.aeBecameActive) and (tempActiveTbaItem <> -1) then begin
    TabControl1.TabIndex := 0;
  end;
    
  Result := True;
end;

我在网上搜索了一下,在这里找到了两个解决方案:

Making sensitive data disappear in the iOS/iPadOS App Switcher

Hide Sensitive Information in the iOS App Switcher Snapshot Image

但这些仅适用于本机 Xcode。谁能告诉我如何在 Delphi for FMX 中进行操作?

【问题讨论】:

您当前的代码看起来不适合您的什么? 嗨雷米。该代码正在运行,但 APP SWITCHER 不会更改视图。这就是问题。看来它需要另一个iOS原生功能 【参考方案1】:

对于 iOS,这应该可以解决问题:

uses
  FMX.Platform.iOS;

// Other code snipped

if AAppEvent = TApplicationEvent.aeWillBecomeInactive then
begin
  tempActiveTbaItem := TabControl1.TabIndex;
  TabControl1.TabIndex := 4; //4 is a blank tabItem
  WindowHandleToPlatform(Handle).View.setNeedsDisplay;
end;

调用setNeedsDisplay 强制视图重绘

【讨论】:

漂亮的工作!!!对于 iOS。它也可以在 android 上运行吗? 它看起来不可能在Android上实现,因为看起来ActivityonPause需要被覆盖,并且在继承之前采取的操作(super) onPause 被调用,根据examples here。目前在 Delphi 中,WillBecomeActive 事件是在 onPause 已经发生之后发送的,其中 Android 已经拍摄了您的屏幕快照(包含敏感数据)。 我已经在质量门户中提交了一份报告:quality.embarcadero.com/browse/RSP-34252 你是明星。希望它可以很快成为真正的跨平台功能。谢谢

以上是关于在 FMX iOS App 中隐藏 App Switcher 的屏幕截图的主要内容,如果未能解决你的问题,请参考以下文章

Delphi FMX 开发APP使用TrueType字库做图标(自己使用图标制作字体)

如何在 App Store 中临时隐藏 IOS App

Android实例-调用系统APP(XE10+小米2)

iOS可以隐藏应用吗

iOS-TableView中cell的显示与隐藏

ios隐藏支付可以上TestFlight公测吗?