SDK_UnityMoney/Assets/Plugins/iOS/TAThirdParty/TAFirebaseSyncData.m

182 lines
9.0 KiB
Mathematica
Raw Normal View History

2025-08-30 09:38:53 +00:00
//
// TAFirebaseSyncData.m
// ThinkingSDK.default-Base-Core-Extension-Util-iOS
//
// Created by wwango on 2022/9/28.
//
#import "TAFirebaseSyncData.h"
#import <objc/runtime.h>
//#import <objc/message.h>
@implementation TAFirebaseSyncData
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Warc-performSelector-leaks"
- (void)syncThirdData:(id<TAThinkingTrackProtocol>)taInstance property:(NSDictionary *)property {
if (!self.customPropety || [self.customPropety isKindOfClass:[NSDictionary class]]) {
self.customPropety = @{};
}
// NSString *distinctId = [taInstance getDistinctId] ? [taInstance getDistinctId] : @"";
//
// Class cls = NSClassFromString(@"FIRAnalytics");
// SEL sel = NSSelectorFromString(@"setUserID:");
// if (cls && [cls respondsToSelector:sel]) {
// [cls performSelector:sel withObject:distinctId];
// }
[self registTDMethods];
}
#pragma mark - Firebase Analytics
////
//void (*ori_method_logEventWithOrigin_IMP)(id, SEL, id, BOOL, id, id);
////
//void method_td_logEventWithOrigin_IMP(id self, SEL _cmd, id orgin, BOOL isPublicEvent, id name, id parameters) {
// NSLog(@"This is a dynamic method: [%@ %@]", NSStringFromClass([self class]), NSStringFromSelector(_cmd));
// if(ori_method_logEventWithOrigin_IMP) {
// ori_method_logEventWithOrigin_IMP(self, _cmd, orgin, isPublicEvent, name, parameters);
// }
//}
////
//void (*ori_method_queueOperationWithBlock_IMP)(id, SEL, id);
////
//void method_td_queueOperationWithBlock_IMP(id self, SEL _cmd, id block) {
// NSLog(@"This is a dynamic method: [%@ %@]", NSStringFromClass([self class]), NSStringFromSelector(_cmd));
// if(ori_method_queueOperationWithBlock_IMP) {
// ori_method_queueOperationWithBlock_IMP(self, _cmd, block);
// }
//}
//
void (*ori_method_notifyEventListeners_IMP)(id, SEL, id);
//
void method_td_notifyEventListeners_IMP(id self, SEL _cmd, id notify) {
NSString *name = [notify valueForKey:@"_name"];
//NSString *origin = [notify valueForKey:@"_origin"];
NSDictionary *parameters = [notify valueForKey:@"_parameters"];
[NSClassFromString(@"TDAnalytics") performSelector:NSSelectorFromString(@"track:properties:") withObject:name withObject:parameters];
if(ori_method_notifyEventListeners_IMP) {
ori_method_notifyEventListeners_IMP(self, _cmd, notify);
}
}
//
void (*ori_method_setUserPropertyString_IMP)(id, SEL, id, id);
//
void method_td_setUserPropertyString_IMP(id self, SEL _cmd, id value, id name) {
[NSClassFromString(@"TDAnalytics") performSelector:NSSelectorFromString(@"setSuperProperties:") withObject:[NSDictionary dictionaryWithObject:value forKey:name]];
if(ori_method_setUserPropertyString_IMP) {
ori_method_setUserPropertyString_IMP(self, _cmd, value, name);
}
}
//
void (*ori_method_setUserID_IMP)(id, SEL, id);
//
void method_td_setUserID_IMP(id self, SEL _cmd, id userId) {
[NSClassFromString(@"TDAnalytics") performSelector:NSSelectorFromString(@"setSuperProperties:") withObject:[NSDictionary dictionaryWithObject:userId forKey:@"userId"]];
if(ori_method_setUserID_IMP) {
ori_method_setUserID_IMP(self, _cmd, userId);
}
}
//
void (*ori_method_setDefaultEventParameters_IMP)(id, SEL, id);
//
void method_td_setDefaultEventParameters_IMP(id self, SEL _cmd, id parameters) {
[NSClassFromString(@"TDAnalytics") performSelector:NSSelectorFromString(@"setSuperProperties:") withObject:parameters];
if(ori_method_setDefaultEventParameters_IMP) {
ori_method_setDefaultEventParameters_IMP(self, _cmd, parameters);
}
}
- (void)registTDMethods {
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
// APMAnalytics method exchange
Class desClass_APMAnalytics = objc_getClass("APMAnalytics");
Class metaClass_APMAnalytics = object_getClass(desClass_APMAnalytics);
bool ret = NO;
//ret = class_addMethod(metaClass_APMAnalytics, NSSelectorFromString(@"td_logEventWithOrigin:isPublicEvent:name:parameters:"), (IMP)(method_td_logEventWithOrigin_IMP), "v@:@B@@");
//if (ret) {
// Method method_logEventWithOrigin = class_getClassMethod(metaClass_APMAnalytics, NSSelectorFromString(@"logEventWithOrigin:isPublicEvent:name:parameters:"));
// Method method_td_logEventWithOrigin = class_getClassMethod(metaClass_APMAnalytics, NSSelectorFromString(@"td_logEventWithOrigin:isPublicEvent:name:parameters:"));
// //
// ori_method_logEventWithOrigin_IMP = (void(*)(id, SEL, id, BOOL, id, id))method_getImplementation(method_logEventWithOrigin);
// //
// method_exchangeImplementations(method_logEventWithOrigin, method_td_logEventWithOrigin);
//}
//ret = class_addMethod(metaClass_APMAnalytics, NSSelectorFromString(@"td_queueOperationWithBlock:"), (IMP)(method_td_queueOperationWithBlock_IMP), "v@:@");
//if (ret) {
// Method method_queueOperationWithBlock = class_getClassMethod(metaClass_APMAnalytics, NSSelectorFromString(@"queueOperationWithBlock:"));
// Method method_td_queueOperationWithBlock = class_getClassMethod(metaClass_APMAnalytics, NSSelectorFromString(@"td_queueOperationWithBlock:"));
// //
// ori_method_queueOperationWithBlock_IMP = (void(*)(id, SEL, id))method_getImplementation(method_queueOperationWithBlock);
// //
// method_exchangeImplementations(method_queueOperationWithBlock, method_td_queueOperationWithBlock);
//}
ret = class_addMethod(metaClass_APMAnalytics, NSSelectorFromString(@"td_notifyEventListeners:"), (IMP)(method_td_notifyEventListeners_IMP), "v@:@");
if (ret) {
Method method_notifyEventListeners = class_getClassMethod(metaClass_APMAnalytics, NSSelectorFromString(@"notifyEventListeners:"));
Method method_td_notifyEventListeners = class_getClassMethod(metaClass_APMAnalytics, NSSelectorFromString(@"td_notifyEventListeners:"));
//
ori_method_notifyEventListeners_IMP = (void(*)(id, SEL, id))method_getImplementation(method_notifyEventListeners);
//
method_exchangeImplementations(method_notifyEventListeners, method_td_notifyEventListeners);
}
// FIRAnalytics method exchange
Class desClass_FIRAnalytics = objc_getClass("FIRAnalytics");
Class metaClass_FIRAnalytics = object_getClass(desClass_FIRAnalytics);
ret = class_addMethod(metaClass_FIRAnalytics, NSSelectorFromString(@"td_setUserPropertyString:forName:"), (IMP)(method_td_setUserPropertyString_IMP), "v@:@@");
if (ret) {
Method method_setUserPropertyString = class_getClassMethod(metaClass_FIRAnalytics, NSSelectorFromString(@"setUserPropertyString:forName:"));
Method method_td_setUserPropertyString = class_getClassMethod(metaClass_FIRAnalytics, NSSelectorFromString(@"td_setUserPropertyString:forName:"));
//
ori_method_setUserPropertyString_IMP = (void(*)(id, SEL, id, id))method_getImplementation(method_setUserPropertyString);
//
method_exchangeImplementations(method_setUserPropertyString, method_td_setUserPropertyString);
}
ret = class_addMethod(metaClass_FIRAnalytics, NSSelectorFromString(@"td_setUserID:"), (IMP)(method_td_setUserID_IMP), "v@:@");
if (ret) {
Method method_setUserID = class_getClassMethod(metaClass_FIRAnalytics, NSSelectorFromString(@"setUserID:"));
Method method_td_setUserID = class_getClassMethod(metaClass_FIRAnalytics, NSSelectorFromString(@"td_setUserID:"));
//
ori_method_setUserID_IMP = (void(*)(id, SEL, id))method_getImplementation(method_setUserID);
//
method_exchangeImplementations(method_setUserID, method_td_setUserID);
}
ret = class_addMethod(metaClass_FIRAnalytics, NSSelectorFromString(@"td_setDefaultEventParameters:"), (IMP)(method_td_setDefaultEventParameters_IMP), "v@:@");
if (ret) {
Method method_setDefaultEventParameters = class_getClassMethod(metaClass_FIRAnalytics, NSSelectorFromString(@"setDefaultEventParameters:"));
Method method_td_setDefaultEventParameters = class_getClassMethod(metaClass_FIRAnalytics, NSSelectorFromString(@"td_setDefaultEventParameters:"));
//
ori_method_setDefaultEventParameters_IMP = (void(*)(id, SEL, id))method_getImplementation(method_setDefaultEventParameters);
//
method_exchangeImplementations(method_setDefaultEventParameters, method_td_setDefaultEventParameters);
}
});
}
#pragma clang diagnostic pop
@end