Threat-Events™, In-App Threat Intelligence in Native iOS Apps
Last updated August 20, 2024 by Appdome
This knowledge base article shows you how easy it is to use Appdome Threat-EventsTM to get in-app threat intelligence in Native iOS Apps and control the user experience in your Native iOS Apps app when mobile attacks occur.
What are Threat-Events?
Appdome Threat-Events is a powerful threat-intelligence framework for Android & iOS apps, which is comprised of three elements: (1) a Threat-Event, (2) the data from each Threat-Event, and (3) the Threat-Score™.
With Threat-Events, mobile developers can register, listen to, and consume real-time attack and threat data from Appdome’s mobile app security, anti-fraud, mobile anti-bot, and other protections within their mobile applications. This allows them to (1) ensure that mobile application workflows are aware of attacks and threats, (2) customize business logic and user experience based on the user’s risk profile and/or each attack or threat presented, and (3) pass the threat data to other systems of record such as app servers, mobile fraud analysis systems, SIEMs, and other data collection points.
The purpose of Threat-Events is to enable Android and iOS applications to adapt and respond to mobile app attacks and threats in real-time. Using Threat-Events will ensure you keep users, data, and transactions safe.
Mobile Application Threat-Events vs. Threat-Scores
Appdome Threat-Events can be used as a stand-alone implementation in Native iOS Apps mobile apps, or in combination with Threat-Scores. Threat-Events provide the mobile developer with the in-app notification of each attack or threat, as well as the metadata associated with the attack. Threat-Scores provide the mobile developer with the Threat-Event event score and the combined (aggregate) mobile end-user risk at the time of the notification.
The figure below shows where you can find Threat-Events and Threat-Scores for each of the runtime mobile app security, anti-fraud, anti-malware, mobile antibot, and other protections available on Appdome:
To enable Threat-Events with any runtime protection, select the check box next to Threat-Events for that feature. Doing so will enable (turn ON) Threat-Events for that feature. To enable Threat-Scores for any runtime protection, click the up/down arrow associated with Threat-Scores to assign a specific score to each protection.
Threat-Scores must have a value greater than zero (0) and less than a thousand (1,000).
Threat-Events and Threat-Scores can be used with or in place of server-based mobile anti-fraud solutions.
Prerequisites for Using Threat-Events with Native iOS Apps
Here’s what you need to use Threat-Events with Native iOS Apps.
Signing Credentials (e.g., signing certificates and provisioning profile) – see Signing Secure iOS apps.
Code Snippet Required for Using Threat-Events with Native iOS Apps
Before consuming Threat-Events or Threat-Scores in your Native iOS Apps, confirm that the following conditions are met:
Threat-Events and/or Threat-Scores have been enabled ( turned ON) for the specific protection
You are using the correct identifiers for the Threat-Events for each protection.
You can find the specific identifiers for each Threat-Event and Threat-Score in the knowledge base article associated with each protection.
Below is the code snippet required for using Threat-Events™ and Threat-Scores™ in Native iOS Apps :
[[NSNotificationCenter defaultCenter] addObserverForName: @"BlockedKeyboardEvent" object:nil queue:nil usingBlock:^(NSNotification *note) {
NSDictionary *userInfo = [note userInfo];
if (userInfo == nil) {
return;
}
// "true" or "false"
NSString *blocked = [userInfo objectForKey:@"blocked"];
// Package of the keyboard
NSString *keyboard = [userInfo objectForKey:@"keyboard"];
// message specified in the fusion set
NSString *defaultMessage = [userInfo objectForKey:@"defaultMessage"];
// UNIX timestamp when event happened
NSString *timestamp = [userInfo objectForKey:@"timestamp"];
// Unique device identifier
NSString *deviceID = [userInfo objectForKey:@"deviceID"];
// Mobile device model
NSString *deviceModel = [userInfo objectForKey:@"deviceModel"];
// Mobile device OS version
NSString *osVersion = [userInfo objectForKey:@"osVersion"];
// Kernel information
NSString *kernelInfo = [userInfo objectForKey:@"kernelInfo"];
// Mobile device manufacturer
NSString *deviceManufacturer = [userInfo objectForKey:@"deviceManufacturer"];
// Build ID
NSString *fusedAppToken = [userInfo objectForKey:@"fusedAppToken"];
// Carrier identity number (PLMN code)
NSString *carrierPlmn = [userInfo objectForKey:@"carrierPlmn"];
//
// Respond to mobile app attacks and threats here
//
}];
[[NSNotificationCenter defaultCenter] addObserverForName: @"BlockedClipboardEvent" object:nil queue:nil usingBlock:^(NSNotification *note) {
NSDictionary *userInfo = [note userInfo];
if (userInfo == nil) {
return;
}
// "true" or "false"
NSString *blocked = [userInfo objectForKey:@"blocked"];
NSString *defaultMessage = [userInfo objectForKey:@"defaultMessage"];
NSString *timestamp = [userInfo objectForKey:@"timestamp"];
NSString *deviceID = [userInfo objectForKey:@"deviceID"];
NSString *deviceModel = [userInfo objectForKey:@"deviceModel"];
NSString *osVersion = [userInfo objectForKey:@"osVersion"];
NSString *kernelInfo = [userInfo objectForKey:@"kernelInfo"];
NSString *deviceManufacturer = [userInfo objectForKey:@"deviceManufacturer"];
NSString *fusedAppToken = [userInfo objectForKey:@"fusedAppToken"];
NSString *carrierPlmn = [userInfo objectForKey:@"carrierPlmn"];
//
// Respond to mobile app attacks and threats here
//
}];
[[NSNotificationCenter defaultCenter] addObserverForName: @"JailbrokenDevice" object:nil queue:nil usingBlock:^(NSNotification *note) {
if (userInfo == nil) {
return;
}
// Opaque identifier of root detection method
NSString *internalError = [userInfo objectForKey:@"internalError"];
NSString *defaultMessage = [userInfo objectForKey:@"defaultMessage"];
NSString *timestamp = [userInfo objectForKey:@"timestamp"];
NSString *deviceID = [userInfo objectForKey:@"deviceID"];
NSString *deviceModel = [userInfo objectForKey:@"deviceModel"];
NSString *osVersion = [userInfo objectForKey:@"osVersion"];
NSString *kernelInfo = [userInfo objectForKey:@"kernelInfo"];
NSString *deviceManufacturer = [userInfo objectForKey:@"deviceManufacturer"];
NSString *fusedAppToken = [userInfo objectForKey:@"fusedAppToken"];
NSString *carrierPlmn = [userInfo objectForKey:@"carrierPlmn"];
//
// Respond to mobile app attacks and threats here
//
}];
[[NSNotificationCenter defaultCenter] addObserverForName: @"SslCertificateValidationFailed" object:nil queue:nil usingBlock:^(NSNotification *note) {
if (userInfo == nil) {
return;
}
// A detailed message describing the detection
NSString *threatEventDetailedMessage = [userInfo objectForKey:@"DeveventDetailedErrorMessage"];
// The certificate sha1 fingerprint
NSString *certificateSHA1 = [userInfo objectForKey:@"certificateSHA1"];
// The certificate CN (common name)
NSString *certificateCN = [userInfo objectForKey:@"certificateCN"];
// The host that triggered the detection
NSString *host = [userInfo objectForKey:@"host"];
NSString *defaultMessage = [userInfo objectForKey:@"defaultMessage"];
NSString *timestamp = [userInfo objectForKey:@"timestamp"];
NSString *deviceID = [userInfo objectForKey:@"deviceID"];
NSString *deviceModel = [userInfo objectForKey:@"deviceModel"];
NSString *osVersion = [userInfo objectForKey:@"osVersion"];
NSString *kernelInfo = [userInfo objectForKey:@"kernelInfo"];
NSString *deviceManufacturer = [userInfo objectForKey:@"deviceManufacturer"];
NSString *fusedAppToken = [userInfo objectForKey:@"fusedAppToken"];
NSString *carrierPlmn = [userInfo objectForKey:@"carrierPlmn"];
//
// Respond to mobile app attacks and threats here
//
}];
[[NSNotificationCenter defaultCenter] addObserverForName: @"SslNonSslConnection" object:nil queue:nil usingBlock:^(NSNotification *note) {
if (userInfo == nil) {
return;
}
// A detailed message describing the detection
NSString *threatEventDetailedMessage = [userInfo objectForKey:@"DeveventDetailedErrorMessage"];
// The host that triggered the detection
NSString *host = [userInfo objectForKey:@"host"];
NSString *defaultMessage = [userInfo objectForKey:@"defaultMessage"];
NSString *timestamp = [userInfo objectForKey:@"timestamp"];
NSString *deviceID = [userInfo objectForKey:@"deviceID"];
NSString *deviceModel = [userInfo objectForKey:@"deviceModel"];
NSString *osVersion = [userInfo objectForKey:@"osVersion"];
NSString *kernelInfo = [userInfo objectForKey:@"kernelInfo"];
NSString *deviceManufacturer = [userInfo objectForKey:@"deviceManufacturer"];
NSString *fusedAppToken = [userInfo objectForKey:@"fusedAppToken"];
NSString *carrierPlmn = [userInfo objectForKey:@"carrierPlmn"];
//
// Respond to mobile app attacks and threats here
//
}];
[[NSNotificationCenter defaultCenter] addObserverForName: @"SslServerCertificatePinningFailed" object:nil queue:nil usingBlock:^(NSNotification *note) {
if (userInfo == nil) {
return;
}
// A detailed message describing the detection
NSString *threatEventDetailedMessage = [userInfo objectForKey:@"DeveventDetailedErrorMessage"];
// The certificate sha1 fingerprint
NSString *certificateSHA1 = [userInfo objectForKey:@"certificateSHA1"];
// The certificate CN (common name)
NSString *certificateCN = [userInfo objectForKey:@"certificateCN"];
// The host that triggered the detection
NSString *host = [userInfo objectForKey:@"host"];
NSString *defaultMessage = [userInfo objectForKey:@"defaultMessage"];
NSString *timestamp = [userInfo objectForKey:@"timestamp"];
NSString *deviceID = [userInfo objectForKey:@"deviceID"];
NSString *deviceModel = [userInfo objectForKey:@"deviceModel"];
NSString *osVersion = [userInfo objectForKey:@"osVersion"];
NSString *kernelInfo = [userInfo objectForKey:@"kernelInfo"];
NSString *deviceManufacturer = [userInfo objectForKey:@"deviceManufacturer"];
NSString *fusedAppToken = [userInfo objectForKey:@"fusedAppToken"];
NSString *carrierPlmn = [userInfo objectForKey:@"carrierPlmn"];
//
// Respond to mobile app attacks and threats here
//)
}];
[[NSNotificationCenter defaultCenter] addObserverForName: @"UrlWhitelistFailed" object:nil queue:nil usingBlock:^(NSNotification *note) {
if (userInfo == nil) {
return;
}
NSString *defaultMessage = [userInfo objectForKey:@"defaultMessage"];
NSString *timestamp = [userInfo objectForKey:@"timestamp"];
NSString *deviceID = [userInfo objectForKey:@"deviceID"];
NSString *deviceModel = [userInfo objectForKey:@"deviceModel"];
NSString *osVersion = [userInfo objectForKey:@"osVersion"];
NSString *kernelInfo = [userInfo objectForKey:@"kernelInfo"];
NSString *deviceManufacturer = [userInfo objectForKey:@"deviceManufacturer"];
NSString *fusedAppToken = [userInfo objectForKey:@"fusedAppToken"];
NSString *carrierPlmn = [userInfo objectForKey:@"carrierPlmn"];
//
// Respond to mobile app attacks and threats here
//
}];
[[NSNotificationCenter defaultCenter] addObserverForName: @"BlockedScreenCaptureEvent" object:nil queue:nil usingBlock:^(NSNotification *note) {
if (userInfo == nil) {
return;
}
NSString *defaultMessage = [userInfo objectForKey:@"defaultMessage"];
NSString *timestamp = [userInfo objectForKey:@"timestamp"];
NSString *deviceID = [userInfo objectForKey:@"deviceID"];
NSString *deviceModel = [userInfo objectForKey:@"deviceModel"];
NSString *osVersion = [userInfo objectForKey:@"osVersion"];
NSString *kernelInfo = [userInfo objectForKey:@"kernelInfo"];
NSString *deviceManufacturer = [userInfo objectForKey:@"deviceManufacturer"];
NSString *fusedAppToken = [userInfo objectForKey:@"fusedAppToken"];
NSString *carrierPlmn = [userInfo objectForKey:@"carrierPlmn"];
//
// Respond to mobile app attacks and threats here
//
}];
[[NSNotificationCenter defaultCenter] addObserverForName: @"SslIncompatibleCipher" object:nil queue:nil usingBlock:^(NSNotification *note) {
if (userInfo == nil) {
return;
}
// The Incompatible Cipher Id
NSString *incompatibleCipherId = [userInfo objectForKey:@"incompatibleCipherId"];
// The host that triggered the detection
NSString *host = [userInfo objectForKey:@"host"];
NSString *defaultMessage = [userInfo objectForKey:@"defaultMessage"];
NSString *timestamp = [userInfo objectForKey:@"timestamp"];
NSString *deviceID = [userInfo objectForKey:@"deviceID"];
NSString *deviceModel = [userInfo objectForKey:@"deviceModel"];
NSString *osVersion = [userInfo objectForKey:@"osVersion"];
NSString *kernelInfo = [userInfo objectForKey:@"kernelInfo"];
NSString *deviceManufacturer = [userInfo objectForKey:@"deviceManufacturer"];
NSString *fusedAppToken = [userInfo objectForKey:@"fusedAppToken"];
NSString *carrierPlmn = [userInfo objectForKey:@"carrierPlmn"];
//
// Respond to mobile app attacks and threats here
//
}];
[[NSNotificationCenter defaultCenter] addObserverForName: @"SslIncompatibleVersion" object:nil queue:nil usingBlock:^(NSNotification *note) {
if (userInfo == nil) {
return;
}
// The Incompatible SSL/TLS version
NSString *incompatibleSslVersion = [userInfo objectForKey:@"incompatibleSslVersion"];
// The host that triggered the detection
NSString *host = [userInfo objectForKey:@"host"];
NSString *defaultMessage = [userInfo objectForKey:@"defaultMessage"];
NSString *timestamp = [userInfo objectForKey:@"timestamp"];
NSString *deviceID = [userInfo objectForKey:@"deviceID"];
NSString *deviceModel = [userInfo objectForKey:@"deviceModel"];
NSString *osVersion = [userInfo objectForKey:@"osVersion"];
NSString *kernelInfo = [userInfo objectForKey:@"kernelInfo"];
NSString *deviceManufacturer = [userInfo objectForKey:@"deviceManufacturer"];
NSString *fusedAppToken = [userInfo objectForKey:@"fusedAppToken"];
NSString *carrierPlmn = [userInfo objectForKey:@"carrierPlmn"];
//
// Respond to mobile app attacks and threats here
//
}];
[[NSNotificationCenter defaultCenter] addObserverForName: @"SslInvalidCertificateChain" object:nil queue:nil usingBlock:^(NSNotification *note) {
if (userInfo == nil) {
return;
}
// A detailed message describing the detection
NSString *threatEventDetailedMessage = [userInfo objectForKey:@"DeveventDetailedErrorMessage"];
// The certificate sha1 fingerprint
NSString *certificateSHA1 = [userInfo objectForKey:@"certificateSHA1"];
// The certificate CN (common name)
NSString *certificateCN = [userInfo objectForKey:@"certificateCN"];
// The host that triggered the detection
NSString *host = [userInfo objectForKey:@"host"];
NSString *defaultMessage = [userInfo objectForKey:@"defaultMessage"];
NSString *timestamp = [userInfo objectForKey:@"timestamp"];
NSString *deviceID = [userInfo objectForKey:@"deviceID"];
NSString *deviceModel = [userInfo objectForKey:@"deviceModel"];
NSString *osVersion = [userInfo objectForKey:@"osVersion"];
NSString *kernelInfo = [userInfo objectForKey:@"kernelInfo"];
NSString *deviceManufacturer = [userInfo objectForKey:@"deviceManufacturer"];
NSString *fusedAppToken = [userInfo objectForKey:@"fusedAppToken"];
NSString *carrierPlmn = [userInfo objectForKey:@"carrierPlmn"];
//
// Respond to mobile app attacks and threats here
//
}];
[[NSNotificationCenter defaultCenter] addObserverForName: @"SslInvalidMinRSASignature" object:nil queue:nil usingBlock:^(NSNotification *note) {
if (userInfo == nil) {
return;
}
// A detailed message describing the detection
NSString *threatEventDetailedMessage = [userInfo objectForKey:@"DeveventDetailedErrorMessage"];
// The certificate sha1 fingerprint
NSString *certificateSHA1 = [userInfo objectForKey:@"certificateSHA1"];
// The certificate CN (common name)
NSString *certificateCN = [userInfo objectForKey:@"certificateCN"];
// The host that triggered the detection
NSString *host = [userInfo objectForKey:@"host"];
NSString *defaultMessage = [userInfo objectForKey:@"defaultMessage"];
NSString *timestamp = [userInfo objectForKey:@"timestamp"];
NSString *deviceID = [userInfo objectForKey:@"deviceID"];
NSString *deviceModel = [userInfo objectForKey:@"deviceModel"];
NSString *osVersion = [userInfo objectForKey:@"osVersion"];
NSString *kernelInfo = [userInfo objectForKey:@"kernelInfo"];
NSString *deviceManufacturer = [userInfo objectForKey:@"deviceManufacturer"];
NSString *fusedAppToken = [userInfo objectForKey:@"fusedAppToken"];
NSString *carrierPlmn = [userInfo objectForKey:@"carrierPlmn"];
//
// Respond to mobile app attacks and threats here
//
}];
[[NSNotificationCenter defaultCenter] addObserverForName: @"SslInvalidMinECCSignature" object:nil queue:nil usingBlock:^(NSNotification *note) {
if (userInfo == nil) {
return;
}
NSString *defaultMessage = [userInfo objectForKey:@"defaultMessage"];// message passed during fusion
// A detailed message describing the detection
NSString *threatEventDetailedMessage = [userInfo objectForKey:@"DeveventDetailedErrorMessage"];
// The certificate sha1 fingerprint
NSString *certificateSHA1 = [userInfo objectForKey:@"certificateSHA1"];
// The certificate CN (common name)
NSString *certificateCN = [userInfo objectForKey:@"certificateCN"];
// The host that triggered the detection
NSString *host = [userInfo objectForKey:@"host"];
NSString *defaultMessage = [userInfo objectForKey:@"defaultMessage"];
NSString *timestamp = [userInfo objectForKey:@"timestamp"];
NSString *deviceID = [userInfo objectForKey:@"deviceID"];
NSString *deviceModel = [userInfo objectForKey:@"deviceModel"];
NSString *osVersion = [userInfo objectForKey:@"osVersion"];
NSString *kernelInfo = [userInfo objectForKey:@"kernelInfo"];
NSString *deviceManufacturer = [userInfo objectForKey:@"deviceManufacturer"];
NSString *fusedAppToken = [userInfo objectForKey:@"fusedAppToken"];
NSString *carrierPlmn = [userInfo objectForKey:@"carrierPlmn"];
//
// Respond to mobile app attacks and threats here
//
}];
[[NSNotificationCenter defaultCenter] addObserverForName: @"SslInvalidMinDigest" object:nil queue:nil usingBlock:^(NSNotification *note) {
if (userInfo == nil) {
return;
}
// A detailed message describing the detection
NSString *threatEventDetailedMessage = [userInfo objectForKey:@"DeveventDetailedErrorMessage"];
// The certificate sha1 fingerprint
NSString *certificateSHA1 = [userInfo objectForKey:@"certificateSHA1"];
// The certificate CN (common name)
NSString *certificateCN = [userInfo objectForKey:@"certificateCN"];
// The host that triggered the detection
NSString *host = [userInfo objectForKey:@"host"];
NSString *defaultMessage = [userInfo objectForKey:@"defaultMessage"];
NSString *timestamp = [userInfo objectForKey:@"timestamp"];
NSString *deviceID = [userInfo objectForKey:@"deviceID"];
NSString *deviceModel = [userInfo objectForKey:@"deviceModel"];
NSString *osVersion = [userInfo objectForKey:@"osVersion"];
NSString *kernelInfo = [userInfo objectForKey:@"kernelInfo"];
NSString *deviceManufacturer = [userInfo objectForKey:@"deviceManufacturer"];
NSString *fusedAppToken = [userInfo objectForKey:@"fusedAppToken"];
NSString *carrierPlmn = [userInfo objectForKey:@"carrierPlmn"];
//
// Respond to mobile app attacks and threats here
//
}];
// Only available when ONEShield Threat Events are enabled
[[NSNotificationCenter defaultCenter] addObserverForName: @"AppIntegrityError" object:nil queue:nil usingBlock:^(NSNotification *note) {
if (userInfo == nil) {
return;
}
// The detected tampered component
NSString *reason = [userInfo objectForKey:@"reason"];
NSString *defaultMessage = [userInfo objectForKey:@"defaultMessage"];
NSString *timestamp = [userInfo objectForKey:@"timestamp"];
NSString *deviceID = [userInfo objectForKey:@"deviceID"];
NSString *deviceModel = [userInfo objectForKey:@"deviceModel"];
NSString *osVersion = [userInfo objectForKey:@"osVersion"];
NSString *kernelInfo = [userInfo objectForKey:@"kernelInfo"];
NSString *deviceManufacturer = [userInfo objectForKey:@"deviceManufacturer"];
NSString *fusedAppToken = [userInfo objectForKey:@"fusedAppToken"];
NSString *carrierPlmn = [userInfo objectForKey:@"carrierPlmn"];
//
// Respond to mobile app attacks and threats here
//
}];
Threat-Event Failsafe Enforcement
Failsafe Enforcement provides app developers with the ability to manage when Appdome enforces specific detections. To utilize this feature, follow the steps below:
Set the Threat Event of the selected feature to “In-App Detection” mode.
Enable the Threat-Event Failsafe Enforcement option.
Once you have received the Threat Event and performed the necessary internal logic, you should post a notification named “EnforceThreatEvent” using NSNotificationCenter with the userInfo received from the Threat Event. Below is the code snippet required for using Threat Event in Failsafe Enforcement configuration, with the JailbrokenDevice event as an example:
[[NSNotificationCenter defaultCenter] addObserverForName: @"JailbrokenDevice" object:nil queue:nil usingBlock:^(NSNotification *note) {
NSDictionary *userInfo = [note userInfo];
if (userInfo == nil) {
return;
}
//
// Respond to mobile app attacks and threats here
//
// Notify Appdome to enforce the Threat Event after Threat Event is handled
[[NSNotificationCenter defaultCenter] postNotificationName:@"EnforceThreatEvent" object:nil userInfo:userInfo];
}];
Special Considerations for Using Threat Events with Native iOS Apps
Meta-Data for Mobile Application Threat-Events and Threat-Scores
Below is the list of metadata that can be associated with each mobile application, Threat-Event and Threat-Score in Native iOS Apps.
Threat-Event Context Keys
message
Message displayed for the user on event
failSafeEnforce
Timed enforcement against the identified threat
externalID
The external ID of the event which can be listened via Threat Events
osVersion
OS version of the current device
deviceModel
Current device model
deviceManufacturer
The manufacturer of the current device
fusedAppToken
The task ID of the Appdome fusion of the currently running app
kernelInfo
Info about the kernel: system name, node name, release, version and machine.
deviceID
Current device ID
reasonCode
Reason code of the occurred event
buildDate
Appdome fusion date of the current application
devicePlatform
OS name of the current device
updatedOSVersion
Is the OS version up to date
timeZone
Time zone
deviceFaceDown
Is the device face down
locationLong
Location longitude conditioned by location permission
locationLat
Location latitude conditioned by location permission
locationState
Location state conditioned by location permission
wifiSsid
Wifi SSID
wifiSsidPermissionStatus
Wifi SSID permission status
Some or all of the meta-data for each mobile application Threat-Event and Threat-Score can be consumed in Native iOS Apps at the discretion of the mobile developer and used, in combination with other mobile application data, to adapt the business logic or user experience when one or more attacks or threats are present.
Using Conditional Enforcement for Mobile Application Threat-Events and Threat-Scores
Conditional Enforcement is an extension to Appdome’s mobile application Threat-Event framework. By using conditional enforcement, developers can control when Appdome enforcement of each mobile application protection takes place or invoke backup, failsafe, and enforcement to any in-app enforcement used by the mobile developer.
For more information on using conditional enforcement with your Threat-Event implementation, please contact support.appdome.com.
Verifying Threat Events in Native iOS Apps
After you have implemented the required Threat-Event code in your Native iOS Apps, you can confirm that your Threat-Event implementation(s) is properly recognized by the Appdome protections in the Native iOS Apps. To do that, review the Certified Secure™ DevSecOps certificate for your build on Appdome.
In the Certified Secure DevSecOps certificate, a correct implementation of Threat-Events in your mobile application looks as seen below.
In the Certified Secure DevSecOps certificate, an incorrect implementation of Threat-Events in your mobile application looks as seen below.
Questions Using Threat-Events™ in Native iOS Apps ?
If you have specific questions about implementing Threat-Events or Threat-Scores in Native iOS Apps, please fill out the inquiry form on the right-hand side of this knowledge base article or contact support.appdome.com. That is it – Enjoy Appdome with Threat-Events™ in your app.
Thanks for visiting Appdome! Our mission is to secure every app on the planet by making mobile app security easy. We hope we’re living up to the mission with your project. If you don’t already have an account, you can sign up for free.
Want a Demo?
Threat-Events™ UX/UI Control
TomWe're here to help
We'll get back to you in 24 hours to schedule your demo.