Интегрируйте реакцию-нативную навигацию с реакцией-нативная-callkit в iOS - PullRequest
0 голосов
/ 22 января 2019

Я пытаюсь интегрировать RNN (React Native Navigation) с RNCK (React Native CallKit) в iOS.
Проблема в том, что для каждого из них требуется уникальная настройка в AppDelegate проекта Xcode.

Им обоим нужно 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];

Понятно эта (устаревшая) проблема в репозитории RNCK , которая приводит к этой (также устаревшей) проблеме , и оба говорят о RNN 1, в то время как в RNN 2 эта настройка упрощена, и я не вижуправильный способ интеграции обеих платформ в одном проекте, за исключением разветвления RNN и добавления отдельного инициализатора, который получит moduleProvider ...

1 Ответ

0 голосов
/ 22 января 2019

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];
}
...