// Copyright 2015-present 650 Industries. All rights reserved. #import #import #import @interface EXConstants () { WKWebView *webView; } @property (nonatomic, strong) NSString *webViewUserAgent; @property (nonatomic, weak) id 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