67 lines
1.9 KiB
Objective-C
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
|