132 lines
6.6 KiB
Objective-C
132 lines
6.6 KiB
Objective-C
|
|
#import "TDApplicationDelegateProxy.h"
|
|
#import "NSObject+TDDelegateProxy.h"
|
|
#import "UIApplication+TDPushClick.h"
|
|
#import <objc/message.h>
|
|
#import "TDAppLaunchReason.h"
|
|
#import "TDCommonUtil.h"
|
|
#import "TDLogging.h"
|
|
|
|
#if __has_include(<ThinkingDataCore/TDClassHelper.h>)
|
|
#import <ThinkingDataCore/TDClassHelper.h>
|
|
#else
|
|
#import "TDClassHelper.h"
|
|
#endif
|
|
|
|
#if __has_include(<ThinkingDataCore/TDCorePresetDisableConfig.h>)
|
|
#import <ThinkingDataCore/TDCorePresetDisableConfig.h>
|
|
#else
|
|
#import "TDCorePresetDisableConfig.h"
|
|
#endif
|
|
|
|
|
|
@implementation TDApplicationDelegateProxy
|
|
|
|
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
|
|
SEL selector = @selector(application:didReceiveRemoteNotification:fetchCompletionHandler:);
|
|
[TDApplicationDelegateProxy invokeWithTarget:self selector:selector, application, userInfo, completionHandler];
|
|
[TDApplicationDelegateProxy trackEventWithTarget:self application:application remoteNotification:userInfo];
|
|
}
|
|
|
|
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification API_DEPRECATED("Use UserNotifications Framework's -[UNUserNotificationCenterDelegate willPresentNotification:withCompletionHandler:] or -[UNUserNotificationCenterDelegate didReceiveNotificationResponse:withCompletionHandler:]", ios(4.0, 10.0)) {
|
|
SEL selector = @selector(application:didReceiveLocalNotification:);
|
|
[TDApplicationDelegateProxy invokeWithTarget:self selector:selector, application, notification];
|
|
[TDApplicationDelegateProxy trackEventWithTarget:self application:application localNotification:notification];
|
|
}
|
|
|
|
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray<id<UIUserActivityRestoring>> * _Nullable))restorationHandler {
|
|
SEL selector = @selector(application:continueUserActivity:restorationHandler:);
|
|
if (![TDCorePresetDisableConfig disableStartReason]) {
|
|
[[TDAppLaunchReason sharedInstance] clearAppLaunchParams];
|
|
[TDAppLaunchReason sharedInstance].appLaunchParams = @{@"url": [TDCommonUtil string: userActivity.webpageURL.absoluteString],@"data":@{}};
|
|
}
|
|
return [TDApplicationDelegateProxy invokeReturnBOOLWithTarget:self selector:selector arg1:application arg2:userActivity arg3:restorationHandler];
|
|
}
|
|
|
|
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options {
|
|
SEL selector = @selector(application:openURL:options:);
|
|
if (![TDCorePresetDisableConfig disableStartReason]) {
|
|
[[TDAppLaunchReason sharedInstance] clearAppLaunchParams];
|
|
[TDAppLaunchReason sharedInstance].appLaunchParams = @{@"url": [TDCommonUtil string:url.absoluteString],@"data":@{}};
|
|
}
|
|
return [TDApplicationDelegateProxy invokeReturnBOOLWithTarget:self selector:selector arg1:app arg2:url arg3:options];
|
|
}
|
|
|
|
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
|
|
SEL selector = @selector(application:handleOpenURL:);
|
|
if (![TDCorePresetDisableConfig disableStartReason]) {
|
|
[[TDAppLaunchReason sharedInstance] clearAppLaunchParams];
|
|
[TDAppLaunchReason sharedInstance].appLaunchParams = @{@"url": [TDCommonUtil string:url.absoluteString], @"data":@{}};
|
|
}
|
|
return [TDApplicationDelegateProxy invokeReturnBOOLWithTarget:self selector:selector arg1:application arg2:url];
|
|
}
|
|
|
|
- (void)application:(UIApplication *)application performActionForShortcutItem:(UIApplicationShortcutItem *)shortcutItem completionHandler:(void (^)(BOOL))completionHandler API_AVAILABLE(ios(9.0)){
|
|
SEL selector = @selector(application:performActionForShortcutItem:completionHandler:);
|
|
[TDApplicationDelegateProxy invokeWithTarget:self selector:selector, application, shortcutItem, completionHandler];
|
|
if (![TDCorePresetDisableConfig disableStartReason]) {
|
|
[[TDAppLaunchReason sharedInstance] clearAppLaunchParams];
|
|
[TDAppLaunchReason sharedInstance].appLaunchParams = @{@"url": @"",@"data": [TDCommonUtil dictionary:shortcutItem.userInfo]};
|
|
}
|
|
}
|
|
|
|
|
|
+ (void)trackEventWithTarget:(NSObject *)target application:(UIApplication *)application remoteNotification:(NSDictionary *)userInfo {
|
|
|
|
if (target != application.delegate) {
|
|
return;
|
|
}
|
|
|
|
if ([[UIDevice currentDevice].systemVersion floatValue] >= 10.0) {
|
|
TDLogInfo(@"iOS version >= 10.0, callback for %@ was ignored.", @"application:didReceiveRemoteNotification:fetchCompletionHandler:");
|
|
return;
|
|
}
|
|
|
|
if (application.applicationState != UIApplicationStateInactive) {
|
|
return;
|
|
}
|
|
|
|
if (![TDCorePresetDisableConfig disableStartReason]) {
|
|
[[TDAppLaunchReason sharedInstance] clearAppLaunchParams];
|
|
[TDAppLaunchReason sharedInstance].appLaunchParams = @{@"url": @"", @"data": [TDCommonUtil dictionary:userInfo]};
|
|
}
|
|
|
|
}
|
|
|
|
+ (void)trackEventWithTarget:(NSObject *)target application:(UIApplication *)application localNotification:(UILocalNotification *)notification API_DEPRECATED("Use UserNotifications Framework's -[UNUserNotificationCenterDelegate willPresentNotification:withCompletionHandler:] or -[UNUserNotificationCenterDelegate didReceiveNotificationResponse:withCompletionHandler:]", ios(4.0, 10.0)){
|
|
|
|
if (target != application.delegate) {
|
|
return;
|
|
}
|
|
|
|
BOOL isValidPushClick = NO;
|
|
if (application.applicationState == UIApplicationStateInactive) {
|
|
isValidPushClick = YES;
|
|
}
|
|
|
|
if (!isValidPushClick) {
|
|
return;
|
|
}
|
|
|
|
if (![TDCorePresetDisableConfig disableStartReason]) {
|
|
NSMutableDictionary *properties = [[NSMutableDictionary alloc] init];
|
|
properties[@"alertBody"] = notification.alertBody;
|
|
if (@available(iOS 8.2, *)) {
|
|
properties[@"alertTitle"] = notification.alertTitle;
|
|
}
|
|
[[TDAppLaunchReason sharedInstance] clearAppLaunchParams];
|
|
[TDAppLaunchReason sharedInstance].appLaunchParams = @{@"url": @"", @"data": [TDCommonUtil dictionary:properties]};
|
|
}
|
|
}
|
|
|
|
+ (NSSet<NSString *> *)optionalSelectors {
|
|
return [NSSet setWithArray:@[@"application:didReceiveLocalNotification:",
|
|
@"application:didReceiveRemoteNotification:fetchCompletionHandler:",
|
|
@"application:handleOpenURL:",
|
|
@"application:openURL:options:",
|
|
@"application:continueUserActivity:restorationHandler:",
|
|
@"application:performActionForShortcutItem:completionHandler:"]];
|
|
}
|
|
|
|
@end
|