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 pressingCtrl
and dragging the label into theViewController.swift
file. - Once done, you should see this in your
ViewController.swift
file:
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
iAd
to your project:
- import
iAd
in yourViewController.swift
file: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