在 iOS 中将 react-native-navigation 与 react-native-callkit 集成
Integrate react-native-navigation with react-native-callkit in iOS
我正在尝试在 iOS 中将 RNN(React Native Navigation)与 RNCK(React Native CallKit)集成。
问题是它们中的每一个都需要在 Xcode 项目的 AppDelegate 中进行独特的设置。
他们都需要jsCodeLocation
:
NSURL *jsCodeLocation = [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index" fallbackResource:nil];
RNN 设置:
[ReactNativeNavigation bootstrap:jsCodeLocation launchOptions:launchOptions];
RNCK 设置:
RNCallKit *rncallkit = [[RNCallKit alloc] init];
RCTBridge *bridge = [[RCTBridge alloc] initWithBundleURL:jsCodeLocation
moduleProvider:^{ return @[rncallkit]; }
launchOptions:launchOptions];
RCTRootView *rootView = [[RCTRootView alloc] initWithBridge:bridge
moduleName:@"MyApp"
initialProperties:nil];
我看到 this (outdated) issue in RNCK repo, which leads to this (also outdated) issue 并且都在谈论 RNN 1,而在 RNN 2 中这个设置被简化了,我没有看到将两个框架集成到一个项目中的正确方法,除了分叉 RNN 并添加一个单独的初始化程序将接收 moduleProvider
...
RNN 有一个额外的 bootstrap
方法,它接受一个委托对象参数(实现 RNNBridgeManagerDelegate
),允许您注入额外的模块。
这是一个示例,说明如何 bootstrap RNN 将应用委托本身设置为委托:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
NSURL *jsCodeLocation = [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index" fallbackResource:nil];
[ReactNativeNavigation bootstrap:jsCodeLocation launchOptions:launchOptions bridgeManagerDelegate:self];
return YES;
}
然后您可以实现委托方法和return RNCallKit
对象:
- (NSArray<id<RCTBridgeModule>> *)extraModulesForBridge:(RCTBridge *)bridge {
RNCallKit *rncallkit = [[RNCallKit alloc] init];
return @[rncallkit];
}
我正在尝试在 iOS 中将 RNN(React Native Navigation)与 RNCK(React Native CallKit)集成。
问题是它们中的每一个都需要在 Xcode 项目的 AppDelegate 中进行独特的设置。
他们都需要jsCodeLocation
:
NSURL *jsCodeLocation = [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index" fallbackResource:nil];
RNN 设置:
[ReactNativeNavigation bootstrap:jsCodeLocation launchOptions:launchOptions];
RNCK 设置:
RNCallKit *rncallkit = [[RNCallKit alloc] init];
RCTBridge *bridge = [[RCTBridge alloc] initWithBundleURL:jsCodeLocation
moduleProvider:^{ return @[rncallkit]; }
launchOptions:launchOptions];
RCTRootView *rootView = [[RCTRootView alloc] initWithBridge:bridge
moduleName:@"MyApp"
initialProperties:nil];
我看到 this (outdated) issue in RNCK repo, which leads to this (also outdated) issue 并且都在谈论 RNN 1,而在 RNN 2 中这个设置被简化了,我没有看到将两个框架集成到一个项目中的正确方法,除了分叉 RNN 并添加一个单独的初始化程序将接收 moduleProvider
...
RNN 有一个额外的 bootstrap
方法,它接受一个委托对象参数(实现 RNNBridgeManagerDelegate
),允许您注入额外的模块。
这是一个示例,说明如何 bootstrap RNN 将应用委托本身设置为委托:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
NSURL *jsCodeLocation = [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index" fallbackResource:nil];
[ReactNativeNavigation bootstrap:jsCodeLocation launchOptions:launchOptions bridgeManagerDelegate:self];
return YES;
}
然后您可以实现委托方法和return RNCallKit
对象:
- (NSArray<id<RCTBridgeModule>> *)extraModulesForBridge:(RCTBridge *)bridge {
RNCallKit *rncallkit = [[RNCallKit alloc] init];
return @[rncallkit];
}