diff --git a/ios/sdk/WeexSDK/Sources/Engine/WXSDKEngine.h b/ios/sdk/WeexSDK/Sources/Engine/WXSDKEngine.h index 5e7b1e7db6..ac014a5781 100644 --- a/ios/sdk/WeexSDK/Sources/Engine/WXSDKEngine.h +++ b/ios/sdk/WeexSDK/Sources/Engine/WXSDKEngine.h @@ -82,6 +82,20 @@ */ + (void)registerService:(NSString *)name withScript:(NSString *)serviceScript withOptions:(NSDictionary *)options; +/** + * @abstract Registers a component for a given name, options and js code + * + * @param name The service name to register + * + * @param options The service options to register + * + * @param serviceScript service js code to invoke + * + * @param completion Completion callback. JS is executed in asynchronously. + * + */ ++ (void)registerService:(NSString *)name withScript:(NSString *)serviceScript withOptions:(NSDictionary *)options completion:(void(^)(BOOL result))completion; + /** * @abstract Registers a component for a given name, options and js url * @@ -92,7 +106,21 @@ * @param serviceScriptUrl The service url to register * */ -+ (void)registerService:(NSString *)name withScriptUrl:(NSURL *)serviceScriptUrl WithOptions:(NSDictionary *)options; ++ (void)registerService:(NSString *)name withScriptUrl:(NSURL *)serviceScriptUrl withOptions:(NSDictionary *)options; + +/** + * @abstract Registers a component for a given name, options and js url + * + * @param name The service name to register + * + * @param options The service options to register + * + * @param serviceScriptUrl The service url to register + * + * @param completion Completion callback. JS is executed in asynchronously. + * + */ ++ (void)registerService:(NSString *)name withScriptUrl:(NSURL *)serviceScriptUrl withOptions:(NSDictionary *)options completion:(void(^)(BOOL result))completion; /** * @abstract Registers a component for a given name, options and js code diff --git a/ios/sdk/WeexSDK/Sources/Engine/WXSDKEngine.m b/ios/sdk/WeexSDK/Sources/Engine/WXSDKEngine.m index b5d7e00825..26ca8b7714 100644 --- a/ios/sdk/WeexSDK/Sources/Engine/WXSDKEngine.m +++ b/ios/sdk/WeexSDK/Sources/Engine/WXSDKEngine.m @@ -166,14 +166,25 @@ + (void)registerComponent:(NSString *)name withClass:(Class)clazz withProperties # pragma mark Service Register + + (void)registerService:(NSString *)name withScript:(NSString *)serviceScript withOptions:(NSDictionary *)options { - [[WXSDKManager bridgeMgr] registerService:name withService:serviceScript withOptions:options]; + [[WXSDKManager bridgeMgr] registerService:name withService:serviceScript withOptions:options completion:nil]; +} + ++ (void)registerService:(NSString *)name withScript:(NSString *)serviceScript withOptions:(NSDictionary *)options completion:(void(^)(BOOL result))completion +{ + [[WXSDKManager bridgeMgr] registerService:name withService:serviceScript withOptions:options completion:completion]; +} + ++ (void)registerService:(NSString *)name withScriptUrl:(NSURL *)serviceScriptUrl withOptions:(NSDictionary *)options +{ + [[WXSDKManager bridgeMgr] registerService:name withServiceUrl:serviceScriptUrl withOptions:options completion:nil]; } -+ (void)registerService:(NSString *)name withScriptUrl:(NSURL *)serviceScriptUrl WithOptions:(NSDictionary *)options ++ (void)registerService:(NSString *)name withScriptUrl:(NSURL *)serviceScriptUrl withOptions:(NSDictionary *)options completion:(void(^)(BOOL result))completion { - [[WXSDKManager bridgeMgr] registerService:name withServiceUrl:serviceScriptUrl withOptions:options]; + [[WXSDKManager bridgeMgr] registerService:name withServiceUrl:serviceScriptUrl withOptions:options completion:completion]; } + (void)unregisterService:(NSString *)name diff --git a/ios/sdk/WeexSDK/Sources/Manager/WXBridgeManager.h b/ios/sdk/WeexSDK/Sources/Manager/WXBridgeManager.h index 3d062774b7..8728161254 100644 --- a/ios/sdk/WeexSDK/Sources/Manager/WXBridgeManager.h +++ b/ios/sdk/WeexSDK/Sources/Manager/WXBridgeManager.h @@ -102,8 +102,9 @@ extern void WXPerformBlockOnBridgeThread(void (^block)(void)); * @param name : service name * @param serviceScript : script code * @param options : service options + * @param completion : completion callback **/ -- (void)registerService:(NSString *)name withService:(NSString *)serviceScript withOptions:(NSDictionary *)options; +- (void)registerService:(NSString *)name withService:(NSString *)serviceScript withOptions:(NSDictionary *)options completion:(void(^)(BOOL result))completion; /** @@ -111,9 +112,9 @@ extern void WXPerformBlockOnBridgeThread(void (^block)(void)); * @param name : service name * @param serviceScriptUrl : script url * @param options : service options + * @param completion : completion callback **/ - --(void)registerService:(NSString *)name withServiceUrl:(NSURL *)serviceScriptUrl withOptions:(NSDictionary *)options; +-(void)registerService:(NSString *)name withServiceUrl:(NSURL *)serviceScriptUrl withOptions:(NSDictionary *)options completion:(void(^)(BOOL result))completion; /** * Unregister JS service Script diff --git a/ios/sdk/WeexSDK/Sources/Manager/WXBridgeManager.m b/ios/sdk/WeexSDK/Sources/Manager/WXBridgeManager.m index a0e8e4e2a2..f5c7a47e7d 100644 --- a/ios/sdk/WeexSDK/Sources/Manager/WXBridgeManager.m +++ b/ios/sdk/WeexSDK/Sources/Manager/WXBridgeManager.m @@ -288,28 +288,41 @@ - (JSValue *)callJSMethodWithResult:(WXCallJSMethod *)method return value; } --(void)registerService:(NSString *)name withServiceUrl:(NSURL *)serviceScriptUrl withOptions:(NSDictionary *)options +- (void)registerService:(NSString *)name withServiceUrl:(NSURL *)serviceScriptUrl withOptions:(NSDictionary *)options completion:(void(^)(BOOL result))completion { - if (!name || !serviceScriptUrl || !options) return; + if (!name || !serviceScriptUrl || !options) { + if (completion) { + completion(NO); + } + return; + } __weak typeof(self) weakSelf = self; WXResourceRequest *request = [WXResourceRequest requestWithURL:serviceScriptUrl resourceType:WXResourceTypeServiceBundle referrer:@"" cachePolicy:NSURLRequestUseProtocolCachePolicy]; WXResourceLoader *serviceBundleLoader = [[WXResourceLoader alloc] initWithRequest:request];; serviceBundleLoader.onFinished = ^(WXResourceResponse *response, NSData *data) { __strong typeof(weakSelf) strongSelf = weakSelf; NSString *jsServiceString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; - [strongSelf registerService:name withService:jsServiceString withOptions:options]; + [strongSelf registerService:name withService:jsServiceString withOptions:options completion:completion]; }; serviceBundleLoader.onFailed = ^(NSError *loadError) { WXLogError(@"No script URL found"); + if (completion) { + completion(NO); + } }; [serviceBundleLoader start]; } -- (void)registerService:(NSString *)name withService:(NSString *)serviceScript withOptions:(NSDictionary *)options +- (void)registerService:(NSString *)name withService:(NSString *)serviceScript withOptions:(NSDictionary *)options completion:(void(^)(BOOL result))completion { - if (!name || !serviceScript || !options) return; + if (!name || !serviceScript || !options) { + if (completion) { + completion(NO); + } + return; + } NSString *script = [WXServiceFactory registerServiceScript:name withRawScript:serviceScript withOptions:options]; @@ -318,6 +331,9 @@ - (void)registerService:(NSString *)name withService:(NSString *)serviceScript w // save it when execute [WXDebugTool cacheJsService:name withScript:serviceScript withOptions:options]; [weakSelf.bridgeCtx executeJsService:script withName:name]; + if (completion) { + completion(YES); + } }); }