When you're recording sessions, protecting user privacy is super important.
Zipy helps with that by automatically hiding private information, such as credit card numbers and passwords, in fields where you type. You don't have to think about it all the time.
And if you’ve got other stuff you want to hide (like specific UI elements), you can add your own custom masking too. That way, no one ends up seeing things they shouldn’t.
Easy to set up, and it keeps your users safe.
Zipy takes privacy seriously - so by default, it doesn’t record sensitive stuff like:
If there’s extra stuff you want to block, you can just use the zipy-block class on those elements. Zipy will skip them in the session replay.
So you stay in control, and your users’ private data stays private.
<div class="zipy-block">Sample div</div>
<div class="zipy-block">
<label>Card details</label>
<input type="text" placeholder="Name">
<input type="text" placeholder="Card number">
</div>
import 'package:zipy_flutter/zipy_flutter.dart';
ZipyBlock(
child: ElevatedButton(
onPressed: dioPostFailCall,
child: Text('Dio POST Fail'),
),
),
When Zipy records a session, it automatically masks input fields - so things like passwords, emails, or credit card numbers don’t show up in the recording. Super helpful for keeping user data private and secure.
Want to hide more than just input fields?
You can add a ZipyBlock to any UIView (or subclass). When Zipy takes a screenshot:
Nice and clean, no sensitive info leaking into your debugging tools. For reference, see examples below
import ZipyiOS
// Create a ZipyBlock on any UIView
let sensitiveView = UIView()
_ = ZipyBlock(on: sensitiveView)
// Masking a button
private let maskedButton: UIButton = {
let button = UIButton(type: .system)
button.translatesAutoresizingMaskIntoConstraints = false
button.setTitle("Masked Button", for: .normal)
_ = ZipyBlock(on: button) // This will mask the button in screenshots
return button
}()
// Masking a text field
private let sensitiveTextField: UITextField = {
let textField = UITextField()
textField.placeholder = "Sensitive Information"
textField.translatesAutoresizingMaskIntoConstraints = false
_ = ZipyBlock(on: textField) // This will mask the text field in screenshots
return textField
}()
class CustomView: UIView {
@IBOutlet weak var sensitiveLabel: UILabel! {
didSet {
_ = ZipyBlock(on: sensitiveLabel)
}
}
}
class PaymentViewController: UIViewController {
private let cardNumberField: UITextField = {
let field = UITextField()
field.placeholder = "Card Number"
return field
}()
private var maskBlock: ZipyBlock?
func toggleMasking(isEnabled: Bool) {
if isEnabled {
// Add masking
maskBlock = ZipyBlock(on: cardNumberField)
} else {
// Remove masking
maskBlock?.removeFromSuperview()
maskBlock = nil
}
}
}
<Button
android:id="@+id/btnGetSessionUrl"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Get Session URL"
android:tag="zipy_block"
android:layout_marginBottom="8dp" />
See how thousands of Engineering, Product and Marketing Teams are accelerating their growth with Zipy.
If you have any more questions feel free to reach out to us at support@zipy.ai.
Masking ensures user privacy by preventing unauthorized access to personal information recorded during sessions.
You can't turn it off directly from the SDK, but you can contact Zipy support to change the settings if you need to.
By default, standard input fields like those for passwords and personal information are hidden.
Zipy provides you with full customer visibility without multiple back and forths between Customers, Customer Support and your Engineering teams.