Secure signals are encoded data that is collected on the client device and
shared with select bidders. This guide shows you how to collect and send secure
signals to Google Ad Manager using the IMA SDK.
The secure signals API requires version 3.18.1
or higher of the IMA SDK for iOS.
To use secure signals, you must deploy a signal collector
adapter class in your app
to collect signals, encode them, and pass them to the IMA SDK.
Follow your third-party provider's instructions to set up an account with them,include frameworks,
and set up their secure signals adapter in your app.
The IMA SDK for iOS automatically
initializes each secure signals adapter, without any additional changes to your
code.
Here's an example of how you might add a secure signals adapter to your project:
Send custom data
In addition to using a third-party signal provider, you can also collect,
encode, and send signals with custom data. Before you can send secure signals
with custom data, you must turn on custom signals in Ad Manager.
For each ad request, create anIMASecureSignalsobject containing your
encoded custom data as a string. Then, add theIMASecureSignalsobject to
your ad request by calling theIMAAdsRequest.secureSignalsattribute.
Here are samples in Objective-C and Swift:
Objective-C
BasicExample/ViewController.m
...-(void)requestAds{// Create an ad display container for ad rendering.IMAAdDisplayContainer*adDisplayContainer=[[IMAAdDisplayContaineralloc]initWithAdContainer:self.videoViewviewController:selfcompanionSlots:nil];// Create an ad request with our ad tag, display container, and optional user context.IMAAdsRequest*request=[[IMAAdsRequestalloc]initWithAdTagUrl:kTestAppAdTagUrladDisplayContainer:adDisplayContainercontentPlayhead:self.contentPlayheaduserContext:nil];IMASecureSignals*signals=[[IMASecureSignalsalloc]initWithCustomData:@"My encoded signal string"];request.secureSignals=signals;[self.adsLoaderrequestAdsWithRequest:request];}...
Swift
BasicExample/ViewController.swift
...privatefuncrequestAds(){// Create ad display container for ad rendering.letadDisplayContainer=IMAAdDisplayContainer(adContainer:videoView,viewController:self,companionSlots:nil)// Create an ad request with our ad tag, display container, and optional user context.letrequest=IMAAdsRequest(adTagUrl:ViewController.testAppAdTagURL,adDisplayContainer:adDisplayContainer,contentPlayhead:contentPlayhead,userContext:nil)letsignals=IMASecureSignals(customData:"My encoded signal string")request.secureSignals=signalsadsLoader.requestAds(with:request)}...
[[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Missing the information I need","missingTheInformationINeed","thumb-down"],["Too complicated / too many steps","tooComplicatedTooManySteps","thumb-down"],["Out of date","outOfDate","thumb-down"],["Samples / code issue","samplesCodeIssue","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2025-09-05 UTC."],[[["\u003cp\u003eSecure signals, encoded data from client devices, are shared with select bidders to enhance ad targeting in Google Ad Manager using the IMA SDK.\u003c/p\u003e\n"],["\u003cp\u003eYou must deploy a signal collector adapter class in your app to collect, encode, and transmit signals to the IMA SDK, often leveraging a third-party provider for setup and integration.\u003c/p\u003e\n"],["\u003cp\u003eGoogle Ad Manager allows for custom data to be included in secure signals, enabling the transmission of specific encoded information alongside signals from third-party providers; this is a limited beta feature, and you would need to contact your Google Account Manager to check on its availability and to request access.\u003c/p\u003e\n"]]],[],null,["Select platform: [HTML5](/interactive-media-ads/docs/sdks/html5/client-side/secure-signals \"View this page for the HTML5 platform docs.\") [Android](/interactive-media-ads/docs/sdks/android/client-side/secure-signals \"View this page for the Android platform docs.\") [iOS](/interactive-media-ads/docs/sdks/ios/client-side/secure-signals \"View this page for the iOS platform docs.\") [tvOS](/interactive-media-ads/docs/sdks/tvos/client-side/secure-signals \"View this page for the tvOS platform docs.\")\n\n\u003cbr /\u003e\n\nSecure signals are encoded data that is collected on the client device and\nshared with select bidders. This guide shows you how to collect and send secure\nsignals to Google Ad Manager using the IMA SDK.\n\nThe secure signals API requires version 3.18.1\nor higher of the IMA SDK for iOS.\n\nTo select signals and bidders, and enable secure signal sharing, see [Share\nsecure signals with bidders](//support.google.com/admanager/answer/10488752).\n\nUse a third-party signal provider\n\nTo use secure signals, you must deploy a signal collector\n\nadapter class in your app\n\nto collect signals, encode them, and pass them to the IMA SDK.\n\n\u003cbr /\u003e\n\nFollow your third-party provider's instructions to set up an account with them,\n\n[include frameworks](//developer.apple.com/library/archive/documentation/MacOSX/Conceptual/BPFrameworks/Tasks/IncludingFrameworks.html),\n\nand set up their secure signals adapter in your app.\n\nThe IMA SDK for iOS automatically\ninitializes each secure signals adapter, without any additional changes to your\ncode.\n\nHere's an example of how you might add a secure signals adapter to your project:\n\n\u003cbr /\u003e\n\nSend custom data\n\nIn addition to using a third-party signal provider, you can also collect,\nencode, and send signals with custom data. Before you can send secure signals\nwith custom data, you must turn on custom signals in Ad Manager.\n\n\u003cbr /\u003e\n\nFor each ad request, create an `IMASecureSignals` object containing your\nencoded custom data as a string. Then, add the `IMASecureSignals` object to\nyour ad request by calling the `IMAAdsRequest.secureSignals` attribute.\n\nHere are samples in Objective-C and Swift: \n\nObjective-C\n\n**BasicExample/ViewController.m** \n\n ...\n - (void)requestAds {\n // Create an ad display container for ad rendering.\n IMAAdDisplayContainer *adDisplayContainer =\n [[IMAAdDisplayContainer alloc] initWithAdContainer:self.videoView\n viewController:self\n companionSlots:nil];\n // Create an ad request with our ad tag, display container, and optional user context.\n IMAAdsRequest *request = [[IMAAdsRequest alloc] initWithAdTagUrl:kTestAppAdTagUrl\n adDisplayContainer:adDisplayContainer\n contentPlayhead:self.contentPlayhead\n userContext:nil];\n IMASecureSignals \\*signals =\n \\[\\[IMASecureSignals alloc\\] initWithCustomData:@\"My encoded signal string\"\\];\n request.secureSignals = signals;\n [self.adsLoader requestAdsWithRequest:request];\n }\n ...\n\nSwift\n\n**BasicExample/ViewController.swift** \n\n ...\n private func requestAds() {\n // Create ad display container for ad rendering.\n let adDisplayContainer = IMAAdDisplayContainer(\n adContainer: videoView, viewController: self, companionSlots: nil)\n // Create an ad request with our ad tag, display container, and optional user context.\n let request = IMAAdsRequest(\n adTagUrl: ViewController.testAppAdTagURL,\n adDisplayContainer: adDisplayContainer,\n contentPlayhead: contentPlayhead,\n userContext: nil)\n let signals = IMASecureSignals(customData: \"My encoded signal string\")\n request.secureSignals = signals\n adsLoader.requestAds(with: request)\n }\n ..."]]