Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 7 additions & 2 deletions Adjust.podspec
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
Pod::Spec.new do |s|
s.name = "Adjust"
s.version = "4.4.2"
s.version = "4.4.3"
s.summary = "This is the iOS SDK of adjust. You can read more about it at http://adjust.com."
s.homepage = "http://adjust.com"
s.license = { :type => 'MIT', :file => 'MIT-LICENSE' }
s.author = { "Christian Wellenbrock" => "welle@adjust.com" }
s.source = { :git => "https://github.com/adjust/ios_sdk.git", :tag => "v4.4.2" }
s.source = { :git => "https://github.com/adjust/ios_sdk.git", :tag => "v4.4.3" }
s.ios.deployment_target = '5.0'
s.tvos.deployment_target = '9.0'
s.framework = 'SystemConfiguration'
Expand All @@ -27,4 +27,9 @@ Pod::Spec.new do |s|
cr.source_files = 'plugin/Criteo/*.{h,m}'
cr.dependency 'Adjust/Core'
end

s.subspec 'Trademob' do |tm|
tm.source_files = 'plugin/Trademob/*.{h,m}'
tm.dependency 'Adjust/Core'
end
end
2 changes: 1 addition & 1 deletion Adjust/ADJUtil.m
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
#include <sys/xattr.h>

static NSString * const kBaseUrl = @"https://app.adjust.com";
static NSString * const kClientSdk = @"ios4.4.2";
static NSString * const kClientSdk = @"ios4.4.3";

