This repository has been archived on 2022-03-12. You can view files and clone it, but cannot push or open issues or pull requests.
2021-04-02 02:24:13 +03:00

67 lines
1.9 KiB
Objective-C

// Copyright 2015-present 650 Industries. All rights reserved.
#import <EXConstants/EXConstants.h>
#import <UMConstantsInterface/UMConstantsInterface.h>
#import <WebKit/WKWebView.h>
@interface EXConstants () {
WKWebView *webView;
}
@property (nonatomic, strong) NSString *webViewUserAgent;
@property (nonatomic, weak) id<UMConstantsInterface> constantsService;
@end
@implementation EXConstants
UM_REGISTER_MODULE();
+ (const NSString *)exportedModuleName
{
return @"ExponentConstants";
}
- (void)setModuleRegistry:(UMModuleRegistry *)moduleRegistry
{
_constantsService = [moduleRegistry getModuleImplementingProtocol:@protocol(UMConstantsInterface)];
}
- (NSDictionary *)constantsToExport
{
return [_constantsService constants];
}
UM_EXPORT_METHOD_AS(getWebViewUserAgentAsync,
getWebViewUserAgentWithResolver:(UMPromiseResolveBlock)resolve
rejecter:(UMPromiseRejectBlock)reject)
{
__weak EXConstants *weakSelf = self;
dispatch_async(dispatch_get_main_queue(), ^{
__strong EXConstants *strongSelf = weakSelf;
if (strongSelf) {
if (!strongSelf.webViewUserAgent) {
// We need to retain the webview because it runs an async task.
strongSelf->webView = [[WKWebView alloc] init];
[strongSelf->webView evaluateJavaScript:@"window.navigator.userAgent;" completionHandler:^(id _Nullable result, NSError * _Nullable error) {
if (error) {
reject(@"ERR_CONSTANTS", error.localizedDescription, error);
return;
}
strongSelf.webViewUserAgent = [NSString stringWithFormat:@"%@", result];
resolve(UMNullIfNil(strongSelf.webViewUserAgent));
// Destroy the webview now that it's task is complete.
strongSelf->webView = nil;
}];
} else {
resolve(UMNullIfNil(strongSelf.webViewUserAgent));
}
}
});
}
@end