在 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上实现,因为看起来Activity
的onPause
需要被覆盖,并且在继承之前采取的操作(super
) onPause
被调用,根据examples here。目前在 Delphi 中,WillBecomeActive 事件是在 onPause
已经发生之后发送的,其中 Android 已经拍摄了您的屏幕快照(包含敏感数据)。
我已经在质量门户中提交了一份报告:quality.embarcadero.com/browse/RSP-34252
你是明星。希望它可以很快成为真正的跨平台功能。谢谢以上是关于在 FMX iOS App 中隐藏 App Switcher 的屏幕截图的主要内容,如果未能解决你的问题,请参考以下文章