Интегрировать собственный iOS SDK в существующий проект React Native
Прежде всего позвольте мне указать, что я не являюсь разработчиком нативной iOS, поэтому мне очень жаль, если я путаю некоторые термины, касающиеся разработки нативной iOS. Я создал приложение с использованием фреймворка React Native. Теперь мне нужно интегрировать собственный SDK(SightCall SDK). Я получил от них образец приложения и успешно интегрировал его в проект.
Я сделал функцию в react native, которая вызывает собственный модуль, который я реализовал в AppDelegate.m
_callSightcall = () => {
CustomModule.namee('Success');
};
Эта функция вызывается при нажатии кнопки.
<TouchableHighlight style={styles.buttonHomePage}
onPress={this._callSightcall}
>
В AppDelegate.m я создал модуль CustomScreen:
Собственный модуль AppDelegate.m
При нажатии кнопки этот метод успешно вызывается, и я получаю ответ в консоли.
Теперь проблема в том, что мне нужно сделать так, чтобы при нажатии кнопки я вызываю этот метод и открываю интерфейс SightCall. Если я заменю существующий код AppDelegate из AppDelegate.m и поместу код AppDelegate из образца кода SIghtCall и построю приложение, он будет успешным, и интерфейс SightCall будет построен (а не интерфейс, который я создал с помощью react native). Но на самом деле ему нужно открыть интерфейс SightCall, когда я нажимаю кнопку в существующем нативном приложении React.
Если я помещу это: код AppDelegate Sightcall в существующий AppDelegate и создаю приложение, он будет построен с интерфейсом SIghtcall.
Как я могу сделать это нажатием кнопки из реального приложения React Native, вызывающего созданный мной модуль CustomScreen, а затем показывающего интерфейс SIghtCall. Пользовательский модуль, вызываемый при нажатии кнопки в приложении React NAtive
Это код для вызова интерфейса SightCall (размещение этого кода AppDelegate в AppDelegate существующего приложения создает интерфейс 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