You can customize the behavior of the UserView iOS SDK through configuration options.
Setting Configuration
Pass options when creating the UpscopeConfiguration:
let config = UpscopeConfiguration(
apiKey: "YOUR_API_KEY",
requireAuthorizationForSession: true,
authorizationPromptTitle: "Screen Sharing Request",
authorizationPromptMessage: "Allow {%agentName%|Support} to view your screen?",
endOfSessionMessage: "Thanks for using screen sharing!",
translationsYes: "Allow",
translationsNo: "Decline"
)
try Upscope.shared.initialize(with: config)
Configuration Options
Session Authorization
| Option | Type | Default | Description |
|---|
requireAuthorizationForSession | Bool? | nil (server config) | Require user permission before screen sharing starts. |
authorizationPromptTitle | String? | nil (server config) | Custom title for the authorization dialog. |
authorizationPromptMessage | String? | nil (server config) | Custom message for the authorization dialog. Supports placeholders. |
Message Placeholders
The authorizationPromptMessage supports these placeholders:
{%agentName%|fallback} - Agent's name with a fallback if unavailable{%currentDomain%} - App name on iOS
Example:
authorizationPromptMessage: "{%agentName%|Our support team} would like to view your screen"
UI Display
| Option | Type | Default | Description |
|---|
showTerminateButton | Bool? | nil (server config) | Show a button to end the screen sharing session. |
endOfSessionMessage | String? | nil (server config) | Message displayed when the session ends. |
stopSessionText | String? | nil (server config) | Custom text for the stop session button. |
Remote Control
| Option | Type | Default | Description |
|---|
allowRemoteClick | Bool? | nil (server config) | Allow agents to remotely tap on the screen. |
allowRemoteScroll | Bool? | nil (server config) | Allow agents to remotely scroll the screen. |
requireControlRequest | Bool? | nil (server config) | Require user approval before agents can use remote input. |
controlRequestTitle | String? | nil (server config) | Custom title for the control request prompt. |
controlRequestMessage | String? | nil (server config) | Custom message for the control request prompt. |
Lookup Code
| Option | Type | Default | Description |
|---|
enableLookupCodeOnShake | Bool? | nil (server config) | Show lookup code popup when device is shaken. |
lookupCodeKeyTitle | String? | nil (server config) | Custom title for the shake detection alert. |
lookupCodeKeyMessage | String? | nil (server config) | Custom message for shake alert. Supports {%lookupCode%} placeholder. |
Localization Strings
| Option | Type | Description |
|---|
translationsYes | String? | Custom text for "Allow" button in authorization prompt. |
translationsNo | String? | Custom text for "Deny" button in authorization prompt. |
translationsOk | String? | Custom text for "OK" button. |
Full Device Screen Sharing
| Option | Type | Description |
|---|
broadcastAppGroupId | String? | App Group identifier shared between your app and the Broadcast Extension. Required for full device screen sharing. |
broadcastExtensionBundleId | String? | Bundle identifier of your Broadcast Upload Extension. Used to auto-select it in the system broadcast picker. |
See here for the full setup guide.
System Options
| Option | Type | Description |
|---|
autoconnect | Bool? | Automatically connect on initialization. Defaults to true via server config. |
region | String? | Server region for connections. |
Custom Authorization UI
You can replace the default authorization dialog with your own UI by setting the onSessionRequest property after creating the configuration:
var config = UpscopeConfiguration(
apiKey: "YOUR_API_KEY",
requireAuthorizationForSession: true
)
config.onSessionRequest = { response, agentName in
// Show your custom UI here
// Call response.accept() or response.reject()
myCustomAlert.show(agentName: agentName) { accepted in
if accepted {
response.accept()
} else {
response.reject()
}
}
// Return a Cancellable for cleanup if the request is dismissed externally
return Cancellable {
myCustomAlert.dismiss()
}
}
try Upscope.shared.initialize(with: config)
Similarly, use onControlRequest to customize the remote control authorization prompt:
var config = UpscopeConfiguration(
apiKey: "YOUR_API_KEY",
requireControlRequest: true
)
config.onControlRequest = { response in
// Show your custom UI
response.accept() // or response.reject()
return nil // or return a Cancellable
}
Full Example
let config = UpscopeConfiguration(
apiKey: "YOUR_API_KEY",
requireAuthorizationForSession: true,
authorizationPromptTitle: "Screen Share",
authorizationPromptMessage: "{%agentName%|Support} wants to help you",
showTerminateButton: true,
endOfSessionMessage: "Session ended. Thank you!",
stopSessionText: "End Session",
allowRemoteClick: true,
allowRemoteScroll: true,
enableLookupCodeOnShake: true,
lookupCodeKeyTitle: "Your Code",
lookupCodeKeyMessage: "Share this code: {%lookupCode%}",
translationsYes: "Yes, share",
translationsNo: "No thanks",
translationsOk: "Got it",
region: "us-east",
broadcastAppGroupId: "group.com.yourcompany.yourapp",
broadcastExtensionBundleId: "com.yourcompany.yourapp.broadcast"
)
try Upscope.shared.initialize(with: config)