Zipy
  • Welcome to Zipy ai
  • Getting Started
    • Install Zipy
    • Installing with Google Tag Manager
    • Supported frameworks
    • Security Overview
    • Sensitive User Data
    • SOC2 Type II
  • Zipy For Mobile
    • React Native Setup
      • Install React Native
      • Input Masking
      • Session Replay
      • Screen Transition Capture
      • Gesture Capturing
      • Unhandled Exception Capture
      • Custom Logging
      • Fetch and XHR Network Calls
      • Profiling
      • Device Information Capture
      • Session URL Retrieval
      • Identify Users
      • Firebase Integration
    • Flutter Setup
      • Install Flutter
      • Session Replay
      • Input Masking & Custom Masking
      • Screen Transition Capture
      • Gesture Capturing
      • Unhandled Exception Capture
      • Custom Logging
      • Http Network Calls
      • Dio Network Calls
      • Profiling
      • Device Information Capture
      • Session URL Retrieval
      • Identify Users
      • Firebase Integration
      • Session Recording Control
      • Data Sanitization
  • iOS Setup
    • Install in an iOS app
    • Identify Users
    • Screen Tracking & Tagging
    • Custom Logging
    • Session URL Retrieval
    • Session Recording Control
    • Input Masking & Custom Masking
  • Chrome Extension
    • Zipy Plug and Play Support
  • Configure
    • Zipy Recording Control
    • Release Version
    • Identifying Users
    • Adding Custom Identifiers
    • Anonymize Users
    • Source Maps
    • Blocking PII data
    • Ignoring Errors/Noise
    • npm Update
    • Support Integration
    • Session Stitching (rootDomain)
  • Product Features
    • Custom Events
    • Session Replay
    • Errors
    • Analytics
    • Time Filters
    • Multiple Filters
    • Clicked Element Filters
    • Manage Teams
    • Stack Trace
    • Console Logs
    • Network Requests
    • Network Headers and Payload
    • Custom Logs
    • Live Users
    • Alerts
      • Slack Alerts
      • Email Alerts
      • Live Alerts
    • Auto Resolve Errors
    • Zipy Labels Plugin
    • iFrame Support
    • API Performance
    • Heatmaps
    • Page Performance
    • Seen/Unseen Sessions
  • FAQs
    • Install Zipy
    • Session Replay Definition
    • Error Tracking
    • Error Classification
    • Environment Support
    • Impact on your App
    • Performance Impact
    • Mobile Support
    • Network Data Capture
    • API Performance Diagnostic Help
      • High DNS Time
      • High SSL Connection Time
      • High Connection Setup Time
      • Large API Response Size
      • High Response Time
      • Compression Not Enabled
      • Server side API Failures
      • Client side API Failures
      • Insecure Connections
  • Troubleshooting
    • Errors in npm
    • Network header missing in Zipy
    • Can't see user data in sessions
    • No recordings or errors visible
    • No network timing split available
  • Product Videos
    • Ask AI
    • Getting Started
    • Session Replay
    • Multiple Project Creation
    • Team Management
    • Alerting on Slack
    • Time Filters and Daily Alerts
    • Custom Identifiers
    • Ignore Errors
    • Identify Users
    • Dashboard
    • Resolve Errors
    • New Error Digest
    • Jira and Slack
    • Online/Offline Network Status
    • Zipy on Zipy
      • Zipy Product Roadmap
  • Whats new
    • Product Updates
  • Legal & Policy
    • Terms of Service
    • Privacy Policy
    • Fulfillment Policy
    • Cookie Policy
    • Acceptable Usage Policy
    • Zipy Sub Processor List
  • Integration
    • Azure DevOps
    • Factors
    • RB2B
    • Webflow
    • WordPress
    • Amplitude
    • Coralogix
    • DevRev
    • Drift
    • Errorception
    • Freshchat
    • Google Analytics
    • Heap
    • HelpScout
    • Honeybadger
    • Hubspot
    • Intercom
    • Mixpanel
    • New Relic
    • Pendo
    • Raygun
    • Rollbar
    • Segment
    • Sentry
    • Shopify
    • Sumo Logic
    • TrackJS
    • Zendesk
Powered by GitBook
On this page
  1. iOS Setup

Input Masking & Custom Masking

Blocking sensitive data on Zipy

Zipy's Input Masking feature ensures that all input field data on the screen is automatically masked during session recordings. This powerful feature prevents sensitive information from being visible in the recordings, safeguarding user privacy and maintaining compliance with data security standards.

Key benefits:

  • Masks sensitive information to prevent unauthorized viewing

  • Automatically protects input fields like passwords and personal data

  • Maintains compliance with data security standards

  • Ensures user privacy in session recordings

The SDK provides two types of masking:

  1. Automatic Input Masking: Built-in protection for standard input fields

  2. Custom UI Masking: Using ZipyBlock for additional UI elements

Using ZipyBlock

You can add a ZipyBlock to any UIView or its subclasses. When screenshots are captured, the masked elements will appear as black rectangles in the screenshot while remaining fully visible to the user during normal app usage.

Basic Usage

import ZipyiOS

// Create a ZipyBlock on any UIView
let sensitiveView = UIView()
_ = ZipyBlock(on: sensitiveView)

Masking UI Elements in Code

// 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
}()

Masking Elements in Interface Builder

class CustomView: UIView {
    @IBOutlet weak var sensitiveLabel: UILabel! {
        didSet {
            _ = ZipyBlock(on: sensitiveLabel)
        }
    }
}

Dynamic Masking

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
        }
    }
}

PreviousSession Recording ControlNextZipy Plug and Play Support

Last updated 23 days ago