How to create a native iOS app that can read Search Ads Attribution API information
TL;DR
In this post, I’ll show you how easy it is to create a native iOS app that can read Search Ads Attribution API information.
You can check out the full working code on Github.
What is Search Ads App Attribution?
From Apple’s documentation:
Search Ads App Attribution enables developers to track and attribute app downloads that originate from Search Ads campaigns. With Search Ads App Attribution, iOS developers have the ability to accurately measure the lifetime value of newly acquired users and the effectiveness of their advertising campaigns.
Steps to recreate this yourself
- Create a new blank project in Xcode
- Add a label on the
Main.storyboard:
-
Create an Interface Builder Outlet for this label and name it
searchAdsInfoLabel. For those not familiar with iOS development, this is done by pressingCtrland dragging the label into theViewController.swiftfile. - Once done, you should see this in your
ViewController.swiftfile:
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var searchAdsInfoLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
- Next, import
iAdto your project:

- import
iAdin yourViewController.swiftfile:import iAd.
Add the following function to the ViewController.swift file:
func getSearchAdsInfo() {
ADClient.shared().requestAttributionDetails({ (attributionDetails, error) in
if error == nil {
for (type, adDictionary) in attributionDetails! {
print(type);
print(adDictionary);
let attribution = adDictionary as? Dictionary<AnyHashable, Any>;
let iadAdgroupId = attribution?["iad-adgroup-id"] as? String
let iadAdgroupName = attribution?["iad-adgroup-name"] as? String
let iadAttribution = attribution?["iad-attribution"] as? String
let iadCampaignId = attribution?["iad-campaign-id"] as? String
let iadCampaignName = attribution?["iad-campaign-name"] as? String
let iadClickDate = attribution?["iad-click-date"] as? String
let iadConversionDate = attribution?["iad-conversion-date"] as? String
let iadCreativeId = attribution?["iad-creative-id"] as? String
let iadCreativeName = attribution?["iad-creative-name"] as? String
let iadKeyword = attribution?["iad-keyword"] as? String
let iadLineitemId = attribution?["iad-lineitem-id"] as? String
let iadLineitemName = attribution?["iad-lineitem-name"] as? String
let iadOrgName = attribution?["iad-org-name"] as? String
self.searchAdsInfoLabel.text = "iad-adgroup-id: \(iadAdgroupId ?? "")\niad-adgroup-name: \(iadAdgroupName ?? "")\niad-attribution: \(iadAttribution ?? "")\niad-campaign-id: \(iadCampaignId ?? "")\niad-campaign-name: \(iadCampaignName ?? "")\niad-click-date: \(iadClickDate ?? "")\niad-conversion-date: \(iadConversionDate ?? "")\niad-creative-id: \(iadCreativeId ?? "")\niad-creative-name: \(iadCreativeName ?? "")\niad-keyword: \(iadKeyword ?? "")\niad-lineitem-id: \(iadLineitemId ?? "")\niad-lineitem-name: \(iadLineitemName ?? "")\niad-org-name: \(iadOrgName ?? "")"
}
}
})
}
Call this function in the viewDidLoad() method.
The full code listing, of the ViewController.swift file should now look like this:
import UIKit
import iAd
class ViewController: UIViewController {
@IBOutlet weak var searchAdsInfoLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
getSearchAdsInfo();
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func getSearchAdsInfo() {
ADClient.shared().requestAttributionDetails({ (attributionDetails, error) in
if error == nil {
for (type, adDictionary) in attributionDetails! {
print(type);
print(adDictionary);
let attribution = adDictionary as? Dictionary<AnyHashable, Any>;
let iadAdgroupId = attribution?["iad-adgroup-id"] as? String
let iadAdgroupName = attribution?["iad-adgroup-name"] as? String
let iadAttribution = attribution?["iad-attribution"] as? String
let iadCampaignId = attribution?["iad-campaign-id"] as? String
let iadCampaignName = attribution?["iad-campaign-name"] as? String
let iadClickDate = attribution?["iad-click-date"] as? String
let iadConversionDate = attribution?["iad-conversion-date"] as? String
let iadCreativeId = attribution?["iad-creative-id"] as? String
let iadCreativeName = attribution?["iad-creative-name"] as? String
let iadKeyword = attribution?["iad-keyword"] as? String
let iadLineitemId = attribution?["iad-lineitem-id"] as? String
let iadLineitemName = attribution?["iad-lineitem-name"] as? String
let iadOrgName = attribution?["iad-org-name"] as? String
self.searchAdsInfoLabel.text = "iad-adgroup-id: \(iadAdgroupId ?? "")\niad-adgroup-name: \(iadAdgroupName ?? "")\niad-attribution: \(iadAttribution ?? "")\niad-campaign-id: \(iadCampaignId ?? "")\niad-campaign-name: \(iadCampaignName ?? "")\niad-click-date: \(iadClickDate ?? "")\niad-conversion-date: \(iadConversionDate ?? "")\niad-creative-id: \(iadCreativeId ?? "")\niad-creative-name: \(iadCreativeName ?? "")\niad-keyword: \(iadKeyword ?? "")\niad-lineitem-id: \(iadLineitemId ?? "")\niad-lineitem-name: \(iadLineitemName ?? "")\niad-org-name: \(iadOrgName ?? "")"
}
}
})
}
}
After you run the project (make sure you run it on your device, as you won’t get any data back on the simulator) you should get some stub data that Apple returns:

Conclusion
If you’re utilizing Apple’s Search Ads, then I hope this helped you see how easy it is to fetch Search Ads App Attribution information in your app.
Of course, once you get the data, you should send this to your server for saving and further analysis.
How to create a #native #iOS app that can read Search Ads Attribution API information #SearchAdsAttribution https://t.co/6HDQBtzmM7
— Nikola Brežnjak (@HitmanHR) September 10, 2017





Thanks man, helped a lot
You’re welcome ?