面試之家只是為了學(xué)習(xí)和交流使用Weex,題庫(kù)等內(nèi)容不可用于商業(yè)項(xiàng)目
在Weex
開(kāi)發(fā)中手报,使用自定義Module
的方式黄锤,來(lái)擴(kuò)展Weex
的能力骗爆,官方教程在這里,這里我以自定義分享模塊來(lái)舉例
第一步
先創(chuàng)建一個(gè)繼承與NSObject
的基類UM_WeexModule
,然后引入頭文件#import <WeexSDK.h>
,并繼承WXModuleProtocol
協(xié)議赌渣。
第二步
實(shí)現(xiàn)方法并暴露給JS
- (void)shareEvent:(NSDictionary *)parames callback:(WXModuleKeepAliveCallback)callback {
if (![parames isKindOfClass:NSClassFromString(@"NSDictionary")]) {
[SVProgressHUD showErrorWithStatus:@"非法傳參"];
return;
}
[UMSocialUIManager showShareMenuViewInWindowWithPlatformSelectionBlock:^(UMSocialPlatformType platformType, NSDictionary *userInfo) {
switch (platformType) {
case UMSocialPlatformType_Sina: {
if (![[UMSocialManager defaultManager]isInstall:UMSocialPlatformType_Sina]) {
[SVProgressHUD showErrorWithStatus:@"未安裝新浪客戶端"];
return ;
}
}
break;
case UMSocialPlatformType_WechatSession: {
if (![[UMSocialManager defaultManager]isInstall:UMSocialPlatformType_WechatSession]) {
[SVProgressHUD showErrorWithStatus:@"未安裝微信客戶端"];
return ;
}
}
break;
case UMSocialPlatformType_WechatTimeLine: {
if (![[UMSocialManager defaultManager]isInstall:UMSocialPlatformType_WechatTimeLine]) {
[SVProgressHUD showErrorWithStatus:@"未安裝微信客戶端"];
return ;
}
}
break;
case UMSocialPlatformType_QQ: {
if (![[UMSocialManager defaultManager]isInstall:UMSocialPlatformType_QQ]) {
[SVProgressHUD showErrorWithStatus:@"未安裝QQ客戶端"];
return ;
}
}
break;
case UMSocialPlatformType_Qzone: {
if (![[UMSocialManager defaultManager]isInstall:UMSocialPlatformType_Qzone]) {
[SVProgressHUD showErrorWithStatus:@"未安裝QQ客戶端"];
return ;
}
}
break;
default:
break;
}
NSString *type = parames[@"type"];
NSString *title = parames[@"title"];
NSString *des =parames[@"des"];
NSString *picUrl = parames[@"picUrl"];
NSString *linkUrl = parames[@"linkUrl"];
//創(chuàng)建分享消息對(duì)象
UMSocialMessageObject *messageObject = [UMSocialMessageObject messageObject];
if ([type isEqualToString:@"link"]) {
//創(chuàng)建網(wǎng)頁(yè)內(nèi)容對(duì)象
UMShareWebpageObject *shareObject = [UMShareWebpageObject shareObjectWithTitle:title descr:des thumImage:picUrl];
//設(shè)置網(wǎng)頁(yè)地址
shareObject.webpageUrl = linkUrl;
//分享消息對(duì)象設(shè)置分享內(nèi)容對(duì)象
messageObject.shareObject = shareObject;
} else if ([type isEqualToString:@"pic"]) {
//創(chuàng)建圖片內(nèi)容對(duì)象
UMShareImageObject *shareObject = [[UMShareImageObject alloc] init];
[shareObject setShareImage:picUrl];
//分享消息對(duì)象設(shè)置分享內(nèi)容對(duì)象
messageObject.shareObject = shareObject;
} else if ([type isEqualToString:@"richText"]) {
//設(shè)置文本
messageObject.text = title;
//創(chuàng)建圖片內(nèi)容對(duì)象
UMShareImageObject *shareObject = [[UMShareImageObject alloc] init];
//如果有縮略圖魏铅,則設(shè)置縮略圖
shareObject.thumbImage = [UIImage imageNamed:@"icon"];
[shareObject setShareImage:picUrl];
//分享消息對(duì)象設(shè)置分享內(nèi)容對(duì)象
messageObject.shareObject = shareObject;
}
[[UMSocialManager defaultManager] shareToPlatform:platformType messageObject:messageObject currentViewController:nil completion:^(id data, NSError *error) {
if (error) {
callback(error.userInfo[@"message"],false);
}else{
[SVProgressHUD showSuccessWithStatus:@"分享成功"];
callback(@"1",false);
}
}];
}];
}
- (void)setalias:(NSDictionary *)params {
[UMessage addAlias:[NSString stringWithFormat:@"%@",params[@"userID"]] type:params[@"type"] response:^(id _Nonnull responseObject, NSError * _Nonnull error) {
}];
}
第三步
將方法拋出給JS
WX_EXPORT_METHOD(@selector(shareEvent: callback:))
WX_EXPORT_METHOD(@selector(setalias:))
第四步
初始化時(shí)注冊(cè)到WeexSDK
[WXSDKEngine registerModule:@"UM_Event" withClass:NSClassFromString(@"UM_WeexModule")];
第五步
JS調(diào)用
var um_share = weex.requireModule('UM_Event');
um_share.shareEvent({
type:'pic',
title:'title',
picUrl:'https://mianshizhijia.oss-cn-hangzhou.aliyuncs.com/resourse_image/%E5%88%86%E4%BA%AB.jpg',
}, callback => {
});
結(jié)語(yǔ)
本篇文章旨在分享如何通過(guò)自定義Module
來(lái)擴(kuò)展Weex
的能力昌犹,由于最近在忙于找工作坚芜,所以寫(xiě)的不是很深入,等過(guò)段時(shí)間穩(wěn)定之后斜姥,會(huì)在繼續(xù)分享Weex
實(shí)現(xiàn)原理,以及從注冊(cè)方法到可以被JS調(diào)用中間的實(shí)現(xiàn)過(guò)程鸿竖。