static NSString * const kDateFormat = @"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'Z";
static NSDateFormatter *dateFormat;
Expand Down
2 changes: 1 addition & 1 deletion AdjustTests/ADJPackageFields.m
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ - (id) init {

// default values
self.appToken = @"123456789012";
self.clientSdk = @"ios4.4.2";
self.clientSdk = @"ios4.4.3";
self.suffix = @"";
self.environment = @"sandbox";

Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ If you're using [CocoaPods][cocoapods] for `iOs` or `tvOS`, you can add the foll
`Podfile` and continue with [step 4](#step4):

```ruby
pod 'Adjust', :git => 'git://github.com/adjust/ios_sdk.git', :tag => 'v4.4.2'
pod 'Adjust', :git => 'git://github.com/adjust/ios_sdk.git', :tag => 'v4.4.3'
```

### 1. Get the SDK
Expand Down
2 changes: 1 addition & 1 deletion VERSION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
4.4.2
4.4.3
2 changes: 1 addition & 1 deletion doc/migrate.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
## Migrate your adjust SDK for iOS to v4.4.2 from v3.4.0
## Migrate your adjust SDK for iOS to v4.4.3 from v3.4.0

### Initial setup

Expand Down
80 changes: 80 additions & 0 deletions doc/trademob_plugin.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
## Trademob plugin

Integrate adjust with Trademob events by following these steps:

1. Locate the `plugin/Trademob` folder inside the downloaded archive from our [releases page](https://github.com/adjust/ios_sdk/releases).

2. Drag the `ADJTrademob.h` and `ADJTrademob.m` files into the `Adjust` folder inside your project.

3. In the dialog `Choose options for adding these files` make sure to check the checkbox
to `Copy items if needed` and select the radio button to `Create groups`.

For questions regarding this plugin, please reach out to `eugenio.warglien@trademob.com`

You can now use Trademob events in the following ways:

### View Listing

```objc
#import "ADJTrademob.h"

ADJEvent *event = [ADJEvent eventWithEventToken:@"{viewListingEventToken}"];

NSArray *itemIds = @[@"itemId1", @"itemId2", @"itemId3"];

NSDictionary *metadata = @{@"info1":@"value1", @"info2":@"value2"};

[ADJTrademob injectViewListingIntoEvent:event itemIds:itemIds metadata:metadata];

[Adjust trackEvent:event];
```

### View Item

```objc
#import "ADJTrademob.h"

ADJEvent *event = [ADJEvent eventWithEventToken:@"{viewItemEventToken}"];

NSDictionary *metadata = @{@"info1":@"value1", @"info2":@"value2"};

[ADJTrademob injectViewItemIntoEvent:event itemId:@"itemId" metadata:metadata];

[Adjust trackEvent:event];
```

### Add to Basket

```objc
#import "ADJTrademob.h"

ADJEvent *event = [ADJEvent eventWithEventToken:@"{addToBasketEventToken}"];

ADJTrademobItem *item1 = [[ADJTrademobItem alloc] initWithId:@"itemId1" price:120.4 quantity:1];
ADJTrademobItem *item2 = [[ADJTrademobItem alloc] initWithId:@"itemId2" price:20.1 quantity:4];

NSArray *items = @[item1, item2];

[ADJTrademob injectAddToBasketIntoEvent:event items:items metadata:nil];

[Adjust trackEvent:event];
```

### Checkout

```objc
#import "ADJTrademob.h"

ADJEvent *event = [ADJEvent eventWithEventToken:@"{checkoutEventToken}"];

ADJTrademobItem *item1 = [[ADJTrademobItem alloc] initWithId:@"itemId1" price:120.4 quantity:1];
ADJTrademobItem *item2 = [[ADJTrademobItem alloc] initWithId:@"itemId2" price:20.1 quantity:4];

NSArray *items = @[item1, item2];

NSDictionary *metadata = @{@"info1":@"value1", @"info2":@"value2"};

[ADJTrademob injectCheckoutIntoEvent:event items:items metadata:metadata];

[Adjust trackEvent:event];
```
43 changes: 43 additions & 0 deletions plugin/Trademob/ADJTrademob.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
//
// ADJTrademob.h
// Adjust
//
// Created by Davit Ohanyan on 9/14/15.
// Copyright © 2015 adjust GmbH. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "ADJEvent.h"

@interface ADJTrademobItem : NSObject

@property (nonatomic, assign) float price;
@property (nonatomic, assign) NSUInteger quantity;
@property (nonatomic, copy) NSString *itemId;

- (instancetype) initWithId:(NSString *)itemId
price:(float)price
quantity:(NSUInteger)quantity;

@end

@interface ADJTrademob : NSObject

+ (void)injectViewListingIntoEvent:(ADJEvent *)event
itemIds:(NSArray *)itemIds
metadata:(NSDictionary *)metadata;

+ (void)injectViewItemIntoEvent:(ADJEvent *)event
itemId:(NSString *)itemId
metadata:(NSDictionary *)metadata;


+ (void)injectAddToBasketIntoEvent:(ADJEvent *)event
items:(NSArray *)items
metadata:(NSDictionary *)metadata;

+ (void)injectCheckoutIntoEvent:(ADJEvent *)event
items:(NSArray *)items
metadata:(NSDictionary *)metadata;

@end
162 changes: 162 additions & 0 deletions plugin/Trademob/ADJTrademob.m
Original file line number Diff line number Diff line change
@@ -0,0 +1,162 @@
//
// ADJTrademob.m
// Adjust
//
// Created by Davit Ohanyan on 9/14/15.
// Copyright © 2015 Trademob GmbH. All rights reserved.
//

#import "ADJTrademob.h"
#import "ADJAdjustFactory.h"

static const NSUInteger MAX_LISTING_ITEMS_COUNT = 5;


@implementation ADJTrademobItem

- (instancetype) initWithId:(NSString *)itemId
price:(float)price
quantity:(NSUInteger)quantity {

self = [super init];

if (self) {
self.itemId = itemId;
self.price = price;
self.quantity = quantity;
}

return self;
}

+ (NSDictionary *)dictionaryFromItem: (ADJTrademobItem *)item {
return @{@"itemId": item.itemId, @"price":
[NSNumber numberWithFloat:item.price],
@"quantity":[NSNumber numberWithUnsignedInteger:item.quantity]};
}

@end

@implementation ADJTrademob


+ (void)injectViewListingIntoEvent:(ADJEvent *)event
itemIds:(NSArray *)itemIds
metadata:(NSDictionary *)metadata {
[event addPartnerParameter:@"tm_item" value:[ADJTrademob stringifyItemIds:itemIds]];
[event addPartnerParameter:@"tm_md" value:[ADJTrademob stringifyMetadata:metadata]];
}

+ (void)injectViewItemIntoEvent:(ADJEvent *)event
itemId:(NSString *)itemId
metadata:(NSDictionary *)metadata {
[event addPartnerParameter:@"tm_item" value:itemId];
[event addPartnerParameter:@"tm_md" value:[ADJTrademob stringifyMetadata:metadata]];
}

+ (void)injectAddToBasketIntoEvent:(ADJEvent *)event
items:(NSArray *)items
metadata:(NSDictionary *)metadata {
[event addPartnerParameter:@"tm_item" value:[ADJTrademob stringifyItems:items]];
[event addPartnerParameter:@"tm_md" value:[ADJTrademob stringifyMetadata:metadata]];
}

+ (void)injectCheckoutIntoEvent:(ADJEvent *)event
items:(NSArray *)items
metadata:(NSDictionary *)metadata {
[event addPartnerParameter:@"tm_item" value:[ADJTrademob stringifyItems:items]];
[event addPartnerParameter:@"tm_md" value:[ADJTrademob stringifyMetadata:metadata]];
}


# pragma private helper functions


+ (NSString *)stringifyItemIds:(NSArray *)itemIds {

NSUInteger length = [itemIds count];

NSMutableArray *filteredArray = [NSMutableArray array];

for (NSUInteger index = 0; index < length; ++index) {
if (index >= MAX_LISTING_ITEMS_COUNT) {
break;
}

NSObject *currentId = itemIds[index];
if ([currentId isKindOfClass:[NSString class]] && ![(NSString *)currentId isEqualToString:@""]) {
[filteredArray addObject:currentId];
}
}

NSString* tmItemIds = [ADJTrademob stringify:filteredArray];

if (nil == tmItemIds) {
tmItemIds = @"[]";
}

return [tmItemIds stringByReplacingOccurrencesOfString:@"\\/" withString:@"/"];
}

+ (NSString *)stringifyItems:(NSArray *)items {
NSUInteger length = [items count];

NSMutableArray *filteredItems = [NSMutableArray array];

for (NSUInteger index = 0; index < length; ++index) {

if (index >= MAX_LISTING_ITEMS_COUNT) {
break;
}
ADJTrademobItem* currentItem = items[index];
if ([currentItem isKindOfClass:[ADJTrademobItem class]]) {
NSDictionary* dict = [ADJTrademobItem dictionaryFromItem:currentItem];
[filteredItems addObject:dict];
}
}

NSString *tmItemIds = [ADJTrademob stringify:filteredItems];

if (nil == tmItemIds) {
tmItemIds = @"[]";
}

return [tmItemIds stringByReplacingOccurrencesOfString:@"\\/" withString:@"/"];
}

+ (NSString *)stringifyMetadata: (NSDictionary *)metadata {
NSMutableDictionary *filteredData = [NSMutableDictionary dictionary];

[metadata enumerateKeysAndObjectsUsingBlock:
^(NSString *key, id value, BOOL* stop){
if ([value isKindOfClass:[NSString class]]) {
filteredData[key] = value;
}
}];

NSString *jsonMetaData = [ADJTrademob stringify:filteredData];

if (nil == jsonMetaData) {
jsonMetaData = @"{}";
}

return [jsonMetaData stringByReplacingOccurrencesOfString:@"\\/" withString:@"/"];
}

+ (NSString *)stringify:(NSObject *)object {
if ( nil == object ) {
return nil;
}

NSError *error;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:object options:0 error:&error];

if ( !jsonData || error ) {
[ADJAdjustFactory.logger error:@"%@", [error debugDescription]];
return nil;
} else{
return [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
}
}

@end