在 iOS 中将 react-native-navigation 与 react-native-callkit 集成

Posted

技术标签:

【中文标题】在 iOS 中将 react-native-navigation 与 react-native-callkit 集成【英文标题】:Integrate react-native-navigation with react-native-callkit in iOS 【发布时间】:2019-06-16 00:10:01 【问题描述】:

我正在尝试在 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,这导致this (also outdated) issue,并且都在谈论RNN 1,而在RNN 2中,这个设置被简化了,除了分叉RNN之外,我没有看到将这两个框架集成到一个项目中的正确方法并添加一个单独的初始化程序,它将接收moduleProvider...

【问题讨论】:

【参考方案1】:

RNN 有一个额外的bootstrap 方法,它接受一个委托对象参数(它实现了RNNBridgeManagerDelegate),允许您注入额外的模块。

下面是一个示例,说明如何将应用委托本身设置为委托来引导 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;

然后您可以实现委托方法并返回RNCallKit 对象:

- (NSArray<id<RCTBridgeModule>> *)extraModulesForBridge:(RCTBridge *)bridge 
  RNCallKit *rncallkit = [[RNCallKit alloc] init];
  return @[rncallkit];

【讨论】:

我不是 iOS 开发人员,能否请您告诉我应该将第二个 sn-p 代码放在哪里?我在 bridgeManagerDelegate:self Sending 'AppDelegate *const __strong' to parameter of incompatible type 'id&lt;RNNBridgeManagerDelegate&gt;' 下收到以下警告 @platonish extraModulesForBridge 需要在您设置为代理的任何接口中实现。在示例中,我将其设置为self,即AppDelegate 本身,因此在这种情况下,extraModulesForBridge 需要在您的AppDelegate 中。关于警告 - 您需要声明对象符合委托协议,例如这种特定情况 - AppDelegate &lt;RNNBridgeManagerDelegate&gt;。你可以在这里阅读更多信息:developer.apple.com/library/archive/documentation/General/…

以上是关于在 iOS 中将 react-native-navigation 与 react-native-callkit 集成的主要内容,如果未能解决你的问题,请参考以下文章

无法在 iOS 中将数据写入 .plist

iOS - 在 UINavigationController 中将 UIViewController 显示为全屏

在 iOS 中将照片从相机发布到 Facebook 页面

在 iOS 中将图标加载到 UIImageView 策略中

在ios中将NSString拆分为NSArray

在 iOS 中将图像淡化为透明