|
|
@@ -1,202 +0,0 @@
|
|
|
-#import "AppDelegate2.h"
|
|
|
-
|
|
|
-#import <React/RCTBridge.h>
|
|
|
-#import <React/RCTBundleURLProvider.h>
|
|
|
-#import <React/RCTRootView.h>
|
|
|
-
|
|
|
-#import <React/RCTAppSetupUtils.h>
|
|
|
-#import <RCTJPushModule.h>
|
|
|
-#import <JPUSHService.h>
|
|
|
-#if RCT_NEW_ARCH_ENABLED
|
|
|
-#import <React/CoreModulesPlugins.h>
|
|
|
-#import <React/RCTCxxBridgeDelegate.h>
|
|
|
-#import <React/RCTFabricSurfaceHostingProxyRootView.h>
|
|
|
-#import <React/RCTSurfacePresenter.h>
|
|
|
-#import <React/RCTSurfacePresenterBridgeAdapter.h>
|
|
|
-#import <ReactCommon/RCTTurboModuleManager.h>
|
|
|
-
|
|
|
-#import <react/config/ReactNativeConfig.h>
|
|
|
-
|
|
|
-static NSString *const kRNConcurrentRoot = @"concurrentRoot";
|
|
|
-
|
|
|
-@interface AppDelegate () <RCTCxxBridgeDelegate, RCTTurboModuleManagerDelegate,JPUSHRegisterDelegate> {
|
|
|
- RCTTurboModuleManager *_turboModuleManager;
|
|
|
- RCTSurfacePresenterBridgeAdapter *_bridgeAdapter;
|
|
|
- std::shared_ptr<const facebook::react::ReactNativeConfig> _reactNativeConfig;
|
|
|
- facebook::react::ContextContainer::Shared _contextContainer;
|
|
|
-}
|
|
|
-@end
|
|
|
-#endif
|
|
|
-
|
|
|
-@implementation AppDelegate
|
|
|
-
|
|
|
-- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
|
|
|
-{
|
|
|
- // APNS
|
|
|
- JPUSHRegisterEntity * entity = [[JPUSHRegisterEntity alloc] init];
|
|
|
- if (@available(iOS 12.0, *)) {
|
|
|
- entity.types = JPAuthorizationOptionNone; //JPAuthorizationOptionAlert|JPAuthorizationOptionBadge|JPAuthorizationOptionSou//nd|JPAuthorizationOptionProvidesAppNotificationSettings;
|
|
|
- }
|
|
|
- [JPUSHService registerForRemoteNotificationConfig:entity delegate:self];
|
|
|
-
|
|
|
- RCTAppSetupPrepareApp(application);
|
|
|
-
|
|
|
- RCTBridge *bridge = [self.reactDelegate createBridgeWithDelegate:self launchOptions:launchOptions];
|
|
|
-
|
|
|
-#if RCT_NEW_ARCH_ENABLED
|
|
|
- _contextContainer = std::make_shared<facebook::react::ContextContainer const>();
|
|
|
- _reactNativeConfig = std::make_shared<facebook::react::EmptyReactNativeConfig const>();
|
|
|
- _contextContainer->insert("ReactNativeConfig", _reactNativeConfig);
|
|
|
- _bridgeAdapter = [[RCTSurfacePresenterBridgeAdapter alloc] initWithBridge:bridge contextContainer:_contextContainer];
|
|
|
- bridge.surfacePresenter = _bridgeAdapter.surfacePresenter;
|
|
|
-#endif
|
|
|
-
|
|
|
- NSDictionary *initProps = [self prepareInitialProps];
|
|
|
- UIView *rootView = [self.reactDelegate createRootViewWithBridge:bridge moduleName:@"taroDemo" initialProperties:initProps];
|
|
|
-
|
|
|
- if (@available(iOS 13.0, *)) {
|
|
|
- rootView.backgroundColor = [UIColor systemBackgroundColor];
|
|
|
- } else {
|
|
|
- rootView.backgroundColor = [UIColor whiteColor];
|
|
|
- }
|
|
|
-
|
|
|
- self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
|
|
|
- UIViewController *rootViewController = [self.reactDelegate createRootViewController];
|
|
|
- rootViewController.view = rootView;
|
|
|
- self.window.rootViewController = rootViewController;
|
|
|
- [self.window makeKeyAndVisible];
|
|
|
- [super application:application didFinishLaunchingWithOptions:launchOptions];
|
|
|
- return YES;
|
|
|
-}
|
|
|
-
|
|
|
-/// This method controls whether the `concurrentRoot`feature of React18 is turned on or off.
|
|
|
-///
|
|
|
-/// @see: https://reactjs.org/blog/2022/03/29/react-v18.html
|
|
|
-/// @note: This requires to be rendering on Fabric (i.e. on the New Architecture).
|
|
|
-/// @return: `true` if the `concurrentRoot` feture is enabled. Otherwise, it returns `false`.
|
|
|
-- (BOOL)concurrentRootEnabled
|
|
|
-{
|
|
|
- // Switch this bool to turn on and off the concurrent root
|
|
|
- return true;
|
|
|
-}
|
|
|
-- (NSDictionary *)prepareInitialProps
|
|
|
-{
|
|
|
- NSMutableDictionary *initProps = [NSMutableDictionary new];
|
|
|
-#ifdef RCT_NEW_ARCH_ENABLED
|
|
|
- initProps[kRNConcurrentRoot] = @([self concurrentRootEnabled]);
|
|
|
-#endif
|
|
|
- return initProps;
|
|
|
-}
|
|
|
-
|
|
|
-- (NSURL *)sourceURLForBridge:(RCTBridge *)bridge
|
|
|
-{
|
|
|
-#if DEBUG
|
|
|
- return [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index"];
|
|
|
-#else
|
|
|
- return [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"];
|
|
|
-#endif
|
|
|
-}
|
|
|
-
|
|
|
-#if RCT_NEW_ARCH_ENABLED
|
|
|
-
|
|
|
-#pragma mark - RCTCxxBridgeDelegate
|
|
|
-
|
|
|
-- (std::unique_ptr<facebook::react::JSExecutorFactory>)jsExecutorFactoryForBridge:(RCTBridge *)bridge
|
|
|
-{
|
|
|
- _turboModuleManager = [[RCTTurboModuleManager alloc] initWithBridge:bridge
|
|
|
- delegate:self
|
|
|
- jsInvoker:bridge.jsCallInvoker];
|
|
|
- return RCTAppSetupDefaultJsExecutorFactory(bridge, _turboModuleManager);
|
|
|
-}
|
|
|
-
|
|
|
-#pragma mark RCTTurboModuleManagerDelegate
|
|
|
-
|
|
|
-- (Class)getModuleClassFromName:(const char *)name
|
|
|
-{
|
|
|
- return RCTCoreModulesClassProvider(name);
|
|
|
-}
|
|
|
-
|
|
|
-- (std::shared_ptr<facebook::react::TurboModule>)getTurboModule:(const std::string &)name
|
|
|
- jsInvoker:(std::shared_ptr<facebook::react::CallInvoker>)jsInvoker
|
|
|
-{
|
|
|
- return nullptr;
|
|
|
-}
|
|
|
-
|
|
|
-- (std::shared_ptr<facebook::react::TurboModule>)getTurboModule:(const std::string &)name
|
|
|
- initParams:
|
|
|
- (const facebook::react::ObjCTurboModule::InitParams &)params
|
|
|
-{
|
|
|
- return nullptr;
|
|
|
-}
|
|
|
-
|
|
|
-- (id<RCTTurboModule>)getModuleInstanceFromClass:(Class)moduleClass
|
|
|
-{
|
|
|
- return RCTAppSetupDefaultModuleFromClass(moduleClass);
|
|
|
-}
|
|
|
-
|
|
|
-#endif
|
|
|
-
|
|
|
-//************************************************JPush start************************************************
|
|
|
-
|
|
|
-//注册 APNS 成功并上报 DeviceToken
|
|
|
-- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
|
|
|
- [JPUSHService registerDeviceToken:deviceToken];
|
|
|
-}
|
|
|
-
|
|
|
-//iOS 7 APNS
|
|
|
-- (void)application:(UIApplication *)application didReceiveRemoteNotification: (NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
|
|
|
- // iOS 10 以下 Required
|
|
|
- NSLog(@"iOS 7 APNS");
|
|
|
- [JPUSHService handleRemoteNotification:userInfo];
|
|
|
- [[NSNotificationCenter defaultCenter] postNotificationName:J_APNS_NOTIFICATION_ARRIVED_EVENT object:userInfo];
|
|
|
- completionHandler(UIBackgroundFetchResultNewData);
|
|
|
-}
|
|
|
-
|
|
|
-//iOS 10 前台收到消息
|
|
|
-- (void)jpushNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(NSInteger))completionHandler {
|
|
|
- NSDictionary * userInfo = notification.request.content.userInfo;
|
|
|
- if([notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {
|
|
|
- // Apns
|
|
|
- NSLog(@"iOS 10 APNS 前台收到消息");
|
|
|
- [JPUSHService handleRemoteNotification:userInfo];
|
|
|
- [[NSNotificationCenter defaultCenter] postNotificationName:J_APNS_NOTIFICATION_ARRIVED_EVENT object:userInfo];
|
|
|
- }
|
|
|
- else {
|
|
|
- // 本地通知 todo
|
|
|
- NSLog(@"iOS 10 本地通知 前台收到消息");
|
|
|
- [[NSNotificationCenter defaultCenter] postNotificationName:J_LOCAL_NOTIFICATION_ARRIVED_EVENT object:userInfo];
|
|
|
- }
|
|
|
- //需要执行这个方法,选择是否提醒用户,有 Badge、Sound、Alert 三种类型可以选择设置
|
|
|
- completionHandler(UNNotificationPresentationOptionAlert);
|
|
|
-}
|
|
|
-
|
|
|
-//iOS 10 消息事件回调
|
|
|
-- (void)jpushNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler: (void (^)(void))completionHandler {
|
|
|
- NSDictionary * userInfo = response.notification.request.content.userInfo;
|
|
|
- if([response.notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {
|
|
|
- // Apns
|
|
|
- NSLog(@"iOS 10 APNS 消息事件回调");
|
|
|
- [JPUSHService handleRemoteNotification:userInfo];
|
|
|
- // 保障应用被杀死状态下,用户点击推送消息,打开app后可以收到点击通知事件
|
|
|
- [[RCTJPushEventQueue sharedInstance]._notificationQueue insertObject:userInfo atIndex:0];
|
|
|
- [[NSNotificationCenter defaultCenter] postNotificationName:J_APNS_NOTIFICATION_OPENED_EVENT object:userInfo];
|
|
|
- }
|
|
|
- else {
|
|
|
- // 本地通知
|
|
|
- NSLog(@"iOS 10 本地通知 消息事件回调");
|
|
|
- // 保障应用被杀死状态下,用户点击推送消息,打开app后可以收到点击通知事件
|
|
|
- [[RCTJPushEventQueue sharedInstance]._localNotificationQueue insertObject:userInfo atIndex:0];
|
|
|
- [[NSNotificationCenter defaultCenter] postNotificationName:J_LOCAL_NOTIFICATION_OPENED_EVENT object:userInfo];
|
|
|
- }
|
|
|
- // 系统要求执行这个方法
|
|
|
- completionHandler();
|
|
|
-}
|
|
|
-
|
|
|
-//自定义消息
|
|
|
-- (void)networkDidReceiveMessage:(NSNotification *)notification {
|
|
|
- NSDictionary * userInfo = [notification userInfo];
|
|
|
- [[NSNotificationCenter defaultCenter] postNotificationName:J_CUSTOM_NOTIFICATION_EVENT object:userInfo];
|
|
|
-}
|
|
|
-
|
|
|
-
|
|
|
-@end
|