【问题标题】:How do I test Apple's new Search Ads Attribution API?如何测试 Apple 新的 Search Ads Attribution API?
【发布时间】:2017-03-03 00:59:01
【问题描述】:

这是我正在使用的代码。如何测试来自 Apple 的 attributionDetails 以确保我的 Search Ads Attribution 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.
            }
        }];
    }
}

【问题讨论】:

    标签: ios cocoa-touch apple-search-ads


    【解决方案1】:

    有两种测试方法:

    1. 单元测试:尝试 OCMock 对其进行测试并返回 Apple 在其 documents 中记录的虚拟数据

    2. 在设备上测试(iOS 9 及更高版本):在设备上运行您的代码。您应该能够从 Apple 接收虚拟数据。我可以看到开发和试飞版本的虚拟数据。

    请注意,您可能需要为 iOS 8 和 iOS 7 使用较旧的 API:

    - determineAppInstallationAttributionWithCompletionHandler:

    - lookupAdConversionDetails:

    如果您的应用支持旧版本的 iOS,请检查 ADClient 是否响应上述方法。此外,attributionDetails 包含一个较小的字典,其键为“Version3.1”,因此您的代码不正确(如官方 documentation 中所述):

    { “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 值之前,您需要先获取 innerDictionary。

    【讨论】:

    • 如果我想使用自定义广告系列来获取上述详细信息,应该在 URL 中传递哪些参数?目前,我正在传递这些虚拟参数 publisher_id=6136&site_id=1863&campaign_id=234595&pt=4567&ct=9821 我没有得到任何这些参数值,但下面提到的虚拟值 iad-adgroup-id = 1234567890 iad-adgroup-name = AdGroupName iad-归因 = true iad-campaign-id = 1234567890 iad-campaign-name = CampaignName 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" = OrgName
    • 没有参数可以传入 URL。您应该调用上述文档中提供的方法并查看响应。在开发中,你只会得到上面提到的虚拟数据。
    • 如果我想转移到生产环境,因为我总是得到开发虚拟数据。
    【解决方案2】:

    在设备上做一些测试,我想你会发现这一行:

    if ([[attributionDetails valueForKey:@"iad-attribution"] boolValue]

    ...实际上应该是:

    if ([[attributionDetails valueForKey:@"iad-attribution"] isEqualToString:@"true"]

    我意识到这并不能真正回答如何测试它的问题。但也许你不知道,如果你只是在真实设备上运行代码,你会得到一些虚拟数据作为响应。

    【讨论】:

    猜你喜欢
    • 2018-02-24
    • 1970-01-01
    • 1970-01-01
    • 2020-05-06
    • 2017-03-31
    • 1970-01-01
    • 2019-09-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多