苏州网站建设品牌,网站建站网站80s隐秘而伟大,湖南怀化,西安个人网站建设AdServices framework 是 Apple 专门为 ASA 提供的归因框架 。尤其在ATT 政策推出以后#xff0c;app 获取用户 IDFA 的比例大幅降低#xff0c;传统的依靠IDFA 的方法也无法准确归因。
但是 Apple 为 ASA 开了一个后门#xff0c;其他广告渠道无法获取用户的 IDFA 作为身份…AdServices framework 是 Apple 专门为 ASA 提供的归因框架 。尤其在ATT 政策推出以后app 获取用户 IDFA 的比例大幅降低传统的依靠IDFA 的方法也无法准确归因。
但是 Apple 为 ASA 开了一个后门其他广告渠道无法获取用户的 IDFA 作为身份标识符进行归因而 ASA 可以获取一个甚至比 IDFA 更好的用户token 进行归因-因为即便 ATT 之前用户在 iPhone 的设置也会导致无法完全获取 IDFA但是 ASA 的用户 token 只要接入 AdServicesframework就可以获取到。
另外要注意的是除了 AdServices framework ASA 还有一个 iAdframework。但是后者仅适用于 ioS 14.3 之前版本且此框架已经停用iOS 14.3 之前的用户占比也很小所以不接入对归因也没有太大影响所以这节课不会涉及 iAd framework。
官方文档 https://ads.apple.com/cn/help/reporting/0028-apple-ads-attribution-api
AdServices 接入目的 通过 AdServices framework可以让我们对每一个激活用户获取一个Token 标识符用此 Token 可以得知该用户是否点击过 ASA 广告、点击过那个广告系列/广告组/关键词/素材等广告信息。
AdServices 接入步骤 1.选择项目主文件-TARGETS-General 2.入 AdServices framework 3.进入 link binary with Libraries 将 AdServices 改为 optional 4.导入AdServices framework 5.添加获取用户 Token 的代码 6.更新 App 并发布至 App Store
AdServices 接入流程 AdServices归因和iAd归因集成
前提AdServices归因框架的集成必须是iOS14.3以上版本xcode版本12.3以上旧版本依旧使⽤iAd 归因框架。
第一步找到framework的添加入 添加framework
第二步分别搜索AdServices.framework、AdSupport.framework、iAd.framework进行添加 AdServices.framework AdSupport.framework iAd.framework
第三步在Build Phases中Link Binary With Libraries 修改 AdServices.framework、AdSupport.framework、iAd.framework的类型为Optional AdServices.framework、AdSupport.framework、iAd.framework的类型为Optional
第四部将AdServices.framework、AdSupport.framework、iAd.framework的头文件加入到项目
#pragma mark -- 归因
#import iAd/iAd.h
#import AdServices/AdServices.h
#import AppTrackingTransparency/AppTrackingTransparency.h
添加头文件
第五步代码集成,可在AppDelegate中添加
5.1 AdServices获取token
(void)getAdToken
{if (available(iOS 14.3, *)) {NSError *error;NSString *token [AAAttribution attributionTokenWithError:error];if (token ! nil) {// 发送POST请求归因数据[self sendToken:[self getANullableString:token content:token]completeBlock:^(NSDictionary *attrData) {NSLog(成功14.3 Dict: %, attrData);//可将数据发送给服务端}];}} else {// 老版本请求if ([[ADClient sharedClient]respondsToSelector:selector(requestAttributionDetailsWithBlock:)]) {NSLog(LogAdsiAd called);[[ADClient sharedClient]requestAttributionDetailsWithBlock:^(NSDictionary *attrData, NSError *error) {//异步会延后NSLog(成功14- Dict: %, attrData);//可将数据发送给服务端// ... ...}];}}
} 5.2 AdServices获取归因数据
/** 读取可能为空的字符串*/
-(nullable NSString *)getANullableString:(NSString *)desc content:(NSString *)content{if(content nil){return ;}return [NSString stringWithFormat:%, content];
} /** 发送归因token得到数据 */
-(void)sendToken:(NSString *)token completeBlock:(void(^)(NSDictionary* data))completeBlock{NSString *url [NSString stringWithFormat:https://api-adservices.apple.com/api/v1/];NSMutableURLRequest *request [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:url]];request.HTTPMethod POST;[request addValue:text/plain forHTTPHeaderField:Content-Type];NSData* postData [token dataUsingEncoding:NSUTF8StringEncoding];[request setHTTPBody:postData];NSURLSession *session [NSURLSession sharedSession];NSURLSessionDataTask *dataTask [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response,NSError * _Nullable error) {NSDictionary * result NULL;if (error) {//请求失败NSLog(请求失败LogAdssendToken ERR);if (completeBlock) {NSMutableDictionary *nulldict [NSMutableDictionary dictionary];completeBlock(nulldict);}}else{// 请求成功NSLog(请求成功);NSError *resError;NSMutableDictionary *resDic [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:resError];result [[NSDictionary alloc] initWithDictionary:resDic];if (completeBlock) {completeBlock(result);}}}];[dataTask resume];
}5.3 AdServices 返回归因数据包示例
经测试IDFA允许用户跟踪后得到的数据是详细数据包
{
adGroupId 1234567890;
attribution 1;
campaignId 1234567890;
clickDate 2022-04-27T07:59Z;
conversionType Download;
countryOrRegion US;
creativeSetId 1234567890;
keywordId 12323222;
orgId 1234567890;
}
未允许得到的数据是标准数据包没有clickDate字段
{
attribution: true,
orgId: 40669820,
campaignId: 542370539,
conversionType: Download,
adGroupId: 542317095,
countryOrRegion: US,
keywordId: 87675432,
creativeSetId: 542317136
} 5.4 iAd 代码
// 老版本请求
if ([[ADClient sharedClient]respondsToSelector:selector(requestAttributionDetailsWithBlock:)]) {NSLog(LogAdsiAd called);[[ADClient sharedClient]requestAttributionDetailsWithBlock:^(NSDictionary *attrData, NSError *error) {//异步会延后NSLog(成功14- Dict: %, attrData);//可将数据发送给服务端// ... ...}];
} 5.5iAd返回归因数据包示例
{
iad-adgroup-id 1234567890;
iad-adgroup-name AdGroupName;
iad-attribution true;
iad-campaign-id 1234567890;
iad-campaign-name CampaignName;
iad-click-date 2022-04-27T07:31:36Z;
iad-conversion-date 2022-04-27T07:31:36Z;
iad-conversion-type Download;
iad-country-or-region US;
iad-creativeset-id 1234567890;
iad-creativeset-name CreativeSetName;
iad-keyword Keyword;
iad-keyword-id 12323222;
iad-keyword-matchtype Broad;
iad-lineitem-id 1234567890;
iad-lineitem-name LineName;
iad-org-id 1234567890;
iad-org-name OrgName;
iad-purchase-date 2022-04-27T07:31:36Z;
};