diff --git a/CHANGELOG.md b/CHANGELOG.md index fa5214e4..38e0ac73 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,10 @@ # Criteo Publisher SDK Changelog +-------------------------------------------------------------------------------- +## Version [7.0.0] + +### Features +- Add InventoryGroupId parameter, update register method + -------------------------------------------------------------------------------- ## Version [6.2.0] diff --git a/CriteoAdViewer/Sources/AdViewer/AdViewerViewController.swift b/CriteoAdViewer/Sources/AdViewer/AdViewerViewController.swift index f8d5580c..b258b67e 100644 --- a/CriteoAdViewer/Sources/AdViewer/AdViewerViewController.swift +++ b/CriteoAdViewer/Sources/AdViewer/AdViewerViewController.swift @@ -259,7 +259,7 @@ class AdViewerViewController: FormViewController { Criteo.resetSharedCriteo() let criteo = Criteo.shared() criteo.networkManagerDelegate = LogManager.sharedInstance() - criteo.registerPublisherId(publisherId, withStoreId: "testStoreid", with: adUnits) + criteo.registerPublisherId(publisherId, withInventoryGroupId: "someId", withStoreId: "testStoreid", with: adUnits) return criteo } diff --git a/CriteoAdViewer/Sources/Info.plist b/CriteoAdViewer/Sources/Info.plist index 17db209e..77a2cd9e 100644 --- a/CriteoAdViewer/Sources/Info.plist +++ b/CriteoAdViewer/Sources/Info.plist @@ -17,7 +17,7 @@ <key>CFBundlePackageType</key> <string>APPL</string> <key>CFBundleShortVersionString</key> - <string>6.2.0</string> + <string>7.0.0</string> <key>CFBundleURLTypes</key> <array> <dict> diff --git a/CriteoAdViewer/UITests/Info.plist b/CriteoAdViewer/UITests/Info.plist index 2460f3b7..b18ad9f0 100644 --- a/CriteoAdViewer/UITests/Info.plist +++ b/CriteoAdViewer/UITests/Info.plist @@ -15,7 +15,7 @@ <key>CFBundlePackageType</key> <string>BNDL</string> <key>CFBundleShortVersionString</key> - <string>6.2.0</string> + <string>7.0.0</string> <key>CFBundleVersion</key> <string>1</string> </dict> diff --git a/CriteoGoogleAdapter/Sources/CriteoGoogleAdapter/CRBannerCustomEvent.m b/CriteoGoogleAdapter/Sources/CriteoGoogleAdapter/CRBannerCustomEvent.m index 2f854491..5024a63c 100644 --- a/CriteoGoogleAdapter/Sources/CriteoGoogleAdapter/CRBannerCustomEvent.m +++ b/CriteoGoogleAdapter/Sources/CriteoGoogleAdapter/CRBannerCustomEvent.m @@ -42,8 +42,9 @@ @implementation CRBannerCustomEvent - (void)loadBannerForAdUnit:(CRBannerAdUnit *)adUnit mediationParams:(CRGoogleMediationParameters *)params childDirectedTreatment:(NSNumber *)childDirectedTreatment { - /// Set the publicher id to + /// Set the publisher id to [Criteo.sharedCriteo registerCriteoPublisherId:params.publisherId + withInventoryGroupId:params.inventoryGroupId withStoreId:params.storeId withAdUnits:@[ adUnit ]]; /// Set child directed treatment flag to Criteo SDK. diff --git a/CriteoGoogleAdapter/Sources/CriteoGoogleAdapter/CRGoogleMediationParameters.h b/CriteoGoogleAdapter/Sources/CriteoGoogleAdapter/CRGoogleMediationParameters.h index c4de802c..3e2a2622 100644 --- a/CriteoGoogleAdapter/Sources/CriteoGoogleAdapter/CRGoogleMediationParameters.h +++ b/CriteoGoogleAdapter/Sources/CriteoGoogleAdapter/CRGoogleMediationParameters.h @@ -25,6 +25,7 @@ NS_ASSUME_NONNULL_BEGIN - (instancetype)init NS_UNAVAILABLE; - (id)initWithPublisherId:(NSString *)publisherId + inventoryGroupId:(NSString *)inventoryGroupId storeId:(NSString *)storeId adUnitId:(NSString *)adUnitId; + (nullable CRGoogleMediationParameters *)parametersFromJSONString:(NSString *)jsonString @@ -33,6 +34,7 @@ NS_ASSUME_NONNULL_BEGIN @property(copy, readonly) NSString *publisherId; @property(copy, readonly) NSString *adUnitId; @property(copy, readonly) NSString *storeId; +@property(copy, nullable, readonly) NSString *inventoryGroupId; @end diff --git a/CriteoGoogleAdapter/Sources/CriteoGoogleAdapter/CRGoogleMediationParameters.m b/CriteoGoogleAdapter/Sources/CriteoGoogleAdapter/CRGoogleMediationParameters.m index 11b6cd1e..f0c808f9 100644 --- a/CriteoGoogleAdapter/Sources/CriteoGoogleAdapter/CRGoogleMediationParameters.m +++ b/CriteoGoogleAdapter/Sources/CriteoGoogleAdapter/CRGoogleMediationParameters.m @@ -23,6 +23,7 @@ static NSString *const criteoGoogleMediationPublisherIdKey = @"cpId"; static NSString *const criteoGoogleMediationAdUnitIdKey = @"adUnitId"; static NSString *const criteoGoogleMediationStoreIdKey = @"storeId"; +static NSString *const criteoGoogleMediationInventoryGroupIdKey = @"inventoryGroupId"; static void setJSONParsingError(NSError **error) { if (error != nil) { @@ -44,6 +45,7 @@ static void setJSONParsingError(NSError **error) { @implementation CRGoogleMediationParameters - (id)initWithPublisherId:(NSString *)publisherId + inventoryGroupId:(NSString *)inventoryGroupId storeId:(NSString *)storeId adUnitId:(NSString *)adUnitId { self = [super init]; @@ -53,6 +55,9 @@ - (id)initWithPublisherId:(NSString *)publisherId _publisherId = [NSString stringWithString:publisherId]; _adUnitId = [NSString stringWithString:adUnitId]; _storeId = [NSString stringWithString:storeId]; + if (inventoryGroupId != nil) { + _inventoryGroupId = [NSString stringWithString:inventoryGroupId]; + } return self; } @@ -75,6 +80,8 @@ + (nullable CRGoogleMediationParameters *)parametersFromJSONString:(NSString *)j NSString *pubId = nonEmptyStringFromObj(jsonDict[criteoGoogleMediationPublisherIdKey]); NSString *adId = nonEmptyStringFromObj(jsonDict[criteoGoogleMediationAdUnitIdKey]); NSString *storeId = nonEmptyStringFromObj(jsonDict[criteoGoogleMediationStoreIdKey]); + NSString *inventoryGroupId = + nonEmptyStringFromObj(jsonDict[criteoGoogleMediationInventoryGroupIdKey]); if (pubId == nil || adId == nil) { setJSONParsingError(error); return nil; @@ -83,6 +90,7 @@ + (nullable CRGoogleMediationParameters *)parametersFromJSONString:(NSString *)j *error = nil; } return [[CRGoogleMediationParameters alloc] initWithPublisherId:pubId + inventoryGroupId:inventoryGroupId storeId:storeId adUnitId:adId]; } diff --git a/CriteoGoogleAdapter/Sources/CriteoGoogleAdapter/CRInterstitialCustomEvent.m b/CriteoGoogleAdapter/Sources/CriteoGoogleAdapter/CRInterstitialCustomEvent.m index 331b99bc..f775d1c6 100644 --- a/CriteoGoogleAdapter/Sources/CriteoGoogleAdapter/CRInterstitialCustomEvent.m +++ b/CriteoGoogleAdapter/Sources/CriteoGoogleAdapter/CRInterstitialCustomEvent.m @@ -43,6 +43,7 @@ - (void)loadInterstitialForAdUnit:(CRInterstitialAdUnit *)adUnit adConfiguration:(CRGoogleMediationParameters *)params childDirectedTreatment:(NSNumber *)childDirectedTreatment { [Criteo.sharedCriteo registerCriteoPublisherId:params.publisherId + withInventoryGroupId:params.inventoryGroupId withStoreId:params.storeId withAdUnits:@[ adUnit ]]; /// Set child directed treatment flag to Criteo SDK. diff --git a/CriteoGoogleAdapter/Sources/CriteoGoogleAdapter/Info.plist b/CriteoGoogleAdapter/Sources/CriteoGoogleAdapter/Info.plist index 4147d585..c0d870c5 100644 --- a/CriteoGoogleAdapter/Sources/CriteoGoogleAdapter/Info.plist +++ b/CriteoGoogleAdapter/Sources/CriteoGoogleAdapter/Info.plist @@ -15,7 +15,7 @@ <key>CFBundlePackageType</key> <string>FMWK</string> <key>CFBundleShortVersionString</key> - <string>6.2.0</string> + <string>7.0.0</string> <key>CFBundleVersion</key> <string>1</string> </dict> diff --git a/CriteoGoogleAdapter/Tests/CriteoGoogleAdapterTests/CRBannerCustomEventTests.m b/CriteoGoogleAdapter/Tests/CriteoGoogleAdapterTests/CRBannerCustomEventTests.m index 4cfdf81a..2f74e212 100644 --- a/CriteoGoogleAdapter/Tests/CriteoGoogleAdapterTests/CRBannerCustomEventTests.m +++ b/CriteoGoogleAdapter/Tests/CriteoGoogleAdapterTests/CRBannerCustomEventTests.m @@ -54,6 +54,9 @@ - (instancetype)initWithBanner:(CRBannerView *)ad { #define SERVER_PARAMETER \ @"{\"cpId\":\"testCpId\",\"adUnitId\":\"testAdUnitId\",\"storeId\":\"testStoreId\"}" +#define SERVER_PARAMETER_WITH_INVENTORY_GROUP_ID \ + @"{\"cpId\":\"testCpId\",\"inventoryGroupId\":\"testInventoryGroupId\",\"adUnitId\":\"testAdUnitId\",\"storeId\":\"testStoreId\"}" + @implementation CRBannerCustomEventTests - (void)testRequestBannerAdSuccess { @@ -71,6 +74,41 @@ - (void)testRequestBannerAdSuccess { id mockCriteo = OCMClassMock([Criteo class]); OCMStub([mockCriteo sharedCriteo]).andReturn(mockCriteo); OCMStub([mockCriteo registerCriteoPublisherId:@"testCpId" + withInventoryGroupId:nil + withStoreId:@"testStoreId" + withAdUnits:@[ bannerAdUnit ]]); + OCMStub([mockCriteo setChildDirectedTreatment:mockChildDirectedTreatment]); + + [customEvent loadBannerForAdUnit:bannerAdUnit + mediationParams:params + childDirectedTreatment:mockChildDirectedTreatment]; + + OCMVerify([mockCRBannerView loadAd]); + OCMVerify([mockCRBannerView setDelegate:customEvent]); + OCMVerify([mockCriteo registerCriteoPublisherId:@"testCpId" + withInventoryGroupId:nil + withStoreId:@"testStoreId" + withAdUnits:@[ bannerAdUnit ]]); + OCMVerify([mockCriteo setChildDirectedTreatment:mockChildDirectedTreatment]); +} + +- (void)testRequestBannerAdSuccessWithInventoryGroupId { + NSNumber *mockChildDirectedTreatment = @YES; + CRBannerView *mockCRBannerView = OCMStrictClassMock([CRBannerView class]); + CRBannerAdUnit *bannerAdUnit = [[CRBannerAdUnit alloc] initWithAdUnitId:@"testAdUnitId" + size:CGSizeMake(320, 50)]; + CRBannerCustomEvent *customEvent = [[CRBannerCustomEvent alloc] initWithBanner:mockCRBannerView]; + CRGoogleMediationParameters *params = + [CRGoogleMediationParameters parametersFromJSONString:SERVER_PARAMETER_WITH_INVENTORY_GROUP_ID + error:NULL]; + + OCMStub([mockCRBannerView loadAd]); + OCMStub([mockCRBannerView setDelegate:customEvent]); + + id mockCriteo = OCMClassMock([Criteo class]); + OCMStub([mockCriteo sharedCriteo]).andReturn(mockCriteo); + OCMStub([mockCriteo registerCriteoPublisherId:@"testCpId" + withInventoryGroupId:@"testInventoryGroupId" withStoreId:@"testStoreId" withAdUnits:@[ bannerAdUnit ]]); OCMStub([mockCriteo setChildDirectedTreatment:mockChildDirectedTreatment]); @@ -82,6 +120,7 @@ - (void)testRequestBannerAdSuccess { OCMVerify([mockCRBannerView loadAd]); OCMVerify([mockCRBannerView setDelegate:customEvent]); OCMVerify([mockCriteo registerCriteoPublisherId:@"testCpId" + withInventoryGroupId:@"testInventoryGroupId" withStoreId:@"testStoreId" withAdUnits:@[ bannerAdUnit ]]); OCMVerify([mockCriteo setChildDirectedTreatment:mockChildDirectedTreatment]); diff --git a/CriteoGoogleAdapter/Tests/CriteoGoogleAdapterTests/CRGoogleMediationParametersTests.m b/CriteoGoogleAdapter/Tests/CriteoGoogleAdapterTests/CRGoogleMediationParametersTests.m index 35e1d412..6c05fd34 100644 --- a/CriteoGoogleAdapter/Tests/CriteoGoogleAdapterTests/CRGoogleMediationParametersTests.m +++ b/CriteoGoogleAdapter/Tests/CriteoGoogleAdapterTests/CRGoogleMediationParametersTests.m @@ -29,10 +29,11 @@ - (void)testGoogleMediationParametersNormal { NSError *error; CRGoogleMediationParameters *gmp = [CRGoogleMediationParameters parametersFromJSONString: - @"{\"cpId\":\"B-056946\", \"adUnitId\": \"/140800857/Endeavour_320x50\", \"storeId\": \"B-056946\"}" + @"{\"cpId\":\"B-056946\", \"inventoryGroupId\":\"testInventoryGroupId\", \"adUnitId\": \"/140800857/Endeavour_320x50\", \"storeId\": \"B-056946\"}" error:&error]; XCTAssertNotNil(gmp); XCTAssertEqualObjects(gmp.publisherId, @"B-056946"); + XCTAssertEqualObjects(gmp.inventoryGroupId, @"testInventoryGroupId"); XCTAssertEqualObjects(gmp.adUnitId, @"/140800857/Endeavour_320x50"); XCTAssertEqualObjects(gmp.storeId, @"B-056946"); } @@ -42,7 +43,7 @@ - (void)testGoogleMediationParametersErrorSetToNil { NSError *error = [NSError new]; CRGoogleMediationParameters *gmp = [CRGoogleMediationParameters parametersFromJSONString: - @"{\"cpId\":\"B-056946\", \"adUnitId\": \"/140800857/Endeavour_320x50\", \"storeId\": \"B-056946\"}" + @"{\"cpId\":\"B-056946\", \"inventoryGroupId\":\"testInventoryGroupId\", \"adUnitId\": \"/140800857/Endeavour_320x50\", \"storeId\": \"B-056946\"}" error:&error]; XCTAssertNil(error); } @@ -51,10 +52,11 @@ - (void)testGoogleMediationParametersErrorSetToNil { - (void)testGoogleMediationParametersNilError { CRGoogleMediationParameters *gmp = [CRGoogleMediationParameters parametersFromJSONString: - @"{\"cpId\":\"B-056946\", \"adUnitId\": \"/140800857/Endeavour_320x50\", \"storeId\": \"B-056946\"}" + @"{\"cpId\":\"B-056946\", \"inventoryGroupId\":\"testInventoryGroupId\", \"adUnitId\": \"/140800857/Endeavour_320x50\", \"storeId\": \"B-056946\"}" error:nil]; XCTAssertNotNil(gmp); XCTAssertEqualObjects(gmp.publisherId, @"B-056946"); + XCTAssertEqualObjects(gmp.inventoryGroupId, @"testInventoryGroupId"); XCTAssertEqualObjects(gmp.adUnitId, @"/140800857/Endeavour_320x50"); XCTAssertEqualObjects(gmp.storeId, @"B-056946"); } @@ -148,4 +150,43 @@ - (void)testGoogleMediationParametersTotallyBadJson { XCTAssertEqual(error.code, GADErrorInvalidArgument); } +// Blank inventoryGroupId +- (void)testGoogleMediationParametersBlankInventoryGroupId { + NSError *error; + CRGoogleMediationParameters *gmp = [CRGoogleMediationParameters + parametersFromJSONString: + @"{\"cpId\":\"B-056946\", \"inventoryGroupId\":\"\", \"adUnitId\": \"/140800857/Endeavour_320x50\", \"storeId\": \"B-056946\"}" + error:&error]; + XCTAssertNotNil(gmp); + XCTAssertEqualObjects(gmp.publisherId, @"B-056946"); + XCTAssertNil(gmp.inventoryGroupId); + XCTAssertEqualObjects(gmp.adUnitId, @"/140800857/Endeavour_320x50"); + XCTAssertEqualObjects(gmp.storeId, @"B-056946"); +} + +// Nil inventoryGroupId +- (void)testGoogleMediationParametersNilInventoryGroupId { + NSError *error; + CRGoogleMediationParameters *gmp = [CRGoogleMediationParameters + parametersFromJSONString: + @"{\"cpId\":\"B-056946\", \"adUnitId\": \"/140800857/Endeavour_320x50\", \"storeId\": \"B-056946\"}" + error:&error]; + XCTAssertNotNil(gmp); + XCTAssertEqualObjects(gmp.publisherId, @"B-056946"); + XCTAssertNil(gmp.inventoryGroupId); + XCTAssertEqualObjects(gmp.adUnitId, @"/140800857/Endeavour_320x50"); + XCTAssertEqualObjects(gmp.storeId, @"B-056946"); +} + +// Non-string inventoryGroupId +- (void)testGoogleMediationParametersNonStringInventoryGroupId { + NSError *error = [NSError new]; + CRGoogleMediationParameters *gmp = [CRGoogleMediationParameters + parametersFromJSONString: + @"{\"cpId\":\"B-056946\", \"inventoryGroupId\":1, \"adUnitID\": \"/140800857/Endeavour_320x50\", \"storeId\": \"B-056946\"}" + error:&error]; + XCTAssertNil(gmp); + XCTAssertEqual(error.code, GADErrorInvalidArgument); +} + @end diff --git a/CriteoGoogleAdapter/Tests/CriteoGoogleAdapterTests/CRInterstitialCustomEventTests.m b/CriteoGoogleAdapter/Tests/CriteoGoogleAdapterTests/CRInterstitialCustomEventTests.m index c642e398..1cc952a5 100644 --- a/CriteoGoogleAdapter/Tests/CriteoGoogleAdapterTests/CRInterstitialCustomEventTests.m +++ b/CriteoGoogleAdapter/Tests/CriteoGoogleAdapterTests/CRInterstitialCustomEventTests.m @@ -58,6 +58,9 @@ - (instancetype)initWithInterstitial:(CRInterstitial *)interstitial { #define SERVER_PARAMETER \ @"{\"cpId\":\"testCpId\",\"adUnitId\":\"testAdUnitId\",\"storeId\":\"testStoreId\"}" +#define SERVER_PARAMETER_WITH_INVENTORY_GROUP_ID \ + @"{\"cpId\":\"testCpId\",\"inventoryGroupId\":\"testInventoryGroupId\",\"adUnitId\":\"testAdUnitId\",\"storeId\":\"testStoreId\"}" + @implementation CRInterstitialCustomEventTests - (void)testLoadAndPresentFromRootViewController { @@ -78,6 +81,46 @@ - (void)testLoadAndPresentFromRootViewController { id mockCriteo = OCMStrictClassMock([Criteo class]); OCMStub([mockCriteo sharedCriteo]).andReturn(mockCriteo); OCMStub([mockCriteo registerCriteoPublisherId:@"testCpId" + withInventoryGroupId:nil + withStoreId:@"testStoreId" + withAdUnits:@[ interstitialAdUnit ]]); + OCMStub([mockCriteo setChildDirectedTreatment:mockChildDirectedTreatment]); + + [customEvent loadInterstitialForAdUnit:interstitialAdUnit + adConfiguration:params + childDirectedTreatment:mockChildDirectedTreatment]; + [customEvent presentFromViewController:realVC]; + + OCMVerify([mockCRInterstitial loadAd]); + OCMVerify([mockCRInterstitial setDelegate:customEvent]); + OCMVerify([mockCRInterstitial presentFromRootViewController:realVC]); + OCMVerify([mockCriteo registerCriteoPublisherId:@"testCpId" + withInventoryGroupId:nil + withStoreId:@"testStoreId" + withAdUnits:@[ interstitialAdUnit ]]); + OCMVerify([mockCriteo setChildDirectedTreatment:mockChildDirectedTreatment]); +} + +- (void)testLoadAndPresentFromRootViewControllerWithInventoryGroupId { + NSNumber *mockChildDirectedTreatment = @YES; + CRInterstitial *mockCRInterstitial = OCMStrictClassMock([CRInterstitial class]); + CRInterstitialAdUnit *interstitialAdUnit = + [[CRInterstitialAdUnit alloc] initWithAdUnitId:@"testAdUnitId"]; + CRInterstitialCustomEvent *customEvent = + [[CRInterstitialCustomEvent alloc] initWithInterstitial:mockCRInterstitial]; + CRGoogleMediationParameters *params = + [CRGoogleMediationParameters parametersFromJSONString:SERVER_PARAMETER_WITH_INVENTORY_GROUP_ID + error:NULL]; + OCMStub([mockCRInterstitial loadAd]); + OCMStub([mockCRInterstitial setDelegate:customEvent]); + UIViewController *realVC = [UIViewController new]; + OCMStub([mockCRInterstitial presentFromRootViewController:realVC]); + OCMStub([mockCRInterstitial isAdLoaded]).andReturn(YES); + + id mockCriteo = OCMStrictClassMock([Criteo class]); + OCMStub([mockCriteo sharedCriteo]).andReturn(mockCriteo); + OCMStub([mockCriteo registerCriteoPublisherId:@"testCpId" + withInventoryGroupId:@"testInventoryGroupId" withStoreId:@"testStoreId" withAdUnits:@[ interstitialAdUnit ]]); OCMStub([mockCriteo setChildDirectedTreatment:mockChildDirectedTreatment]); @@ -91,6 +134,7 @@ - (void)testLoadAndPresentFromRootViewController { OCMVerify([mockCRInterstitial setDelegate:customEvent]); OCMVerify([mockCRInterstitial presentFromRootViewController:realVC]); OCMVerify([mockCriteo registerCriteoPublisherId:@"testCpId" + withInventoryGroupId:@"testInventoryGroupId" withStoreId:@"testStoreId" withAdUnits:@[ interstitialAdUnit ]]); OCMVerify([mockCriteo setChildDirectedTreatment:mockChildDirectedTreatment]); diff --git a/CriteoGoogleAdapter/Tests/CriteoGoogleAdapterTests/Info.plist b/CriteoGoogleAdapter/Tests/CriteoGoogleAdapterTests/Info.plist index 2460f3b7..b18ad9f0 100644 --- a/CriteoGoogleAdapter/Tests/CriteoGoogleAdapterTests/Info.plist +++ b/CriteoGoogleAdapter/Tests/CriteoGoogleAdapterTests/Info.plist @@ -15,7 +15,7 @@ <key>CFBundlePackageType</key> <string>BNDL</string> <key>CFBundleShortVersionString</key> - <string>6.2.0</string> + <string>7.0.0</string> <key>CFBundleVersion</key> <string>1</string> </dict> diff --git a/CriteoPublisherSdk.podspec b/CriteoPublisherSdk.podspec index e606f44f..f6e28c3f 100644 --- a/CriteoPublisherSdk.podspec +++ b/CriteoPublisherSdk.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |spec| spec.name = "CriteoPublisherSdk" - spec.version = "6.2.0" + spec.version = "7.0.0" spec.summary = "Criteo Publisher SDK for iOS" spec.description = <<-DESC diff --git a/CriteoPublisherSdk/Sources/Configuration/CR_Config.h b/CriteoPublisherSdk/Sources/Configuration/CR_Config.h index 1fd420dd..b5f88675 100644 --- a/CriteoPublisherSdk/Sources/Configuration/CR_Config.h +++ b/CriteoPublisherSdk/Sources/Configuration/CR_Config.h @@ -34,6 +34,7 @@ FOUNDATION_EXTERN NSString *const CR_ConfigConfigurationUrl; #pragma mark - Properties @property(copy, nonatomic, nullable) NSString *criteoPublisherId; +@property(copy, nonatomic, nullable) NSString *inventoryGroupId; @property(assign, nonatomic) BOOL killSwitch; @property(copy, nonatomic) NSString *adTagUrlMode; @property(copy, nonatomic) NSString *viewportWidthMacro; @@ -79,6 +80,7 @@ FOUNDATION_EXTERN NSString *const CR_ConfigConfigurationUrl; #pragma mark - Lifecycle - (instancetype)initWithCriteoPublisherId:(nullable NSString *)criteoPublisherId + inventoryGroupId:(nullable NSString *)inventoryGroupId storeId:(nullable NSString *)storeId cdbUrl:(NSString *)cdbUrl appEventsUrl:(NSString *)appEventsUrl @@ -86,8 +88,12 @@ FOUNDATION_EXTERN NSString *const CR_ConfigConfigurationUrl; userDefaults:(NSUserDefaults *)userDefaults NS_DESIGNATED_INITIALIZER; - (instancetype)initWithCriteoPublisherId:(nullable NSString *)criteoPublisherId + inventoryGroupId:(nullable NSString *)inventoryGroupId storeId:(nullable NSString *)storeId; +- (instancetype)initWithCriteoPublisherId:(nullable NSString *)criteoPublisherId + inventoryGroupId:(nullable NSString *)inventoryGroupId; + - (instancetype)initWithCriteoPublisherId:(nullable NSString *)criteoPublisherId; - (instancetype)initWithUserDefaults:(NSUserDefaults *)userDefaults; diff --git a/CriteoPublisherSdk/Sources/Configuration/CR_Config.m b/CriteoPublisherSdk/Sources/Configuration/CR_Config.m index 4ce7a706..96d58a85 100644 --- a/CriteoPublisherSdk/Sources/Configuration/CR_Config.m +++ b/CriteoPublisherSdk/Sources/Configuration/CR_Config.m @@ -43,6 +43,7 @@ @interface CR_Config () @implementation CR_Config - (instancetype)initWithCriteoPublisherId:(nullable NSString *)criteoPublisherId + inventoryGroupId:(nullable NSString *)inventoryGroupId storeId:(nullable NSString *)storeId cdbUrl:(NSString *)cdbUrl appEventsUrl:(NSString *)appEventsUrl @@ -77,12 +78,14 @@ - (instancetype)initWithCriteoPublisherId:(nullable NSString *)criteoPublisherId _mraid2Enabled = [userDefaults cr_valueForMRAID2]; _isMRAIDGlobalEnabled = _mraidEnabled || _mraid2Enabled; _storeId = storeId; + _inventoryGroupId = inventoryGroupId; } return self; } - (instancetype)initWithCriteoPublisherId:(nullable NSString *)criteoPublisherId { return [self initWithCriteoPublisherId:criteoPublisherId + inventoryGroupId:nil storeId:nil cdbUrl:CR_ConfigCdbUrl appEventsUrl:CR_ConfigAppEventsUrl @@ -91,8 +94,21 @@ - (instancetype)initWithCriteoPublisherId:(nullable NSString *)criteoPublisherId } - (instancetype)initWithCriteoPublisherId:(nullable NSString *)criteoPublisherId + inventoryGroupId:(nullable NSString *)inventoryGroupId { + return [self initWithCriteoPublisherId:criteoPublisherId + inventoryGroupId:inventoryGroupId + storeId:nil + cdbUrl:CR_ConfigCdbUrl + appEventsUrl:CR_ConfigAppEventsUrl + configUrl:CR_ConfigConfigurationUrl + userDefaults:[NSUserDefaults standardUserDefaults]]; +} + +- (instancetype)initWithCriteoPublisherId:(nullable NSString *)criteoPublisherId + inventoryGroupId:(nullable NSString *)inventoryGroupId storeId:(nullable NSString *)storeId { return [self initWithCriteoPublisherId:criteoPublisherId + inventoryGroupId:inventoryGroupId storeId:storeId cdbUrl:CR_ConfigCdbUrl appEventsUrl:CR_ConfigAppEventsUrl @@ -106,6 +122,7 @@ - (instancetype)init { - (instancetype)initWithUserDefaults:(NSUserDefaults *)userDefaults { return [self initWithCriteoPublisherId:nil + inventoryGroupId:nil storeId:nil cdbUrl:CR_ConfigCdbUrl appEventsUrl:CR_ConfigAppEventsUrl diff --git a/CriteoPublisherSdk/Sources/Configuration/CR_RemoteConfigRequest.m b/CriteoPublisherSdk/Sources/Configuration/CR_RemoteConfigRequest.m index 3d3deec8..2c9e7c74 100644 --- a/CriteoPublisherSdk/Sources/Configuration/CR_RemoteConfigRequest.m +++ b/CriteoPublisherSdk/Sources/Configuration/CR_RemoteConfigRequest.m @@ -28,8 +28,10 @@ @interface CR_RemoteConfigRequest () @property(copy, nonatomic) NSNumber *profileId; @property(copy, nonatomic) NSString *deviceModel; @property(copy, nonatomic) NSString *deviceOs; +@property(copy, nonatomic, nullable) NSString *inventoryGroupId; - (instancetype)initWithCriteoPublisherId:(NSString *)criteoPublisherId + inventoryGroupId:(nullable NSString *)inventoryGroupId sdkVersion:(NSString *)sdkVersion appId:(NSString *)appId profileId:(NSNumber *)profileId @@ -43,6 +45,7 @@ @implementation CR_RemoteConfigRequest + (instancetype)requestWithConfig:(CR_Config *)config profileId:(NSNumber *)profileId { return [CR_RemoteConfigRequest.alloc initWithCriteoPublisherId:config.criteoPublisherId + inventoryGroupId:config.inventoryGroupId sdkVersion:config.sdkVersion appId:config.appId profileId:profileId @@ -52,6 +55,7 @@ + (instancetype)requestWithConfig:(CR_Config *)config profileId:(NSNumber *)prof } - (instancetype)initWithCriteoPublisherId:(NSString *)criteoPublisherId + inventoryGroupId:(nullable NSString *)inventoryGroupId sdkVersion:(NSString *)sdkVersion appId:(NSString *)appId profileId:(NSNumber *)profileId @@ -60,6 +64,7 @@ - (instancetype)initWithCriteoPublisherId:(NSString *)criteoPublisherId configUrl:(NSString *)configUrl { if (self = [super init]) { _criteoPublisherId = criteoPublisherId; + _inventoryGroupId = inventoryGroupId; _sdkVersion = sdkVersion; _appId = appId; _profileId = profileId; @@ -71,7 +76,8 @@ - (instancetype)initWithCriteoPublisherId:(NSString *)criteoPublisherId } - (NSDictionary *)postBody { - return @{ + NSMutableDictionary *body = [NSMutableDictionary dictionary]; + NSDictionary *values = @{ @"cpId" : self.criteoPublisherId, @"bundleId" : self.appId, @"sdkVersion" : self.sdkVersion, @@ -79,6 +85,11 @@ - (NSDictionary *)postBody { @"deviceModel" : self.deviceModel, @"deviceOs" : self.deviceOs }; + [body setValuesForKeysWithDictionary:values]; + if (self.inventoryGroupId != nil) { + [body setObject:self.inventoryGroupId forKey:@"inventoryGroupId"]; + } + return body; } @end diff --git a/CriteoPublisherSdk/Sources/Criteo.m b/CriteoPublisherSdk/Sources/Criteo.m index 774de1cd..4ea33675 100644 --- a/CriteoPublisherSdk/Sources/Criteo.m +++ b/CriteoPublisherSdk/Sources/Criteo.m @@ -93,8 +93,28 @@ + (void)resetSharedCriteo { } - (void)registerCriteoPublisherId:(NSString *)criteoPublisherId + withInventoryGroupId:(NSString *)inventoryGroupId withStoreId:(NSString *)storeId withAdUnits:(NSArray<CRAdUnit *> *)adUnits { + [self registerCriteoPublisherIdWrapper:criteoPublisherId + withInventoryGroupId:inventoryGroupId + withStoreId:storeId + withAdUnits:adUnits]; +} + +- (void)registerCriteoPublisherId:(NSString *)criteoPublisherId + withStoreId:(NSString *)storeId + withAdUnits:(NSArray<CRAdUnit *> *)adUnits { + [self registerCriteoPublisherIdWrapper:criteoPublisherId + withInventoryGroupId:nil + withStoreId:storeId + withAdUnits:adUnits]; +} + +- (void)registerCriteoPublisherIdWrapper:(NSString *)criteoPublisherId + withInventoryGroupId:(NSString *)inventoryGroupId + withStoreId:(NSString *)storeId + withAdUnits:(NSArray<CRAdUnit *> *)adUnits { if (criteoPublisherId == nil || criteoPublisherId.length == 0) { CRLogError(@"Registration", @"Invalid Criteo publisher ID: \"%@\"", criteoPublisherId); } @@ -107,6 +127,7 @@ - (void)registerCriteoPublisherId:(NSString *)criteoPublisherId @try { [self.dependencyProvider.threadManager dispatchAsyncOnGlobalQueue:^{ [self _registerCriteoPublisherId:criteoPublisherId + withInventoryGroupId:inventoryGroupId withStoreId:storeId withAdUnits:adUnits]; CRLogInfo(@"Registration", @@ -193,9 +214,11 @@ - (instancetype)initWithDependencyProvider:(CR_DependencyProvider *)dependencyPr } - (void)_registerCriteoPublisherId:(NSString *)criteoPublisherId + withInventoryGroupId:(NSString *)inventoryGroupId withStoreId:(NSString *)storeId withAdUnits:(NSArray<CRAdUnit *> *)adUnits { self.config.criteoPublisherId = criteoPublisherId; + self.config.inventoryGroupId = inventoryGroupId; self.config.storeId = storeId; [self.appEvents registerForIosEvents]; [self.appEvents sendLaunchEvent]; diff --git a/CriteoPublisherSdk/Sources/Info.plist b/CriteoPublisherSdk/Sources/Info.plist index 4147d585..c0d870c5 100644 --- a/CriteoPublisherSdk/Sources/Info.plist +++ b/CriteoPublisherSdk/Sources/Info.plist @@ -15,7 +15,7 @@ <key>CFBundlePackageType</key> <string>FMWK</string> <key>CFBundleShortVersionString</key> - <string>6.2.0</string> + <string>7.0.0</string> <key>CFBundleVersion</key> <string>1</string> </dict> diff --git a/CriteoPublisherSdk/Sources/Network/CR_ApiQueryKeys.h b/CriteoPublisherSdk/Sources/Network/CR_ApiQueryKeys.h index 916eccd1..94772f20 100644 --- a/CriteoPublisherSdk/Sources/Network/CR_ApiQueryKeys.h +++ b/CriteoPublisherSdk/Sources/Network/CR_ApiQueryKeys.h @@ -36,6 +36,7 @@ NS_ASSUME_NONNULL_BEGIN @property(class, nonatomic, readonly) NSString *cdbCallEndElapsed; @property(class, nonatomic, readonly) NSString *cdbCallStartElapsed; @property(class, nonatomic, readonly) NSString *cpId; +@property(class, nonatomic, readonly) NSString *inventoryGroupId; @property(class, nonatomic, readonly) NSString *deviceModel; @property(class, nonatomic, readonly) NSString *deviceIdType; @property(class, nonatomic, readonly) NSString *deviceId; diff --git a/CriteoPublisherSdk/Sources/Network/CR_ApiQueryKeys.m b/CriteoPublisherSdk/Sources/Network/CR_ApiQueryKeys.m index 655099b0..e5e2c0b5 100644 --- a/CriteoPublisherSdk/Sources/Network/CR_ApiQueryKeys.m +++ b/CriteoPublisherSdk/Sources/Network/CR_ApiQueryKeys.m @@ -174,5 +174,8 @@ + (NSString *)api { + (NSString *)storeId { return @"storeId"; } ++ (NSString *)inventoryGroupId { + return @"inventoryGroupId"; +} @end diff --git a/CriteoPublisherSdk/Sources/Network/Serializers/CR_BidRequestSerializer.m b/CriteoPublisherSdk/Sources/Network/Serializers/CR_BidRequestSerializer.m index b054425b..07972e1c 100644 --- a/CriteoPublisherSdk/Sources/Network/Serializers/CR_BidRequestSerializer.m +++ b/CriteoPublisherSdk/Sources/Network/Serializers/CR_BidRequestSerializer.m @@ -134,6 +134,7 @@ - (NSDictionary *)publisherWithConfig:(CR_Config *)config context:(CRContextData NSMutableDictionary *publisher = [NSMutableDictionary new]; publisher[CR_ApiQueryKeys.bundleId] = config.appId; publisher[CR_ApiQueryKeys.cpId] = config.criteoPublisherId; + publisher[CR_ApiQueryKeys.inventoryGroupId] = config.inventoryGroupId; publisher[CR_ApiQueryKeys.ext] = [CR_BidRequestSerializer mergeToNestedStructure:@[ contextData.data ]]; publisher[CR_ApiQueryKeys.storeId] = config.storeId; diff --git a/CriteoPublisherSdk/Sources/Public/CRConstants.h b/CriteoPublisherSdk/Sources/Public/CRConstants.h index fade6dab..70bf19f1 100644 --- a/CriteoPublisherSdk/Sources/Public/CRConstants.h +++ b/CriteoPublisherSdk/Sources/Public/CRConstants.h @@ -20,7 +20,7 @@ #ifndef CRConstants_h #define CRConstants_h -#define CRITEO_PUBLISHER_SDK_VERSION @"6.2.0" +#define CRITEO_PUBLISHER_SDK_VERSION @"7.0.0" #define CRITEO_DEFAULT_REQUEST_TIMEOUT_IN_SECONDS 60 #define CRITEO_DEFAULT_BID_TTL_IN_SECONDS 15 * 60 diff --git a/CriteoPublisherSdk/Sources/Public/Criteo.h b/CriteoPublisherSdk/Sources/Public/Criteo.h index d08da7a9..d6774f74 100644 --- a/CriteoPublisherSdk/Sources/Public/Criteo.h +++ b/CriteoPublisherSdk/Sources/Public/Criteo.h @@ -49,6 +49,18 @@ NS_ASSUME_NONNULL_BEGIN */ + (nonnull instancetype)sharedCriteo; +/** + * Initialize Criteo singleton + * @param criteoPublisherId Publisher Identifier + * @param inventoryGroupId Inventory group identifier + * @param storeId Publisher's app store id + * @param adUnits AdUnits array + */ +- (void)registerCriteoPublisherId:(NSString *)criteoPublisherId + withInventoryGroupId:(NSString *)inventoryGroupId + withStoreId:(NSString *)storeId + withAdUnits:(NSArray<CRAdUnit *> *)adUnits; + /** * Initialize Criteo singleton * @param criteoPublisherId Publisher Identifier diff --git a/CriteoPublisherSdk/Tests/CriteoPublisherSdkTests-Info.plist b/CriteoPublisherSdk/Tests/CriteoPublisherSdkTests-Info.plist index 2460f3b7..b18ad9f0 100644 --- a/CriteoPublisherSdk/Tests/CriteoPublisherSdkTests-Info.plist +++ b/CriteoPublisherSdk/Tests/CriteoPublisherSdkTests-Info.plist @@ -15,7 +15,7 @@ <key>CFBundlePackageType</key> <string>BNDL</string> <key>CFBundleShortVersionString</key> - <string>6.2.0</string> + <string>7.0.0</string> <key>CFBundleVersion</key> <string>1</string> </dict> diff --git a/CriteoPublisherSdk/Tests/IntegrationTests/CR_LoggingFunctionalTests.m b/CriteoPublisherSdk/Tests/IntegrationTests/CR_LoggingFunctionalTests.m index 9c6cfba6..012a4730 100644 --- a/CriteoPublisherSdk/Tests/IntegrationTests/CR_LoggingFunctionalTests.m +++ b/CriteoPublisherSdk/Tests/IntegrationTests/CR_LoggingFunctionalTests.m @@ -39,6 +39,7 @@ @interface CR_LoggingFunctionalTests : XCTestCase @property(nonatomic, strong) CR_ConsoleLogHandler *consoleLogHandlerMock; @property(strong, nonatomic) Criteo *criteo; @property(nonatomic, copy) NSString *publisherId; +@property(nonatomic, copy) NSString *inventoryGroupId; @property(nonatomic, strong) NSArray<CRAdUnit *> *adUnits; @property(nonatomic, strong) NSUserDefaults *userDefaults; @property(nonatomic, strong) CR_ApiHandler *apiHandler; @@ -67,6 +68,7 @@ - (void)setUp { dependencyProvider.logging = self.loggingMock; self.publisherId = @"testPublisherId"; + self.inventoryGroupId = @"testInventoryGroupId"; self.storeId = @"testStoreId"; self.adUnits = @[ [[CRBannerAdUnit alloc] initWithAdUnitId:@"adUnitId1" size:CGSizeMake(42, 21)], @@ -142,6 +144,19 @@ - (void)testCriteoRegister_ShouldBeLogged { }]]); } +- (void)testCriteoRegisterWithInventoryGroupId_ShouldBeLogged { + [self.criteo registerCriteoPublisherId:self.publisherId + withInventoryGroupId:self.inventoryGroupId + withStoreId:@"" + withAdUnits:self.adUnits]; + OCMVerify([self.loggingMock logMessage:[OCMArg checkWithBlock:^BOOL(CR_LogMessage *logMessage) { + NSString *message = logMessage.message; + return [logMessage.tag isEqualToString:@"Registration"] && + [message containsString:self.publisherId] && + [message containsString:self.adUnits.description]; + }]]); +} + - (void)testCriteoRegisterTwice_ShouldBeLogged { [self.criteo registerCriteoPublisherId:self.publisherId withStoreId:self.storeId diff --git a/CriteoPublisherSdk/Tests/UnitTests/Configuration/CR_ConfigManagerTests.m b/CriteoPublisherSdk/Tests/UnitTests/Configuration/CR_ConfigManagerTests.m index 12c4676a..e10f0ba7 100644 --- a/CriteoPublisherSdk/Tests/UnitTests/Configuration/CR_ConfigManagerTests.m +++ b/CriteoPublisherSdk/Tests/UnitTests/Configuration/CR_ConfigManagerTests.m @@ -43,7 +43,7 @@ @implementation CR_ConfigManagerTests { #pragma mark - Lifecycle - (void)setUp { - localConfig = [[CR_Config alloc] initWithCriteoPublisherId:@"1337"]; + localConfig = [[CR_Config alloc] initWithCriteoPublisherId:@"1337" inventoryGroupId:@"test"]; mockApiHandler = OCMStrictClassMock(CR_ApiHandler.class); mockIntegrationRegistry = OCMStrictClassMock(CR_IntegrationRegistry.class); OCMStub([mockIntegrationRegistry profileId]).andReturn(@42); diff --git a/CriteoPublisherSdk/Tests/UnitTests/Configuration/CR_RemoteConfigRequestTests.m b/CriteoPublisherSdk/Tests/UnitTests/Configuration/CR_RemoteConfigRequestTests.m index 0393c471..11064231 100644 --- a/CriteoPublisherSdk/Tests/UnitTests/Configuration/CR_RemoteConfigRequestTests.m +++ b/CriteoPublisherSdk/Tests/UnitTests/Configuration/CR_RemoteConfigRequestTests.m @@ -30,6 +30,7 @@ @implementation CR_RemoteConfigRequestTests - (void)testToPostPayload_GivenConfig { CR_Config *config = OCMClassMock([CR_Config class]); OCMStub(config.criteoPublisherId).andReturn(@"myCpId"); + OCMStub(config.inventoryGroupId).andReturn(nil); OCMStub(config.sdkVersion).andReturn(@"1.3.3.7"); OCMStub(config.appId).andReturn(@"myAppId"); OCMStub(config.deviceModel).andReturn(@"myDeviceModel"); @@ -52,4 +53,31 @@ - (void)testToPostPayload_GivenConfig { XCTAssertEqualObjects(postBody, expected); } +- (void)testToPostPayloadWithInventoryGroupId_GivenConfig { + CR_Config *config = OCMClassMock([CR_Config class]); + OCMStub(config.criteoPublisherId).andReturn(@"myCpId"); + OCMStub(config.inventoryGroupId).andReturn(@"myInventoryGroupId"); + OCMStub(config.sdkVersion).andReturn(@"1.3.3.7"); + OCMStub(config.appId).andReturn(@"myAppId"); + OCMStub(config.deviceModel).andReturn(@"myDeviceModel"); + OCMStub(config.deviceOs).andReturn(@"myDeviceOs"); + NSNumber *profileId = @42; + + CR_RemoteConfigRequest *request = [CR_RemoteConfigRequest requestWithConfig:config + profileId:profileId]; + NSDictionary *postBody = request.postBody; + + NSDictionary *expected = @{ + @"cpId" : @"myCpId", + @"inventoryGroupId" : @"myInventoryGroupId", + @"bundleId" : @"myAppId", + @"sdkVersion" : @"1.3.3.7", + @"rtbProfileId" : profileId, + @"deviceModel" : @"myDeviceModel", + @"deviceOs" : @"myDeviceOs" + }; + + XCTAssertEqualObjects(postBody, expected); +} + @end diff --git a/CriteoPublisherSdk/Tests/UnitTests/CriteoTests.m b/CriteoPublisherSdk/Tests/UnitTests/CriteoTests.m index 7adb7992..3b30f67e 100644 --- a/CriteoPublisherSdk/Tests/UnitTests/CriteoTests.m +++ b/CriteoPublisherSdk/Tests/UnitTests/CriteoTests.m @@ -93,8 +93,12 @@ - (void)testRegister_GivenNilPublisherId_LogError { CR_DependencyProvider *dependencyProviderMock = OCMClassMock(CR_DependencyProvider.class); Criteo *criteo = [[Criteo alloc] initWithDependencyProvider:dependencyProviderMock]; NSString *nilPublisherId = nil; + NSString *nilInventoryGroupId = nil; NSString *nilStoreId = nil; - [criteo registerCriteoPublisherId:nilPublisherId withStoreId:nilStoreId withAdUnits:@[]]; + [criteo registerCriteoPublisherId:nilPublisherId + withInventoryGroupId:nilInventoryGroupId + withStoreId:nilStoreId + withAdUnits:@[]]; OCMVerify([self.loggingMock logMessage:[OCMArg checkWithBlock:^BOOL(CR_LogMessage *logMessage) { return logMessage.severity == CR_LogSeverityError && @@ -108,8 +112,12 @@ - (void)testRegister_GivenEmptyPublisherId_LogError { CR_DependencyProvider *dependencyProviderMock = OCMClassMock(CR_DependencyProvider.class); Criteo *criteo = [[Criteo alloc] initWithDependencyProvider:dependencyProviderMock]; NSString *emptyPublisherId = @""; + NSString *emptyInventoryGroupId = @""; NSString *emptyStoreId = @""; - [criteo registerCriteoPublisherId:emptyPublisherId withStoreId:emptyStoreId withAdUnits:@[]]; + [criteo registerCriteoPublisherId:emptyPublisherId + withInventoryGroupId:emptyInventoryGroupId + withStoreId:emptyStoreId + withAdUnits:@[]]; OCMVerify([self.loggingMock logMessage:[OCMArg checkWithBlock:^BOOL(CR_LogMessage *logMessage) { return logMessage.severity == CR_LogSeverityError && @@ -321,7 +329,10 @@ - (void)registerWithMockedDependencyProvider:(void (^)(CR_DependencyProvider *)) OCMStub(dependencyProviderMock.threadManager).andReturn(threadManager); testBlock(dependencyProviderMock); Criteo *criteo = [[Criteo alloc] initWithDependencyProvider:dependencyProviderMock]; - [criteo registerCriteoPublisherId:@"testPublisherId" withStoreId:@"testStoreId" withAdUnits:@[]]; + [criteo registerCriteoPublisherId:@"testPublisherId" + withInventoryGroupId:@"testInventoryGroupId" + withStoreId:@"testStoreId" + withAdUnits:@[]]; } - (void)mockBidManagerWithAdUnit:(CR_CacheAdUnit *)adUnit respondBid:(CR_CdbBid *)bid { diff --git a/CriteoPublisherSdk/Tests/UnitTests/Network/CR_ApiHandlerTests.m b/CriteoPublisherSdk/Tests/UnitTests/Network/CR_ApiHandlerTests.m index 2867b731..35e8c297 100644 --- a/CriteoPublisherSdk/Tests/UnitTests/Network/CR_ApiHandlerTests.m +++ b/CriteoPublisherSdk/Tests/UnitTests/Network/CR_ApiHandlerTests.m @@ -242,6 +242,7 @@ - (void)testGetConfig { CR_Config *mockConfig = OCMStrictClassMock([CR_Config class]); OCMStub([mockConfig criteoPublisherId]).andReturn(@("1")); + OCMStub([mockConfig inventoryGroupId]).andReturn(@("1")); OCMStub([mockConfig sdkVersion]).andReturn(@"1.0"); OCMStub([mockConfig appId]).andReturn(@"com.criteo.sdk.publisher"); OCMStub([mockConfig configUrl]).andReturn(@"https://url-for-getting-config"); @@ -294,6 +295,7 @@ - (void)testCdbCallContainsSdkAndProfile { - (void)testCdbCallContainsPublisherInfo { NSDictionary *expected = @{ CR_ApiQueryKeys.cpId : self.configMock.criteoPublisherId, + CR_ApiQueryKeys.inventoryGroupId : self.configMock.inventoryGroupId, CR_ApiQueryKeys.bundleId : self.configMock.appId, CR_ApiQueryKeys.storeId : self.configMock.storeId, CR_ApiQueryKeys.ext : @{} @@ -688,6 +690,7 @@ - (void)callCdbWithCompletionHandler:(CR_CdbCompletionHandler)completionHandler - (CR_Config *)buildConfigMock { CR_Config *mockConfig = OCMStrictClassMock([CR_Config class]); OCMStub([mockConfig criteoPublisherId]).andReturn(@("1")); + OCMStub([mockConfig inventoryGroupId]).andReturn(@("1")); OCMStub([mockConfig sdkVersion]).andReturn(@"1.0"); OCMStub([mockConfig cdbUrl]).andReturn(@"https://dummyCdb.com"); OCMStub([mockConfig path]).andReturn(@"inApp"); diff --git a/CriteoPublisherSdk/Tests/UnitTests/Network/CR_BidRequestSerializerSwiftTests.swift b/CriteoPublisherSdk/Tests/UnitTests/Network/CR_BidRequestSerializerSwiftTests.swift index f400cf6e..da805344 100644 --- a/CriteoPublisherSdk/Tests/UnitTests/Network/CR_BidRequestSerializerSwiftTests.swift +++ b/CriteoPublisherSdk/Tests/UnitTests/Network/CR_BidRequestSerializerSwiftTests.swift @@ -51,6 +51,7 @@ class CR_BidRequestSerializerSwiftTests: XCTestCase { CR_CacheAdUnit(adUnitId: "2", width: 2, height: 2) ]) config.criteoPublisherId = "Test Published Id" + config.inventoryGroupId = "Inventory Id" } func testUrl() { @@ -77,7 +78,9 @@ class CR_BidRequestSerializerSwiftTests: XCTestCase { func testBodyWithPublisher() { let expected: NSDictionary = [ - NSString.bundleIdKey: config.appId, NSString.cpIdKey: config.criteoPublisherId!, + NSString.bundleIdKey: config.appId, + NSString.cpIdKey: config.criteoPublisherId!, + NSString.inventoryGroupIdKey: config.inventoryGroupId!, "ext": NSDictionary() ] let body = generateBody() diff --git a/CriteoPublisherSdk/Tests/Utility/Categories/CR_DependencyProvider+Testing.m b/CriteoPublisherSdk/Tests/Utility/Categories/CR_DependencyProvider+Testing.m index 1913c060..dde4ac79 100644 --- a/CriteoPublisherSdk/Tests/Utility/Categories/CR_DependencyProvider+Testing.m +++ b/CriteoPublisherSdk/Tests/Utility/Categories/CR_DependencyProvider+Testing.m @@ -56,6 +56,7 @@ - (NSString *)wireMockEndPoint:(NSString *)path { - (CR_DependencyProvider *)withWireMockConfiguration { self.config = [[CR_Config alloc] initWithCriteoPublisherId:CriteoTestingPublisherId + inventoryGroupId:CriteoTestingInventoryGroupId storeId:CriteoTestingStoreId cdbUrl:[self wireMockEndPoint:@"cdb"] appEventsUrl:[self wireMockEndPoint:@"gum/appevent/v1"] diff --git a/CriteoPublisherSdk/Tests/Utility/Categories/Criteo+Testing.h b/CriteoPublisherSdk/Tests/Utility/Categories/Criteo+Testing.h index 11b8b675..a1fa0f98 100644 --- a/CriteoPublisherSdk/Tests/Utility/Categories/Criteo+Testing.h +++ b/CriteoPublisherSdk/Tests/Utility/Categories/Criteo+Testing.h @@ -34,6 +34,7 @@ FOUNDATION_EXPORT NSString *const PreprodNativeAdUnitId; FOUNDATION_EXPORT NSString *const VideoInterstitialAdUnitId; FOUNDATION_EXPORT NSString *const RewardedAdUnitId; FOUNDATION_EXPORT NSString *const CriteoTestingStoreId; +FOUNDATION_EXPORT NSString *const CriteoTestingInventoryGroupId; @interface Criteo (Testing) /** An OCPartialMock set as an id (like in the OCMock library) for API convenience. */ diff --git a/CriteoPublisherSdk/Tests/Utility/Categories/Criteo+Testing.m b/CriteoPublisherSdk/Tests/Utility/Categories/Criteo+Testing.m index 752f8670..6842e49c 100644 --- a/CriteoPublisherSdk/Tests/Utility/Categories/Criteo+Testing.m +++ b/CriteoPublisherSdk/Tests/Utility/Categories/Criteo+Testing.m @@ -34,6 +34,7 @@ // This publisherId B-056946 exists in production. NSString *const CriteoTestingPublisherId = @"B-000001"; NSString *const CriteoTestingStoreId = @"testStoreId"; +NSString *const CriteoTestingInventoryGroupId = @"testInventoryGroupId"; NSString *const DemoBannerAdUnitId = @"30s6zt3ayypfyemwjvmp"; NSString *const DemoInterstitialAdUnitId = @"6yws53jyfjgoq1ghnuqb"; @@ -109,6 +110,7 @@ - (void)testing_registerBanner { - (void)testing_registerWithAdUnits:(NSArray<CRAdUnit *> *)adUnits { [self registerCriteoPublisherId:CriteoTestingPublisherId + withInventoryGroupId:CriteoTestingInventoryGroupId withStoreId:CriteoTestingStoreId withAdUnits:adUnits]; } diff --git a/CriteoPublisherSdk/Tests/Utility/Categories/NSString+APIKeys.h b/CriteoPublisherSdk/Tests/Utility/Categories/NSString+APIKeys.h index 9fe9b745..15d70591 100644 --- a/CriteoPublisherSdk/Tests/Utility/Categories/NSString+APIKeys.h +++ b/CriteoPublisherSdk/Tests/Utility/Categories/NSString+APIKeys.h @@ -34,6 +34,7 @@ NS_ASSUME_NONNULL_BEGIN @property(copy, nonatomic, class, readonly) NSString *bundleIdKey; @property(copy, nonatomic, class, readonly) NSString *cpIdKey; +@property(copy, nonatomic, class, readonly) NSString *inventoryGroupIdKey; #pragma mark User diff --git a/CriteoPublisherSdk/Tests/Utility/Categories/NSString+APIKeys.m b/CriteoPublisherSdk/Tests/Utility/Categories/NSString+APIKeys.m index ec5335bb..f4de77b2 100644 --- a/CriteoPublisherSdk/Tests/Utility/Categories/NSString+APIKeys.m +++ b/CriteoPublisherSdk/Tests/Utility/Categories/NSString+APIKeys.m @@ -49,6 +49,10 @@ + (NSString *)cpIdKey { return @"cpId"; } ++ (NSString *)inventoryGroupIdKey { + return @"inventoryGroupId"; +} + #pragma mark - User + (NSString *)userAgentKey { diff --git a/CriteoPublisherSdk/iTestHostApp/Info.plist b/CriteoPublisherSdk/iTestHostApp/Info.plist index 48e107a6..4d835fbe 100644 --- a/CriteoPublisherSdk/iTestHostApp/Info.plist +++ b/CriteoPublisherSdk/iTestHostApp/Info.plist @@ -15,7 +15,7 @@ <key>CFBundlePackageType</key> <string>APPL</string> <key>CFBundleShortVersionString</key> - <string>6.2.0</string> + <string>7.0.0</string> <key>CFBundleVersion</key> <string>1</string> <key>LSRequiresIPhoneOS</key> diff --git a/Gemfile.lock b/Gemfile.lock index d09ce280..4d9011df 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -263,7 +263,7 @@ GEM simctl (1.6.10) CFPropertyList naturally - sqlite3 (1.4.2) + sqlite3 (1.5.4) terminal-notifier (2.0.0) terminal-table (3.0.2) unicode-display_width (>= 1.1.1, < 3) diff --git a/Podfile.lock b/Podfile.lock index 0f130142..82fd787d 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -35,6 +35,6 @@ SPEC CHECKSUMS: OCMock: 9491e4bec59e0b267d52a9184ff5605995e74be8 SwiftLint: 06ac37e4d38c7068e0935bb30cda95f093bec761 -PODFILE CHECKSUM: 54d5470e7c2ea1832d07f974b0cd229dd19fbf3e +PODFILE CHECKSUM: debd610e4d3856bc7ad7baafb7e5687354157485 COCOAPODS: 1.15.2