SDK_UnityMoney/Assets/Plugins/iOS/ThinkingSDK/Source/AppLaunch/TDAppLaunchReason.m

182 lines
6.9 KiB
Mathematica
Raw Normal View History

2025-08-30 09:38:53 +00:00
//
// TDAppLaunchReason.m
// ThinkingSDK
//
// Created by wwango on 2021/11/17.
// Copyright © 2021 thinkingdata. All rights reserved.
//
#import "TDAppLaunchReason.h"
#import <objc/runtime.h>
#import "TDCommonUtil.h"
#import "TDAppState.h"
#import "ThinkingAnalyticsSDKPrivate.h"
#import "TDAppDelegateProxyManager.h"
#import "TDPushClickEvent.h"
#if __has_include(<ThinkingDataCore/TDCorePresetDisableConfig.h>)
#import <ThinkingDataCore/TDCorePresetDisableConfig.h>
#else
#import "TDCorePresetDisableConfig.h"
#endif
@implementation TDAppLaunchReason
+ (void)load {
[[NSNotificationCenter defaultCenter] addObserver:[TDAppLaunchReason sharedInstance] selector:@selector(_applicationDidFinishLaunchingNotification:) name:UIApplicationDidFinishLaunchingNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:[TDAppLaunchReason sharedInstance] selector:@selector(_applicationDidEnterBackgroundNotification:) name:UIApplicationDidEnterBackgroundNotification object:nil];
}
+ (void)td_ops_push_click:(NSDictionary *)userInfo {
@try {
if ([userInfo.allKeys containsObject:@"te_extras"] && [userInfo[@"te_extras"] isKindOfClass:[NSString class]]) {
NSData *jsonData = [userInfo[@"te_extras"] dataUsingEncoding:NSUTF8StringEncoding];
NSError *err;
NSDictionary *responseDic = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:&err];
NSDictionary *opsReceiptProperties = responseDic[@"#ops_receipt_properties"];
if ([opsReceiptProperties isKindOfClass:[NSString class]]) {
NSString *opsStr = (NSString *)opsReceiptProperties;
opsReceiptProperties = [NSJSONSerialization JSONObjectWithData:[opsStr dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingMutableContainers error:&err];
}
if (opsReceiptProperties && [opsReceiptProperties isKindOfClass:[NSDictionary class]]) {
NSMutableDictionary *dic = [ThinkingAnalyticsSDK _getAllInstances];
if(dic == nil || dic.count == 0){
appPushClickDic = opsReceiptProperties;
}else{
for (NSString *instanceToken in dic.allKeys) {
ThinkingAnalyticsSDK *instance = dic[instanceToken];
TDPushClickEvent *pushEvent = [[TDPushClickEvent alloc]initWithName: @"te_ops_push_click"];
pushEvent.ops = opsReceiptProperties;
[instance autoTrackWithEvent:pushEvent properties:@{}];
[instance innerFlush];
}
}
}
}
} @catch (NSException *exception) {
}
}
+ (NSDictionary *)getAppPushDic{
return appPushClickDic;
}
+ (void)clearAppPushParams{
appPushClickDic = nil;
}
+ (TDAppLaunchReason *)sharedInstance {
static dispatch_once_t onceToken;
static TDAppLaunchReason *appLaunchManager;
dispatch_once(&onceToken, ^{
appLaunchManager = [TDAppLaunchReason new];
});
return appLaunchManager;
}
- (void)clearAppLaunchParams {
self.appLaunchParams = @{@"url":@"",
@"data":@{}};
}
- (void)_applicationDidEnterBackgroundNotification:(NSNotification *)notification {
[self clearAppLaunchParams];
}
//
- (void)_applicationDidFinishLaunchingNotification:(NSNotification *)notification {
__weak TDAppLaunchReason *weakSelf = self;
NSDictionary *launchOptions = notification.userInfo;
NSString *url = [self getInitDeeplink:launchOptions];
NSDictionary *data = [self getInitData:launchOptions];
//
if ([ThinkingAnalyticsSDK defaultInstance].config.enableAutoPush && launchOptions) {
NSDictionary *remoteNotification = [launchOptions objectForKey:@"UIApplicationLaunchOptionsRemoteNotificationKey"];
[TDAppLaunchReason td_ops_push_click:remoteNotification];
}
//
if (![TDCorePresetDisableConfig disableStartReason]) {
if (!launchOptions) {
[weakSelf clearAppLaunchParams];
} else if ([url isKindOfClass:[NSString class]] && url.length) {
self.appLaunchParams = @{@"url": [TDCommonUtil string:url],
@"data": @{}};
} else {
self.appLaunchParams = @{@"url": @"",
@"data": [TDCommonUtil dictionary:data]};
}
}
UIApplication *application = [TDAppState sharedApplication];
id applicationDelegate = [application delegate];
if (applicationDelegate == nil)
{
return;
}
if (![TDCorePresetDisableConfig disableStartReason]) {
[[TDAppDelegateProxyManager defaultManager] proxyNotifications];
}
if (![TDCorePresetDisableConfig disableOpsReceiptProperties]) {
[[TDAppDelegateProxyManager defaultManager] proxyNotifications];
}
}
- (NSString *)getInitDeeplink:(NSDictionary *)launchOptions {
if (!launchOptions || ![launchOptions isKindOfClass:[NSDictionary class]]) {
return @"";
}
if ([launchOptions isKindOfClass:[NSDictionary class]] &&
[launchOptions.allKeys containsObject:UIApplicationLaunchOptionsURLKey]) {
return launchOptions[UIApplicationLaunchOptionsURLKey];
} else if ([launchOptions isKindOfClass:[NSDictionary class]] &&
[launchOptions.allKeys containsObject:UIApplicationLaunchOptionsUserActivityDictionaryKey]) {
NSDictionary *userActivityDictionary = launchOptions[UIApplicationLaunchOptionsUserActivityDictionaryKey];
NSString *type = userActivityDictionary[UIApplicationLaunchOptionsUserActivityTypeKey];
if ([type isEqualToString:NSUserActivityTypeBrowsingWeb]) {
NSUserActivity *userActivity = userActivityDictionary[@"UIApplicationLaunchOptionsUserActivityKey"];
return userActivity.webpageURL.absoluteString;
}
}
return @"";
}
- (NSDictionary *)getInitData:(NSDictionary *)launchOptions {
if (!launchOptions || ![launchOptions isKindOfClass:[NSDictionary class]]) {
return @{};
}
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
if ([launchOptions.allKeys containsObject:UIApplicationLaunchOptionsLocalNotificationKey]) {
// alertbody
UILocalNotification *notification = launchOptions[UIApplicationLaunchOptionsLocalNotificationKey];
NSMutableDictionary *properties = [[NSMutableDictionary alloc] init];
properties[@"alertBody"] = notification.alertBody;
if (@available(iOS 8.2, *)) {
properties[@"alertTitle"] = notification.alertTitle;
}
return properties;
}
#pragma clang diagnostic pop
return launchOptions;
}
@end