Интеграция родного iOS SDK в существующий проект React Native - PullRequest
0 голосов
/ 09 апреля 2020

Прежде всего позвольте мне отметить, что я не являюсь нативным iOS разработчиком, поэтому я прошу прощения, если я путаю некоторые термины, касающиеся нативной iOS разработки. Я построил приложение с использованием React Native Framework. Теперь мне нужно интегрировать нативный SDK (SightCall SDK). Я получил образец приложения от них и успешно интегрировал в проект.

Я сделал функцию в реагировать на нативный, которая вызывает собственный модуль, который я реализовал в AppDelegate.m

_callSightcall = () => {
    CustomModule.namee('Success');

};

Это функция вызывается при нажатии кнопки

<TouchableHighlight style={styles.buttonHomePage}
  onPress={this._callSightcall}
>

В AppDelegate.m я создал модуль CustomScreen:

Собственный модуль AppDelegate.m

Кнопка включения Нажмите, этот метод успешно вызван, и я получаю ответ в консоли.

Теперь проблема в том, что мне нужно, чтобы при нажатии кнопки я вызывал этот метод и открывал интерфейс SightCall. Если я заменю существующий код AppDelegate из AppDelegate.m и поместу код AppDelegate из примера кода SIghtCall и построю APP, то это будет успешно, и будет создан интерфейс SightCall (а не интерфейс, который я создал с использованием собственного кода). Но на самом деле нужно открыть интерфейс SightCall, когда я нажимаю на кнопку в существующем собственном приложении реакции.

Если я помещу это: Код Sightcall AppDelegate в существующий AppDelegate и создаю приложение. будет построен с интерфейсом SIghtcall.

Как сделать это по нажатию кнопки из фактического собственного приложения React, вызвать созданный мной модуль CustomScreen, а затем отобразить интерфейс SIghtCall. Пользовательский модуль, вызываемый по нажатию кнопки в React NAtive APP

Это код для вызова интерфейса SightCall (помещение этого кода AppDelegate в AppDelegate существующего APP создает интерфейс SIghtCall) Но размещение этого кода в пользовательский модуль, который я сделал, не работает

@interface AppDelegate ()
  @property (nonatomic) LSApplicationModel *model;
@end
@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

if ([[NSProcessInfo processInfo] arguments].count == 2) {
    NSLog(@"App launched with parameters: %@", [[NSProcessInfo processInfo] arguments]);
    dispatch_async(dispatch_get_main_queue(), ^{
        [self application:application openURL:[NSURL URLWithString:[[NSProcessInfo processInfo] arguments][1]] sourceApplication:nil annotation:@(0)];
    });
}

return YES;
}

- (BOOL)application:(UIApplication *)application willFinishLaunchingWithOptions:(NSDictionary<UIApplicationLaunchOptionsKey,id> *)launchOptions {
// init SDK Model
self.model = [[LSApplicationModel alloc] init];
if (@available(iOS 13.0, *)) {
    self.window.overrideUserInterfaceStyle = UIUserInterfaceStyleLight;
}
return YES;
}
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options {

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0L), ^{
    [self.model openURL:[url absoluteString]];
});

return YES;
}
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray<id<UIUserActivityRestoring>> * _Nullable))restorationHandler {
if ([userActivity.activityType isEqualToString: NSUserActivityTypeBrowsingWeb]) {
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0L), ^{
        [self.model openURL:[[userActivity webpageURL] absoluteString]];
    });
    return YES;
}
return NO;
}
- (void)applicationDidEnterBackground:(UIApplication *)application {
[self.model resetUI];
[self.model cancelACDRequest];
}

@end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...