62 lines
3.0 KiB
Objective-C
62 lines
3.0 KiB
Objective-C
|
|
#import "TDAppDelegateProxyManager.h"
|
|
#import "TDApplicationDelegateProxy.h"
|
|
#import "UIApplication+TDPushClick.h"
|
|
#import "TDLogging.h"
|
|
|
|
#if __has_include(<ThinkingDataCore/TDMethodHelper.h>)
|
|
#import <ThinkingDataCore/TDMethodHelper.h>
|
|
#else
|
|
#import "TDMethodHelper.h"
|
|
#endif
|
|
|
|
#if __has_include(<ThinkingDataCore/TDNewSwizzle.h>)
|
|
#import <ThinkingDataCore/TDNewSwizzle.h>
|
|
#else
|
|
#import "TDNewSwizzle.h"
|
|
#endif
|
|
|
|
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0
|
|
#import "TDUNUserNotificationCenterDelegateProxy.h"
|
|
#endif
|
|
|
|
@implementation TDAppDelegateProxyManager
|
|
|
|
+ (instancetype)defaultManager {
|
|
static dispatch_once_t onceToken;
|
|
static TDAppDelegateProxyManager *manager = nil;
|
|
dispatch_once(&onceToken, ^{
|
|
manager = [[TDAppDelegateProxyManager alloc] init];
|
|
});
|
|
return manager;
|
|
}
|
|
|
|
- (void)proxyNotifications NS_EXTENSION_UNAVAILABLE_IOS(""){
|
|
|
|
static dispatch_once_t onceToken;
|
|
dispatch_once(&onceToken, ^{
|
|
[TDMethodHelper swizzleRespondsToSelector];
|
|
|
|
[TDApplicationDelegateProxy resolveOptionalSelectorsForDelegate:[UIApplication sharedApplication].delegate];
|
|
[TDApplicationDelegateProxy proxyDelegate:[UIApplication sharedApplication].delegate selectors:[NSSet setWithArray:@[@"application:didReceiveLocalNotification:",
|
|
@"application:didReceiveRemoteNotification:fetchCompletionHandler:",
|
|
@"application:handleOpenURL:",
|
|
@"application:openURL:options:",
|
|
@"application:continueUserActivity:restorationHandler:",
|
|
@"application:performActionForShortcutItem:completionHandler:"]]];
|
|
if (@available(iOS 10.0, *)) {
|
|
if ([UNUserNotificationCenter currentNotificationCenter].delegate) {
|
|
[TDUNUserNotificationCenterDelegateProxy resolveOptionalSelectorsForDelegate:[UNUserNotificationCenter currentNotificationCenter].delegate];
|
|
[TDUNUserNotificationCenterDelegateProxy proxyDelegate:[UNUserNotificationCenter currentNotificationCenter].delegate selectors:[NSSet setWithArray:@[@"userNotificationCenter:didReceiveNotificationResponse:withCompletionHandler:",@"userNotificationCenter:willPresentNotification:withCompletionHandler:"]]];
|
|
}
|
|
NSError *error = NULL;
|
|
[UNUserNotificationCenter td_new_swizzleMethod:@selector(setDelegate:) withMethod:@selector(thinkingdata_setDelegate:) error:&error];
|
|
if (error) {
|
|
TDLogInfo(@"proxy notification delegate error: %@", error);
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
@end
|