#ios #cocoa-touch #apple-search-ads
#iOS #cocoa-touch #apple-search-ads
Вопрос:
Вот код, который я использую. Как я могу протестировать attributionDetails
от Apple, чтобы убедиться, что мой код API атрибуции поисковой рекламы работает должным образом? Apple практически не предоставляет подробностей (https://searchads.apple.com/help/measure-results/#attribution-api) о том, как разработчики могут выполнить некоторые тестовые фиктивные преобразования для тестирования.
(void)conversionTracking
{
if ([[ADClient sharedClient] respondsToSelector:@selector(requestAttributionDetailsWithBlock:)])
{
// iOS 10 call exists
[[ADClient sharedClient] requestAttributionDetailsWithBlock:^(NSDictionary *attributionDetails, NSError *error) {
if (error) {
NSLog(@"Request Search Ads attributes failed with error: %@", error.description);
if (error.code == ADClientErrorLimitAdTracking) {
NSLog(@"Limit Ad Tracking is enabled for this device.");
}
}
else {
NSLog(@"Search Ads attributes: %@", attributionDetails);
// Found details, track the purchase.
NSString *searchAdsCampaign = @"";
// Check value for "iad-attribution":
if ([attributionDetails valueForKey:@"iad-attribution"] != nil) {
// Check value:
if ([[attributionDetails valueForKey:@"iad-attribution"] boolValue]) {
// Get campaign name:
if ([attributionDetails valueForKey:@"iad-campaign-name"] != nil) {
NSString *campaignName = [attributionDetails valueForKey:@"iad-campaign-name"];
// Exclude Apple test data, where value is "CampaignName":
if ([campaignName isEqualToString:@"CampaignName"]) {
searchAdsCampaign = @"No Campaign";
}
else {
searchAdsCampaign = campaignName;
}
}
else {
// Key not found:
searchAdsCampaign = @"Error";
}
}
else {
// Value "false":
searchAdsCampaign = @"No Campaign";
}
}
else {
// Key not found:
searchAdsCampaign = @"Error";
}
// TRACK IT HERE. Pass up searchAdsCampaign for tracking to my server.
}
}];
}
}
Ответ №1:
Есть 2 способа протестировать это:
-
Модульный тест: попробуйте OCMock протестировать его и вернуть фиктивные данные, которые Apple документирует в своих документах
-
Тестирование на устройствах (iOS 9 и выше): запустите свой код на устройствах. Вы должны иметь возможность получать фиктивные данные от Apple. Я мог видеть фиктивные данные о версиях для разработки и тестирования.
Обратите внимание, что вам может потребоваться использовать более старые API для iOS 8 и iOS 7 :
— Определение appinstallationattributionwithcompletionhandler:
если ваше приложение поддерживает более старые версии iOS, проверьте, реагирует ли ADClient на описанные выше методы. Кроме того, attributionDetails содержит словарь меньшего размера с ключом «Version3.1», поэтому ваш код неверен (как указано в официальной документации):
{ “Version3.1” =
{
“iad-attribution” = true;
“iad-org-name” = “Light Right”;
“iad-campaign-id” = 15292426;
“iad-campaign-name” = “Light Bright Launch”;
“iad-conversion-date” = “2016-06-14T17:18:07Z”;
“iad-click-date” = “2016-06-14T17:17:00Z”;
“iad-adgroup-id” = 15307675;
“iad-adgroup-name” = “LightRight Launch Group”;
“iad-keyword” = “light right”;
};
}
Вам нужно будет сначала получить внутренний справочник, прежде чем искать значение iad-attribution.
Комментарии:
1. какие параметры следует передать в URL, если я хочу использовать свою пользовательскую кампанию для получения вышеуказанных сведений? в настоящее время я передаю эти фиктивные параметры publisher_id = 6136 amp; site_id = 1863 amp; campaign_id = 234595 amp; pt = 4567 amp; ct = 9821 Я не получаю ни одного из этих значений параметров, кроме фиктивных значений, упомянутых ниже iad-adgroup-id = 1234567890 iad-adgroup-name = AdGroupName iad-attribution = true iad-campaign-id = 1234567890 iad-campaign-name = Имярек кампании iad-click-date = «2019-11-06T07:51:48Z» iad-conversion-date = «2019-11-06T07:51:48Z» iad-keyword = Ключевое слово iad-keyword-id = KeywordID iad-org-name» = Название организации
2. В URL нет параметров для передачи. Вы должны вызвать методы, представленные в документации выше, и посмотреть на ответ. В процессе разработки вы получите только фиктивные данные, как упоминалось выше.
3. Что, если я хочу перейти на производство, потому что всегда получаю фиктивные данные для разработки.
Ответ №2:
Проведите небольшое тестирование на устройстве, и я думаю, вы обнаружите, что эта строка:
if ([[attributionDetails valueForKey:@"iad-attribution"] boolValue]
… на самом деле должно быть:
if ([[attributionDetails valueForKey:@"iad-attribution"] isEqualToString:@"true"]
Я понимаю, что это на самом деле не отвечает на вопрос о том, как его протестировать. Но, возможно, вы не в курсе, что если вы просто запустите свой код на реальном устройстве, вы получите некоторые фиктивные данные в качестве ответа.
Комментарии:
1. Не совсем верно … boolValue достаточно умен, чтобы возвращать true для «true», «YES», «Y». Вот довольно исчерпывающий тест такого поведения: blog.manbolo.com/2013/07/22/nsstring-boolvalue