Skip to content

Instantly share code, notes, and snippets.

@oded-regev
Created November 2, 2020 13:10
Show Gist options
  • Save oded-regev/b0d17a8934797a23d01ecb9c5feccf83 to your computer and use it in GitHub Desktop.
Save oded-regev/b0d17a8934797a23d01ecb9c5feccf83 to your computer and use it in GitHub Desktop.
iOS14 example on how to use loadProduct() with SKAdNetwork signature support
-(void) openAppInstallRec:(OBRecommendation * _Nonnull)rec inNavController:(UINavigationController * _Nonnull)navController {
if (@available(iOS 11.3, *)) {
SKStoreProductViewController *storeViewController = [[SKStoreProductViewController alloc] init];
NSDictionary *productParameters = [self prepareLoadProductParams:rec];
NSLog(@"loadProductWithParameters: %@", productParameters);
[storeViewController loadProductWithParameters:productParameters completionBlock:^(BOOL result, NSError * _Nullable error) {
// result - true if the product information was successfully loaded, otherwise false.
NSLog(@"loadProductWithParameters - result: %@, error: %@", result ? @"true" : @"false", [error localizedDescription]);
}];
[navController presentViewController:storeViewController animated:YES completion:nil];
}
}
-(NSDictionary *) prepareLoadProductParams:(OBRecommendation * _Nonnull)rec {
NSMutableDictionary* productParameters = [[NSMutableDictionary alloc] init];
if (@available(iOS 11.3, *)) {
[productParameters setObject: rec.skAdNetworkData.iTunesItemId forKey: SKStoreProductParameterITunesItemIdentifier];
[productParameters setObject: rec.skAdNetworkData.adNetworkId forKey: SKStoreProductParameterAdNetworkIdentifier];
[productParameters setObject: rec.skAdNetworkData.signature forKey: SKStoreProductParameterAdNetworkAttributionSignature];
[productParameters setObject:[[NSUUID alloc] initWithUUIDString:rec.skAdNetworkData.nonce] forKey:SKStoreProductParameterAdNetworkNonce];
// timestamp and campaignId must be valid
if (rec.skAdNetworkData.timestamp > 0 && [rec.skAdNetworkData.campaignId isKindOfClass: [NSNumber class]]) {
[productParameters setObject: @(rec.skAdNetworkData.timestamp) forKey: SKStoreProductParameterAdNetworkTimestamp];
[productParameters setObject: @([rec.skAdNetworkData.campaignId intValue]) forKey: SKStoreProductParameterAdNetworkCampaignIdentifier];
}
if (@available(iOS 14, *)) {
// These product params are only included in SKAdNetwork version 2.0
if ([rec.skAdNetworkData.skNetworkVersion isEqualToString:@"2.0"]) {
[productParameters setObject: @"2.0" forKey: SKStoreProductParameterAdNetworkVersion];
[productParameters setObject: rec.skAdNetworkData.sourceAppId forKey: SKStoreProductParameterAdNetworkSourceAppStoreIdentifier];
}
}
} else {
return nil;
}
return productParameters;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment