Hello. I would like to ask for an assistance with testing AdAttributionKit flow that seems not working.
Goal: to close the AdAttributionKit logic flow loop starting from presenting and handling Ad in a publisher app and ending with receiving a postback request on my end point.
Problem: No postback request is received on my configured domain. It looks like AdAttributionKit cannot connect between AppImpression invocation in Publisher App and updating postback from the Advertised App, hence no update postback request are transmitted to my endpoint.
What was done:
- Testing device
- iPhone 13, iOS 18.0.1
- Production Apple ID
- AdAttributionKit Developer Mode is enabled
- iPhone is reset and restarted
- Publisher App
-
Test publisher application was created and configured (according to Apple's documentation [https://developer.apple.com/documentation/adattributionkit/configuring-a-publisher-app]) with the following:
AdNetworkIdentifiers
item was added to app's Info.plist with number of Ad Network IDs. I tried to use in my tests (used below insted of the <MY-NETWORK-ID-PLACEHOLDER> placeholder):- Registered SKAdNetwork Ad Network ID that ends with
.skadnetwork
- Not registered Ad Network ID that ends with
.adattributionkit
- Registered SKAdNetwork Ad Network ID that ends with
-
JWS Impression was created with the following
-
JWS Header: {"kid" : "<MY-NETWORK-ID-PLACEHOLDER>","alg" : "ES256"}
-
JWS Payload: {"impression-type" : "app-impression","impression-identifier" : "9547875E-C052-44CD-8CB9-193978CC5AB7", "timestamp" : 1729162517373,"publisher-item-identifier" : 0,"source-identifier" : 1111,"ad-network-identifier" : "<MY-NETWORK-ID-PLACEHOLDER>","advertised-item-identifier" : 1125517808}
-
JWS Data: "BASE64(JWS-Header)"."BASE64(JWS-Payload)"."SIGNED("BASE64(JWS-Header).BASE64(JWS-Payload)")"
-
Signing was done with temporary key (created every time the JWS is composed) by the following:
let signingInput = "\(headerBase64String).\(payloadBase64String)" let privateKey = Curve25519.Signing.PrivateKey() var encodedSignature = "" do { let signature = try privateKey.signature(for: Data(signingInput.utf8)) encodedSignature = base64UrlEncode(signature) } catch { print("Error signing JWS: \(error.localizedDescription)") }
-
-
UIEventAttributionView (with UITapGestureRecognizer) was added to my ViewController's main view and in a handling method of TAP event, AppImpression was created baased on JWS above and
handleTap()
method of this AppImpression instance was called. -
AppImpression was tapped and AppStore has been launched (because to this moment no advertised app with <MY-ADVERTISED-APP-APPSTORE-ID-PLACEHOLDER> was installed on a device):
attributionkitd Preflighting impression
AAKPubApp Connection established
attributionkitd Validated impression for advertised app: <MY-ADVERTISED-APP-APPSTORE-ID-PLACEHOLDER>
attributionkitd No distributor bundle ID received from app fetch
attributionkitd Distributor metadata cached for item ID <MY-ADVERTISED-APP-APPSTORE-ID-PLACEHOLDER>
attributionkitd Is anything happening?
attributionkitd Processing tap
attributionkitd Successfully validated publisher application
attributionkitd Successfully finalized click through impression
attributionkitd Impression is not eligible for re-engagement
attributionkitd Launching distributor for itemID: <MY-ADVERTISED-APP-APPSTORE-ID-PLACEHOLDER>
attributionkitd [0x70008b340] activating connection: mach=false listener=false peer=false name=(anonymous)
attributionkitd Distributor launch completed for item ID: <MY-ADVERTISED-APP-APPSTORE-ID-PLACEHOLDER>
- Advertised App
-
Advertised App is an existing application on the AppStore. It was configured according Apple's documentation [https://developer.apple.com/documentation/adattributionkit/configuring-an-advertised-app].
-
AttributionCopyEndpoint key with my domain ("https://<MY_DOMAIN_PLACEHOLDER>.com") was added to app's Info.plist
-
EligibleForAdAttributionKitReengagementPostbackCopies key with "YES" value was added to Info.plist as well.
-
Number of postback method calls were added to the application in different places including
application:didFinishLaunchingWithOptions
. -
Used AdAttributionKit method -
(updateConversionValue(_:coarseConversionValue:lockPostback:))
[https://developer.apple.com/documentation/adattributionkit/postback/updateconversionvalue(_:coarseconversionvalue:lockpostback:)] -
Application is written in Objective-C while using AdAttributionKit via Swift-to-ObjC regular bridging.
-
I tried to use Advertised App in the following ways:
- To run it from Xcode. This way, when the advertised app is already installed, AppImpression tap in the publisher App doesn't recognize the Advertised App is installed and launches AppStore.
- To install it from TestFlight. This way, AppImpression tap in the publisher App successfully recognizes the Advertised App is installed and launches it.
- Both ways yield the same result - explanation below.
-
Advertised App launched - while calling update postback method in
application:didFinishLaunchingWithOptions
attributionkitd Updating postback
attributionkitd Queueing update postback
attributionkitd [TXNf0dc] 🐏 Beginning transaction (Task runner: atomic)
attributionkitd Begin update postback
<MY-APPLICATION-NAME-PLACEHOLDER> Connection established
attributionkitd [TXN5421] 🐏 Ending transaction (<private>) (<private>)
attributionkitd Retrieved conversion window thresholds: <private>
attributionkitd [TXNf0dc] 🐏 Ending transaction (<private>) (<private>)
...
attributionkitd Calling launch handler for com.apple.attributionkitd.development-postback-transmission
attributionkitd Begin task for identifier: com.apple.attributionkitd.development-postback-transmission
attributionkitd Running barktivity: com.apple.attributionkitd.development-postback-transmission
attributionkitd [TXN46f0] 🐏 Beginning transaction (<private>)
attributionkitd Found 0 postbacks eligible for transmission for environments: <private>
attributionkitd Postback transmission completed
attributionkitd [TXN46f0] 🐏 Ending transaction (<private>) (<private>)
attributionkitd Marking task <BGRepeatingSystemTask: com.apple.attributionkitd.development-postback-transmission> complete
attributionkitd Task completed for identifier: com.apple.attributionkitd.development-postback-transmission
The problem I can see here is in the following line:
attributionkitd Found 0 postbacks eligible for transmission for environments: <private>
It looks like AdAttributionKit cannot connect between AppImpression invocation in Publisher App and updating postback from the Advertised App.
Please correct me in case I'm doing anything wrong or missing anything.
Thank you very much.