240 lines
10 KiB
Plaintext
240 lines
10 KiB
Plaintext
//
|
|
// TenjinUnityInterface.mm
|
|
// Unity-iOS bridge
|
|
//
|
|
// Created by Christopher Farm.
|
|
//
|
|
//
|
|
|
|
#include "TenjinUnityInterface.h"
|
|
|
|
extern "C" {
|
|
#define MALLOC_ARRAY(count, type) (count == 0 ? NULL : (type*) malloc(count * sizeof(type)))
|
|
void iosTenjin_InternalFreeStringStringKeyValuePairs(TenjinStringStringKeyValuePair* pairs, int32_t pairCount);
|
|
bool iosTenjin_InternalConvertDictionaryToStringStringPairs(NSDictionary<NSString*, NSObject*>* dictionary, TenjinStringStringKeyValuePair** outPairArray, int* outPairCount);
|
|
|
|
TenjinDeeplinkHandlerFunc registeredDeeplinkHandlerFunc;
|
|
|
|
void iosTenjinInit(const char* apiKey){
|
|
NSString *apiKeyStr = [NSString stringWithUTF8String:apiKey];
|
|
|
|
NSLog(@"Called Tenjin [TenjinSDK sharedInstanceWithToken:%@]", apiKeyStr);
|
|
[TenjinSDK initialize:apiKeyStr];
|
|
}
|
|
|
|
void iosTenjinInitWithSharedSecret(const char* apiKey, const char* sharedSecret){
|
|
NSString *apiKeyStr = [NSString stringWithUTF8String:apiKey];
|
|
NSString *sharedSecretStr = [NSString stringWithUTF8String:sharedSecret];
|
|
|
|
NSLog(@"Called Tenjin [TenjinSDK sharedInstanceWithToken:%@ andSharedSecret:*]", apiKeyStr);
|
|
[TenjinSDK initialize:apiKeyStr andSharedSecret:sharedSecretStr];
|
|
}
|
|
|
|
void iosTenjinInitWithAppSubversion(const char* apiKey, int subversion){
|
|
NSString *apiKeyStr = [NSString stringWithUTF8String:apiKey];
|
|
NSNumber *subVersion = [NSNumber numberWithInt:subversion];
|
|
|
|
NSLog(@"Called Tenjin [TenjinSDK sharedInstanceWithToken:%@ andAppSubversion:%@]", apiKeyStr, subVersion);
|
|
[TenjinSDK initialize:apiKeyStr andAppSubversion:subVersion];
|
|
}
|
|
|
|
void iosTenjinInitWithSharedSecretAppSubversion(const char* apiKey, const char* sharedSecret, int subversion){
|
|
NSString *apiKeyStr = [NSString stringWithUTF8String:apiKey];
|
|
NSString *sharedSecretStr = [NSString stringWithUTF8String:sharedSecret];
|
|
NSNumber *subVersion = [NSNumber numberWithInt:subversion];
|
|
|
|
NSLog(@"Called Tenjin [TenjinSDK sharedInstanceWithToken:%@ andSharedSecret:* andAppSubversion:%@]", apiKeyStr, subVersion);
|
|
[TenjinSDK initialize:apiKeyStr andSharedSecret:sharedSecretStr andAppSubversion:subVersion];
|
|
}
|
|
|
|
void iosTenjinConnect(){
|
|
[TenjinSDK connect];
|
|
}
|
|
|
|
void iosTenjinConnectWithDeferredDeeplink(const char* deferredDeeplink){
|
|
NSString *deferredDeeplinkStr = [NSString stringWithUTF8String:deferredDeeplink];
|
|
NSURL *deferredDeeplinkStrUri = [NSURL URLWithString:[deferredDeeplinkStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
|
|
NSLog(@"Called Tenjin [TenjinSDK connectWithDeferredDeeplink:%@]", deferredDeeplinkStr);
|
|
[TenjinSDK connectWithDeferredDeeplink:deferredDeeplinkStrUri];
|
|
}
|
|
|
|
void iosTenjinSendEvent(const char* eventName){
|
|
NSString *eventNameStr = [NSString stringWithUTF8String:eventName];
|
|
NSLog(@"Called Tenjin [TenjinSDK sendEventWithName:%@]", eventNameStr);
|
|
[TenjinSDK sendEventWithName:eventNameStr];
|
|
}
|
|
|
|
void iosTenjinSendEventWithValue(const char* eventName, const char* eventValue){
|
|
NSString *eventNameStr = [NSString stringWithUTF8String:eventName];
|
|
NSString *eventValueStr = [NSString stringWithUTF8String:eventValue];
|
|
NSLog(@"Called Tenjin [TenjinSDK sendEventWithName:%@ andEventValue:%@]", eventNameStr, eventValueStr);
|
|
[TenjinSDK sendEventWithName:eventNameStr andEventValue:eventValueStr];
|
|
}
|
|
|
|
void iosTenjinTransaction(const char* productId, const char* currencyCode, int quantity, double price){
|
|
NSString *prodId = [NSString stringWithUTF8String:productId];
|
|
NSString *curCode = [NSString stringWithUTF8String:currencyCode];
|
|
NSDecimalNumber* pr = [[NSDecimalNumber alloc] initWithDouble:price];
|
|
NSLog(@"Called Tenjin [TenjinSDK transactionWithProductName:%@ andCurrencyCode:%@ andQuantity:%d andUnitPrice:%f]", prodId, curCode, quantity, price);
|
|
|
|
//call manual method in tenjin sdk
|
|
[TenjinSDK transactionWithProductName:prodId andCurrencyCode:curCode andQuantity:quantity andUnitPrice:pr];
|
|
}
|
|
|
|
void iosTenjinTransactionWithReceiptData(const char* productId, const char* currencyCode, int quantity, double price, const char* transactionId, const char* receipt){
|
|
NSString *prodId = [NSString stringWithUTF8String: productId];
|
|
NSString *curCode = [NSString stringWithUTF8String: currencyCode];
|
|
NSDecimalNumber *pr = [[NSDecimalNumber alloc] initWithDouble: price];
|
|
NSString *tid = [NSString stringWithUTF8String: transactionId];
|
|
NSString *rec = [NSString stringWithUTF8String: receipt];
|
|
|
|
//call manual tenjin call with receipt data
|
|
NSLog(@"Called Tenjin [TenjinSDK transactionWithProductName:%@ andCurrencyCode:%@ andQuantity:%d andUnitPrice:%f andTransactionId:%@ andBase64Receipt:%@]", prodId, curCode, quantity, price, tid, rec);
|
|
[TenjinSDK transactionWithProductName: prodId andCurrencyCode:curCode andQuantity:quantity andUnitPrice:pr andTransactionId:tid andBase64Receipt:rec];
|
|
}
|
|
|
|
void iosTenjinOptIn(){
|
|
NSLog(@"Called Tenjin [TenjinSDK optIn]");
|
|
[TenjinSDK optIn];
|
|
}
|
|
|
|
void iosTenjinOptOut(){
|
|
NSLog(@"Called Tenjin [TenjinSDK optOut]");
|
|
[TenjinSDK optOut];
|
|
}
|
|
|
|
void iosTenjinOptInParams(char** params, int size){
|
|
NSMutableArray *paramsList = [[NSMutableArray alloc] init];
|
|
for (int i = 0; i < size; ++i) {
|
|
NSString *str = [[NSString alloc] initWithCString:params[i] encoding:NSUTF8StringEncoding];
|
|
NSLog(@"OptIn Param: %@", str);
|
|
[paramsList addObject:str];
|
|
}
|
|
NSLog(@"Called Tenjin [TenjinSDK optInParams]");
|
|
[TenjinSDK optInParams:paramsList];
|
|
}
|
|
|
|
void iosTenjinOptOutParams(char** params, int size){
|
|
NSMutableArray *paramsList = [[NSMutableArray alloc] init];
|
|
for (int i = 0; i < size; ++i) {
|
|
NSString *str = [[NSString alloc] initWithCString:params[i] encoding:NSUTF8StringEncoding];
|
|
NSLog(@"OptOut Param: %@", str);
|
|
[paramsList addObject:str];
|
|
}
|
|
NSLog(@"Called Tenjin [TenjinSDK optOutParams]");
|
|
[TenjinSDK optOutParams:paramsList];
|
|
}
|
|
|
|
void iosTenjinAppendAppSubversion(int subversion){
|
|
NSNumber *subVersion = [NSNumber numberWithInt:subversion];
|
|
NSLog(@"Called Tenjin [TenjinSDK appendAppSubversion]");
|
|
[TenjinSDK appendAppSubversion:subVersion];
|
|
}
|
|
|
|
void iosTenjinUpdateConversionValue(int conversionValue){
|
|
NSLog(@"Called Tenjin [TenjinSDK updateConversionValue]");
|
|
[TenjinSDK updateConversionValue:conversionValue];
|
|
}
|
|
|
|
void iosTenjinRegisterAppForAdNetworkAttribution(){
|
|
NSLog(@"Called Tenjin [TenjinSDK registerAppForAdNetworkAttribution]");
|
|
[TenjinSDK registerAppForAdNetworkAttribution];
|
|
}
|
|
|
|
void iosTenjinRequestTrackingAuthorizationWithCompletionHandler(){
|
|
NSLog(@"Called Tenjin [TenjinSDK requestTrackingAuthorizationWithCompletionHandler]");
|
|
[TenjinSDK requestTrackingAuthorizationWithCompletionHandler:^(NSUInteger status) {
|
|
NSString *statusString = [NSString stringWithFormat:@"%tu", status];
|
|
NSLog(@"ATTracking status: %@", statusString);
|
|
const char* charStatus = [statusString UTF8String];
|
|
UnitySendMessage([@"Tenjin" UTF8String], "GetTrackingAuthorizationStatus", charStatus);
|
|
}];
|
|
}
|
|
|
|
void iosTenjinSubscribeMoPubImpressions(){
|
|
[TenjinSDK subscribeMoPubImpressions];
|
|
}
|
|
|
|
void iosTenjinSetDebugLogs(){
|
|
[TenjinSDK debugLogs];
|
|
}
|
|
|
|
void iosTenjinMopubImpressionFromJSON(const char* jsonString){
|
|
NSString *jsonStr = [NSString stringWithUTF8String:jsonString];
|
|
|
|
[TenjinSDK mopubImpressionFromJSON:jsonStr];
|
|
}
|
|
|
|
void iosTenjinRegisterDeepLinkHandler(TenjinDeeplinkHandlerFunc deeplinkHandlerFunc) {
|
|
NSLog(@"Called iosTenjinRegisterDeepLinkHandler");
|
|
registeredDeeplinkHandlerFunc = deeplinkHandlerFunc;
|
|
[[TenjinSDK sharedInstance] registerDeepLinkHandler:^(NSDictionary *params, NSError *error) {
|
|
NSLog(@"Entered deepLinkHandler");
|
|
if (registeredDeeplinkHandlerFunc == NULL)
|
|
return;
|
|
|
|
TenjinStringStringKeyValuePair* deepLinkDataPairArray;
|
|
int32_t deepLinkDataPairArrayCount;
|
|
iosTenjin_InternalConvertDictionaryToStringStringPairs(params, &deepLinkDataPairArray, &deepLinkDataPairArrayCount);
|
|
|
|
registeredDeeplinkHandlerFunc(deepLinkDataPairArray, deepLinkDataPairArrayCount);
|
|
|
|
iosTenjin_InternalFreeStringStringKeyValuePairs(deepLinkDataPairArray, deepLinkDataPairArrayCount);
|
|
}];
|
|
}
|
|
|
|
bool iosTenjin_InternalConvertDictionaryToStringStringPairs(NSDictionary<NSString*, NSObject*>* dictionary, TenjinStringStringKeyValuePair** outPairArray, int* outPairCount) {
|
|
*outPairArray = NULL;
|
|
*outPairCount = 0;
|
|
if (dictionary == nil)
|
|
return false;
|
|
|
|
int pairCount = (int) dictionary.count;
|
|
TenjinStringStringKeyValuePair* pairArray = MALLOC_ARRAY(pairCount, TenjinStringStringKeyValuePair);
|
|
int counter = 0;
|
|
for (NSString* key in dictionary) {
|
|
NSObject* value = dictionary[key];
|
|
TenjinStringStringKeyValuePair pair;
|
|
pair.key = strdup([key UTF8String]);
|
|
if ([value isKindOfClass:[NSNumber class]]) {
|
|
NSNumber* numberValue = (NSNumber*) value;
|
|
CFNumberType numberType = CFNumberGetType((CFNumberRef)numberValue);
|
|
if (numberType == kCFNumberCharType) {
|
|
pair.value = strdup([([numberValue boolValue] ? @"True" : @"False") UTF8String]);
|
|
} else {
|
|
pair.value = strdup([[numberValue stringValue] UTF8String]);
|
|
}
|
|
|
|
} else if ([value isKindOfClass:[NSString class]]) {
|
|
pair.value = strdup([((NSString*) value) UTF8String]);
|
|
} else {
|
|
pair.value = strdup("Unknown data type");
|
|
}
|
|
|
|
pairArray[counter] = pair;
|
|
counter++;
|
|
}
|
|
|
|
*outPairArray = pairArray;
|
|
*outPairCount = pairCount;
|
|
return true;
|
|
}
|
|
|
|
void iosTenjin_InternalFreeStringStringKeyValuePairs(TenjinStringStringKeyValuePair* pairs, int32_t pairCount) {
|
|
for (int i = 0; i < pairCount; ++i) {
|
|
free((void*) pairs[i].key);
|
|
free((void*) pairs[i].value);
|
|
}
|
|
|
|
free((void*) pairs);
|
|
}
|
|
|
|
void iosTenjinSetWrapperVersion(const char* wrapperString){
|
|
NSString *utfStr = [NSString stringWithUTF8String:wrapperString];
|
|
|
|
[TenjinSDK setWrapperVersion:utfStr];
|
|
}
|
|
|
|
|
|
} //extern "C"
|