Jetpack Compose Tapjacking:过滤器接触到模糊 UI
Jetpack Compose Tapjacking: Filter touches on obscured UI
虽然关于 Tapjacking in tradition XML views in Android 防止恶意应用程序与敏感信息交互的大量文档,似乎 none 围绕 Jetpack Compose 的问题。
对于 @Composable
s 是否有等同于 filterTouchesWhenObscured
的问题,这个问题是否在更基础的层面上得到了解决,或者自定义逻辑是否需要使用 gesture/touch 修饰符来实现?
无法为特定的可组合项指定 filterTouchesWhenObscured
,根据 this 维护者的评论,当前未计划:
We won't likely implement it beyond the ComposeView level in the near future.
但是你可以为 ComposableView
做,它用来绘制 Compose 树。例如,如果您在屏幕上显示某个特定视图时将其应用到整个屏幕,您可以这样做:
val composeView = LocalView.current
DisposableEffect(Unit) {
composeView.filterTouchesWhenObscured = true
onDispose {
composeView.filterTouchesWhenObscured = false
}
}
或者,如果您想将它应用于特定的可组合项,比如只应用于屏幕的一部分,您可以使用这样的包装器:
@Composable
fun ObscuredView(
content: @Composable () -> Unit,
) {
AndroidView(
factory = {
ComposeView(it).apply {
filterTouchesWhenObscured = true
}
},
update = {
it.setContent(content)
}
)
}
用法:
ObscuredView {
Text("this text is Obscured")
}
虽然关于 Tapjacking in tradition XML views in Android 防止恶意应用程序与敏感信息交互的大量文档,似乎 none 围绕 Jetpack Compose 的问题。
对于 @Composable
s 是否有等同于 filterTouchesWhenObscured
的问题,这个问题是否在更基础的层面上得到了解决,或者自定义逻辑是否需要使用 gesture/touch 修饰符来实现?
无法为特定的可组合项指定 filterTouchesWhenObscured
,根据 this 维护者的评论,当前未计划:
We won't likely implement it beyond the ComposeView level in the near future.
但是你可以为 ComposableView
做,它用来绘制 Compose 树。例如,如果您在屏幕上显示某个特定视图时将其应用到整个屏幕,您可以这样做:
val composeView = LocalView.current
DisposableEffect(Unit) {
composeView.filterTouchesWhenObscured = true
onDispose {
composeView.filterTouchesWhenObscured = false
}
}
或者,如果您想将它应用于特定的可组合项,比如只应用于屏幕的一部分,您可以使用这样的包装器:
@Composable
fun ObscuredView(
content: @Composable () -> Unit,
) {
AndroidView(
factory = {
ComposeView(it).apply {
filterTouchesWhenObscured = true
}
},
update = {
it.setContent(content)
}
)
}
用法:
ObscuredView {
Text("this text is Obscured")
}