// // FlutterAlibcHandle.m // flutter_alibc // // Created by 吴兴 on 2019/8/28. // #import "FlutterAlibcHandle.h" #import "FlutterAlibcTools.h" #import "FlutterAlibcConstKey.h" //#import //#import #import "ALiTradeWebViewController.h" #import "FlutterWxViewCtrlViewController.h" //#import //#import #import "UTDID/UTDevice.h" //旗舰版 #import //// 媒体电商套件图片库协议实现 //#import "ALITradeDemoImageLoader.h" //#import //// 电商套件外跳媒体页面实现 // //#import // //#import //#import //#import // // //#import #import #import #import #import #import #import #import "FNALITradeZipArchiver.h" @interface FlutterAlibcHandle () //// 图片库实现 //@property (nonatomic,strong)ALITradeDemoImageLoader *imageLoaderImp; // //// 外跳路由协议实现 //@property (nonatomic,strong)ALiTradeDemoURLHandler *urlHandlerImp; @end @implementation FlutterAlibcHandle FlutterMethodChannel *_flutterAlibcChannel = nil; - (instancetype)initWithRegistrar:(NSObject *)registrar methodChannel:(FlutterMethodChannel *)flutterMethodChannel { self = [super init]; if (self) { _flutterAlibcChannel = flutterMethodChannel; } return self; } #pragma mark- 对flutter暴露的方法 #pragma mark -- 初始化阿里百川 - (void)initAlibc:(FlutterMethodCall *)call result:(FlutterResult)result { // 百川平台基础SDK初始化,加载并初始化各个业务能力插件 NSString *version = call.arguments[@"version"]; NSString *appName = call.arguments[@"appName"]; // 判断是否为空 // if(![FlutterAlibcTools isNil:version]){ // [[AlibcTradeSDK sharedInstance] setIsvVersion:version]; //设置三方App版本,可用于标识App版本 // } // if(![FlutterAlibcTools isNil:appName]){ // [[AlibcTradeSDK sharedInstance] setIsvAppName:appName]; //设置三方App名称,可用于标识App // } // [[AlibcTradeSDK sharedInstance] setDebugLogOpen:YES];//开发阶段打开日志开关,方便排查错误信息 // [[AlibcTradeSDK sharedInstance] setEnv:AlibcEnvironmentRelease];//线上环境 // // // [[AlibcTradeSDK sharedInstance] asyncInitWithSuccess:^{ // // 告诉flutter,初始化完成 // result(@{FlutterAlibcConstKey_ErrorCode:@"0",FlutterAlibcConstKey_ErrorMessage:@"success"}); // } failure:^(NSError *error) { // NSLog(@"Init failed: %@", error.description); // result(@{FlutterAlibcConstKey_ErrorCode:[NSString stringWithFormat: @"%ld", (long)error.code],FlutterAlibcConstKey_ErrorMessage:error.description}); // }]; __weak typeof(self) weakSelf = self; // // 打开日志开关 [[AlibcTradeUltimateSDK sharedInstance] setDebugLogOpen:YES]; [[AlibcTradeUltimateSDK sharedInstance] asyncInitWithSuccess:^{ NSLog(@"百川初始化成功"); __strong typeof(self) self = weakSelf; [[AlibcTradeUltimateSDK sharedInstance] setDebugLogOpen:YES]; [[AlibcTradeMiniAppURLRouter sharedInstance] addMiniAppRouterListener:self]; [WMLHandlerFactory registerHandler:self withProtocol:@protocol(WMLImageLoaderProtocol)]; [WMLHandlerFactory registerHandler:[FNALITradeZipArchiver new] withProtocol:@protocol(TRVZipArchiveProtocol)]; #ifdef DEBUG //必须在百川初始化成功之后调用,开启自检工具的悬浮入口 [[AlibcTradeUltimateSDK sharedInstance] enableAutoShowDebug:YES]; [[AlibcTradeUltimateSDK sharedInstance] setDebugLogOpen:YES]; #endif } failure:^(NSError * _Nonnull error) { NSLog(@"百川初始化失败"); }]; } #pragma mark --淘宝登录 - (void)loginTaoBao:(FlutterMethodCall *)call result:(FlutterResult)result{ // if(![[ALBBCompatibleSession sharedInstance] isLogin]) { // UIViewController *rootViewController = // [UIApplication sharedApplication].delegate.window.rootViewController; // [[ALBBSDK sharedInstance] setH5Only:NO]; // [[ALBBSDK sharedInstance] auth:rootViewController successCallback:^{ // ALBBUser *userInfo =[[ALBBCompatibleSession sharedInstance] getUser]; // // 登录成功 // result(@{ // FlutterAlibcConstKey_ErrorCode:@"0", // FlutterAlibcConstKey_ErrorMessage:@"success", // FlutterAlibcConstKey_Data:@{ // // 昵称 // @"nick":userInfo.nick, // // 头像地址 // @"avatarUrl":userInfo.avatarUrl, // @"openId":userInfo.openId, // @"openSid":userInfo.openSid, // @"topAccessToken":userInfo.topAccessToken, // @"topAuthCode":userInfo.topAuthCode, // } // }); // } failureCallback:^(NSError *error) { // // 登录失败 // result(@{ // FlutterAlibcConstKey_ErrorCode:[NSString stringWithFormat: @"%ld", (long)error.code], // FlutterAlibcConstKey_ErrorMessage:error.localizedDescription, // FlutterAlibcConstKey_Data:@{} // }); // }]; // // } else { // ALBBUser *userInfo =[[ALBBCompatibleSession sharedInstance] getUser]; // // 登录成功 // result(@{ // FlutterAlibcConstKey_ErrorCode:@"0", // FlutterAlibcConstKey_ErrorMessage:@"success", // FlutterAlibcConstKey_Data:@{ // // 昵称 // @"nick":userInfo.nick, // // 头像地址 // @"avatarUrl":userInfo.avatarUrl, // @"openId":userInfo.openId, // @"openSid":userInfo.openSid, // @"topAccessToken":userInfo.topAccessToken, // @"topAuthCode":userInfo.topAuthCode, // } // }); // } NSLog(@"授权登录信息==%@",call.arguments); if (![[[AlibcTradeUltimateSDK sharedInstance] loginService] isLogin]) { UIViewController *rootViewController = [UIApplication sharedApplication].delegate.window.rootViewController; [[[AlibcTradeUltimateSDK sharedInstance] loginService] setH5Only:NO]; [[[AlibcTradeUltimateSDK sharedInstance] loginService] auth:rootViewController success:^(AlibcUser *user) { NSLog(@"登录成功"); result(@{FlutterAlibcConstKey_ErrorCode:@"0", FlutterAlibcConstKey_ErrorMessage:@"success", FlutterAlibcConstKey_Data:@{ // 昵称 @"nick":user.nick, // 头像地址 @"avatarUrl":user.avatarUrl, @"openId":user.openId, @"openSid":user.openSid, @"topAccessToken":@"", @"topAuthCode":@"", } }); //无 topAccessToken topAuthCode } failure:^(NSError *error) { NSLog(@"登录失败"); result(@{ FlutterAlibcConstKey_ErrorCode:[NSString stringWithFormat: @"%ld", (long)error.code], FlutterAlibcConstKey_ErrorMessage:error.localizedDescription, FlutterAlibcConstKey_Data:@{} }); }]; } else { AlibcUser *user = [[[AlibcTradeUltimateSDK sharedInstance] loginService] getUser]; NSLog(@"已登录"); result(@{ FlutterAlibcConstKey_ErrorCode:@"0", FlutterAlibcConstKey_ErrorMessage:@"success", FlutterAlibcConstKey_Data:@{ @"nick":user.nick, @"avatarUrl":user.avatarUrl, @"openId":user.openId, @"openSid":user.openSid, @"topAccessToken":@"", @"topAuthCode":@"", } }); } } // //else if([@"useAlipayNative" isEqualToString:call.method]){ // [_handler useAlipayNative:call result:result]; //} #pragma mark --淘客登录 -(void)taoKeLogin:(FlutterMethodCall *)call result:(FlutterResult)result{ // 需要获取的数据 // NSNumber *type1 = call.arguments[@"openType"]; // AlibcOpenType openType = [self openType:[type1 intValue]]; // BOOL isNeedCustomNativeFailMode = [call.arguments[@"isNeedCustomNativeFailMode"] boolValue]; // // 不用push了,没有nav,默认都present // // BOOL isNeedPush = [call.arguments[@"isNeedPush"] boolValue]; // BOOL isNeedPush = YES; // NSNumber *failMode = call.arguments[@"nativeFailMode"]; // AlibcNativeFailMode nativeFailMode = [self NativeFailMode:[failMode intValue]]; // NSNumber *schemeType = call.arguments[@"schemeType"]; // NSString *linkKey = [self schemeType:[schemeType intValue]]; // NSString *url = call.arguments[@"url"]; // AlibcTradeTaokeParams *taokeParam = [self getTaokeParams:call]; // NSDictionary *trackParam = call.arguments[@"trackParam"]; // NSString *backUrl = [FlutterAlibcTools changeType:call.arguments[@"backUrl"]]; // // NSString *backUrl = [FlutterAlibcTools nullToNil:call.arguments[@"backUrl"]]; // // UIViewController *rootViewController = [UIApplication sharedApplication].delegate.window.rootViewController; // // // AlibcTradeShowParams* showParam = [[AlibcTradeShowParams alloc] init]; // showParam.openType = openType; // showParam.isNeedCustomNativeFailMode = isNeedCustomNativeFailMode; // showParam.isNeedPush=isNeedPush; // showParam.nativeFailMode=nativeFailMode; // showParam.linkKey=linkKey; // showParam.backUrl= backUrl; // // ALiTradeWebViewController* webviewVC = [[ALiTradeWebViewController alloc] init]; // // NSInteger res = [[AlibcTradeSDK sharedInstance].tradeService // openByUrl:url // identity:@"trade" // webView:webviewVC.webView // parentController:rootViewController // showParams:showParam // taoKeParams:taokeParam // trackParam:trackParam tradeProcessSuccessCallback:^(AlibcTradeResult * _Nullable alibcTradeResult) { // // // 交易成功,判断是付款成功还是加入购物车 // // if(alibcTradeResult.result == AlibcTradeResultTypePaySuccess){ // // // 付款成功 // // result(@{ // // FlutterAlibcConstKey_ErrorCode:@"0", // // FlutterAlibcConstKey_ErrorMessage:@"付款成功", // // FlutterAlibcConstKey_Data:@{ // // @"type":@0, // // @"paySuccessOrders":[alibcTradeResult payResult].paySuccessOrders, // // @"payFailedOrders":[alibcTradeResult payResult].payFailedOrders, // // } // // }); // // }else if(alibcTradeResult.result== AlibcTradeResultTypeAddCard){ // // // 加入购物车 // // result(@{ // // FlutterAlibcConstKey_ErrorCode:@"0", // // FlutterAlibcConstKey_ErrorMessage:@"加入购物车成功", // // FlutterAlibcConstKey_Data:@{ // // @"type":@1, // // } // // }); // // } // } tradeProcessFailedCallback:^(NSError * _Nullable error) { // // result(@{ // // FlutterAlibcConstKey_ErrorCode:[NSString stringWithFormat: @"%ld", (long)error.code], // // FlutterAlibcConstKey_ErrorMessage:[error localizedDescription], // // }); // }]; // // if (res == 1) { // // 新建一个view // FlutterWxViewCtrlViewController *WxVC = [[FlutterWxViewCtrlViewController alloc] init]; // WxVC.vc = webviewVC; // WxVC.accessBlock = ^(NSString * accessToken){ // NSLog(@"accessToken = %@",accessToken); // if (accessToken) { // result(@{ // @"accessToken":accessToken // }); // }else{ // result(@{ // @"accessToken":@"" // }); // } // // }; // UINavigationController *root = [[UINavigationController alloc] initWithRootViewController:WxVC]; // [rootViewController presentViewController:root animated:NO completion:^{ // // }]; // } NSLog(@"淘客登录信息==%@",call.arguments); UIViewController *rootViewController = [UIApplication sharedApplication].delegate.window.rootViewController; // [[AlibcTradeUltimateSDK sharedInstance] showLocalDebugTool:rootViewController]; NSDictionary *infoDictionary = [[NSBundle mainBundle] infoDictionary]; NSString *app_NameXT = [infoDictionary objectForKey:@"CFBundleName"]; NSString *appLogo=@"app_icon"; // [[AlibcTradeUltimateSDK sharedInstance].tradeService authorize4AppName:app_NameXT appLogo:[UIImage imageNamed:appLogo] currentVC:rootViewController callBack:^(NSError *error, NSString *accessToken, NSString *expire) { // NSLog(@"淘客登录accessToken==%@",accessToken); // NSLog(@"淘客登录expire==%@",expire); // NSLog(@"淘客登录error==%@",error); // NSLog(@"accessToken = %@",accessToken); // if (accessToken) { // result(@{ // @"accessToken":accessToken // }); // }else{ // result(@{ // @"accessToken":@"" // }); // } // }]; //32271226 NSString *AppKey=call.arguments[@"alibcAppKey"]; NSString *appName = call.arguments[@"name"]; [[AlibcTradeUltimateSDK sharedInstance].tradeService authorize4AppKey:AppKey appName:app_NameXT appLogo:[UIImage imageNamed:appLogo] currentVC:rootViewController callBack:^(NSError *error, NSString *accessToken, NSString *expire) { NSLog(@"淘客登录accessToken==%@",accessToken); NSLog(@"淘客登录expire==%@",expire); NSLog(@"淘客登录error==%@",error); NSLog(@"accessToken = %@",accessToken); if (accessToken) { result(@{ @"accessToken":accessToken }); }else{ result(@{ @"accessToken":@"" }); } }]; } #pragma mark --退出登录 - (void)loginOut{ //[[ALBBSDK sharedInstance] logout]; [[[AlibcTradeUltimateSDK sharedInstance] loginService] logout]; } #pragma mark --通过url打开,包括h5,唤起手淘等 - (void)openByUrl:(FlutterMethodCall *)call result:(FlutterResult)result{ NSLog(@"h5MSG==%@",call.arguments); NSNumber *schemeType = call.arguments[@"schemeType"]; NSString *linkKey = [self schemeType:[schemeType intValue]]; NSString *url = call.arguments[@"url"]; NSInteger isNeedCustomNativeFailMode = [call.arguments[@"isNeedCustomNativeFailMode"] integerValue]; //ALiTradeWebViewController* webviewVC = [[ALiTradeWebViewController alloc] init]; AlibcTradeShowParams *showParams = [[AlibcTradeShowParams alloc] init]; showParams.failMode = isNeedCustomNativeFailMode;//isNeedCustomNativeFailMode;//自定义唤端失败策略 0 打开下载页面 1自定义降级页打开 2不处理 //AlibcOpenAliAppDownloadPage = 0, //AlibcOpenInAppByCustomerDegradeUrl = 1, //AlibcOpenDoNothing = 2 showParams.isNeedOpenByAliApp = YES; showParams.isPushBCWebView = YES; showParams.linkKey = linkKey; //showParams.degradeUrl = url;//媒体自定义降级url UIViewController *rootViewController = [UIApplication sharedApplication].delegate.window.rootViewController; //AlibcTradeTaokeParams *taokeParam = [self getTaokeParams:call]; AlibcTradeTaokeParams *taokeParam = [AlibcTradeTaokeParams new]; taokeParam.pid = [call.arguments valueForKey:@"pid"]; taokeParam.unionId = [call.arguments valueForKey:@"unionId"]; taokeParam.subPid = [call.arguments valueForKey:@"subPid"]; taokeParam.relationId = [call.arguments valueForKey:@"relationId"]; taokeParam.materialSourceUrl = [call.arguments valueForKey:@"materialSourceUrl"]; taokeParam.extParams = [call.arguments valueForKey:@"extParams"]; NSDictionary *trackParam = [call.arguments valueForKey:@"trackParam"]; [[AlibcTradeUltimateSDK sharedInstance].tradeService openTradeUrl:url parentController:rootViewController showParams:showParams taoKeParams:taokeParam trackParam:trackParam openUrlCallBack:^(NSError *error, NSDictionary *dict) { NSLog(@"error==%@",error); NSLog(@"dict==%@",dict); if(error){ result(@{ FlutterAlibcConstKey_ErrorCode:[NSString stringWithFormat: @"%ld", (long)error.code], FlutterAlibcConstKey_ErrorMessage:[error localizedDescription], }); }else{ } }]; } #pragma mark --打开商品详情 - (void)openItemDetail:(FlutterMethodCall *)call result:(FlutterResult)result{ NSString *itemID = call.arguments[@"itemID"]; NSLog(@"打开商品详情==%@",call.arguments); //id page = [AlibcTradePageFactory itemDetailPage:itemID]; //[self OpenPageByNewWay:page BizCode:@"detail" Call:call callback:result]; [self OpenPageByNewWayNorpageBizCode:@"detail" Call:call callback:result]; } #pragma mark --打开店铺 - (void)openShop:(FlutterMethodCall *)call result:(FlutterResult)result{ NSString *shopId = call.arguments[@"shopId"]; NSLog(@"打开店铺==%@",call.arguments); //id page = [AlibcTradePageFactory shopPage:shopId]; //[self OpenPageByNewWay:page BizCode:@"shop" Call:call callback:result]; [self OpenPageByNewWayNorpageBizCode:@"shop" Call:call callback:result]; } #pragma mark --打开我的购物车 - (void)openCart:(FlutterMethodCall *)call result:(FlutterResult)result{ NSLog(@"打开我的购物车==%@",call.arguments); //id page = [AlibcTradePageFactory myCartsPage]; //[self OpenPageByNewWay:page BizCode:@"cart" Call:call callback:result]; [self OpenPageByNewWayNorpageBizCode:@"cart" Call:call callback:result]; } // #pragma mark --淘客打点 - (void)syncForTaoke:(FlutterMethodCall *)call result:(FlutterResult)result{ BOOL isSync = [call.arguments[@"isSync"] boolValue]; //[[AlibcTradeSDK sharedInstance] setIsSyncForTaoke:isSync]; } #pragma mark --设置是否需要 Native AliPay 接口 - (void)useAlipayNative:(FlutterMethodCall *)call result:(FlutterResult)result{ BOOL isNeed = [call.arguments[@"isNeed"] boolValue]; //[[AlibcTradeSDK sharedInstance] setShouldUseAlizfNative:isNeed]; } //获取udid - (void)getUdid:(FlutterMethodCall *)call result:(FlutterResult)result{ NSUUID *identifierForVendor = [[UIDevice currentDevice] identifierForVendor]; NSDictionary* map=@{@"udid" : [UTDevice utdid]}; result(map); } #pragma mark - 不对flutter暴露 #pragma mark --打开page //- (void)OpenPageByNewWay:(id)page BizCode:(NSString *)bizCode Call:(FlutterMethodCall *)call callback:(FlutterResult)callback{ // AlibcTradeShowParams* showParam = [[AlibcTradeShowParams alloc] init]; // NSNumber *type1 = call.arguments[@"openType"]; // AlibcOpenType openType = [self openType:[type1 intValue]]; // BOOL isNeedCustomNativeFailMode = [call.arguments[@"isNeedCustomNativeFailMode"] boolValue]; // // 不用push了,没有nav,默认都present // // BOOL isNeedPush = [call.arguments[@"isNeedPush"] boolValue]; // BOOL isNeedPush = NO; // // 不用绑定了,默认为没有,有的话flutter太难搞了 // // BOOL isBindWebview = [call.arguments[@"isBindWebview"] boolValue]; // NSNumber *failMode = call.arguments[@"nativeFailMode"]; // AlibcNativeFailMode nativeFailMode = [self NativeFailMode:[failMode intValue]]; // NSNumber *schemeType = call.arguments[@"schemeType"]; // NSString *linkKey = [self schemeType:[schemeType intValue]]; // AlibcTradeTaokeParams *taokeParam = [self getTaokeParams:call]; // NSDictionary *trackParam = [FlutterAlibcTools nullToNil:call.arguments[@"trackParam"]]; // // NSString *backUrl = [FlutterAlibcTools changeType:call.arguments[@"backUrl"]]; // // 判断 // // UIViewController *rootViewController = [UIApplication sharedApplication].delegate.window.rootViewController; // // showParam.openType = openType; // showParam.isNeedPush = isNeedPush; // showParam.nativeFailMode = nativeFailMode; // showParam.isNeedCustomNativeFailMode = isNeedCustomNativeFailMode; // showParam.linkKey = linkKey; // showParam.backUrl = backUrl; // // // // if (isBindWebview) { // // ALiTradeWebViewController *viewCtrl = [[ALiTradeWebViewController alloc]init]; // // NSInteger res = [[AlibcTradeSDK sharedInstance].tradeService openByBizCode:bizCode page:page webView:view.webView parentController:view showParams:showParam taoKeParams:[self taokeParam] trackParam:[self customParam] tradeProcessSuccessCallback:self.onTradeSuccess tradeProcessFaelseiledCallback:self.onTradeFailure]; // // }else{ // // if (isNeedPush) { // // [[AlibcTradeSDK sharedInstance].tradeService openByBizCode:bizCode page:page webView:nil parentController:rootViewController showParams:showParam taoKeParams:taokeParam trackParam:trackParam tradeProcessSuccessCallback:^(AlibcTradeResult * _Nullable result) { // //// 交易成功,判断是付款成功还是加入购物车 // // if(result.result == AlibcTradeResultTypePaySuccess){ // //// 付款成功 // // callback(@{ // // FlutterAlibcConstKey_ErrorCode:@"0", // // FlutterAlibcConstKey_ErrorMessage:@"付款成功", // // FlutterAlibcConstKey_Data:@{ // // @"type":@0, // // @"paySuccessOrders":[result payResult].paySuccessOrders, // // @"payFailedOrders":[result payResult].payFailedOrders, // // } // // }); // // }else if(result.result== AlibcTradeResultTypeAddCard){ // //// 加入购物车 // // callback(@{ // // FlutterAlibcConstKey_ErrorCode:@"0", // // FlutterAlibcConstKey_ErrorMessage:@"付款成功", // // FlutterAlibcConstKey_Data:@{ // // @"type":@1, // // } // // }); // // } // // } tradeProcessFailedCallback:^(NSError * _Nullable error) { // //// 退出交易流程 // // callback(@{ // // FlutterAlibcConstKey_ErrorCode:[NSString stringWithFormat: @"%ld", (long)error.code], // // FlutterAlibcConstKey_ErrorMessage:[error localizedDescription], // // FlutterAlibcConstKey_Data:@{ // // @"orderIdList":[[error userInfo] objectForKey:@"orderIdList"], // // } // // }); // // }]; // // }else{ // [[AlibcTradeSDK sharedInstance].tradeService openByBizCode:bizCode page:page webView:nil parentController:rootViewController showParams:showParam taoKeParams:taokeParam trackParam:trackParam tradeProcessSuccessCallback:^(AlibcTradeResult * _Nullable result) { // // 交易成功,判断是付款成功还是加入购物车 // if(result.result == AlibcTradeResultTypePaySuccess){ // // 付款成功 // callback(@{ // FlutterAlibcConstKey_ErrorCode:@"0", // FlutterAlibcConstKey_ErrorMessage:@"付款成功", // FlutterAlibcConstKey_Data:@{ // @"type":@0, // @"paySuccessOrders":[result payResult].paySuccessOrders, // @"payFailedOrders":[result payResult].payFailedOrders, // } // }); // }else if(result.result== AlibcTradeResultTypeAddCard){ // // 加入购物车 // callback(@{ // FlutterAlibcConstKey_ErrorCode:@"0", // FlutterAlibcConstKey_ErrorMessage:@"加入购物车成功", // FlutterAlibcConstKey_Data:@{ // @"type":@1, // } // }); // } // } tradeProcessFailedCallback:^(NSError * _Nullable error) { // // 退出交易流程 // callback(@{ // FlutterAlibcConstKey_ErrorCode:[NSString stringWithFormat: @"%ld", (long)error.code], // FlutterAlibcConstKey_ErrorMessage:[error localizedDescription], // // Android没有,所以去掉 // // FlutterAlibcConstKey_Data:@{ // // @"orderIdList":[[error userInfo] objectForKey:@"orderIdList"], // // } // }); // }]; // // } // //} //} #pragma mark - 不对flutter暴露 旗舰版 #pragma mark --打开page 无 AlibcTradePage page - (void)OpenPageByNewWayNorpageBizCode:(NSString *)bizCode Call:(FlutterMethodCall *)call callback:(FlutterResult)callback{ AlibcTradeTaokeParams *taokeParam = [AlibcTradeTaokeParams new]; NSDictionary *tParams = [call.arguments valueForKey:@"taokeParams"]; if (tParams) { NSString *pid = [tParams valueForKey:@"pid"]; NSString *unionId = [tParams valueForKey:@"unionId"]; NSString *subPid = [tParams valueForKey:@"subPid"]; NSString *materialSourceUrl = [tParams valueForKey:@"materialSourceUrl"]; NSString *relationId = [tParams valueForKey:@"relationId"]; NSDictionary *extParams = [tParams valueForKey:@"extParams"]; taokeParam.pid = pid; taokeParam.unionId = unionId; taokeParam.subPid = subPid; taokeParam.materialSourceUrl = materialSourceUrl; taokeParam.relationId = relationId; taokeParam.extParams = extParams; } UIViewController *rootViewController = [UIApplication sharedApplication].delegate.window.rootViewController; NSNumber *schemeType = call.arguments[@"schemeType"]; NSString *linkKey = [self schemeType:[schemeType intValue]]; NSString *url = call.arguments[@"url"]; NSInteger isNeedCustomNativeFailMode = [call.arguments[@"isNeedCustomNativeFailMode"] integerValue]; AlibcTradeUrlParams *urlParams = [AlibcTradeUrlParams new]; urlParams.id = [call.arguments valueForKey:@"id"]; urlParams.shopId = [call.arguments valueForKey:@"shopId"]; NSDictionary *bizExtMap = [call.arguments valueForKey:@"bizExtMap"]; if (bizExtMap && [bizExtMap isKindOfClass:[NSDictionary class]]) { urlParams.bizExtMap = bizExtMap; } NSDictionary *trackParam = [FlutterAlibcTools nullToNil:call.arguments[@"trackParam"]]; AlibcTradeShowParams *showParams = [[AlibcTradeShowParams alloc] init]; showParams.failMode = 2;//isNeedCustomNativeFailMode;//自定义唤端失败策略 0 打开下载页面 1自定义降级页打开 2不处理 showParams.isNeedOpenByAliApp = YES; showParams.isPushBCWebView = NO; showParams.linkKey = linkKey; showParams.degradeUrl = @"";//媒体自定义降级url [[AlibcTradeUltimateSDK sharedInstance].tradeService openTradePageByCode:bizCode parentController:rootViewController urlParams:urlParams showParams:showParams taoKeParams:taokeParam trackParam:trackParam openUrlCallBack:^(NSError *_Nonnull error, NSDictionary *dict) { NSLog(@"类型==%@",bizCode); if (error) { NSLog(@"类型error==%@",error); NSDictionary *errorUserInfo=error.userInfo; NSString *msgString=[errorUserInfo valueForKey:@"msg"]; callback(@{ FlutterAlibcConstKey_ErrorCode:[NSString stringWithFormat: @"%ld", (long)error.code], FlutterAlibcConstKey_ErrorMessage:msgString, }); } else { } }]; } #pragma mark --设置淘客参数 //- (AlibcTradeTaokeParams *)getTaokeParams:(FlutterMethodCall *)call{ // AlibcTradeTaokeParams *taoke = [[AlibcTradeTaokeParams alloc] init]; // if (call.arguments[@"taoKeParams"] == nil || [call.arguments[@"taoKeParams"] isKindOfClass:[NSNull class]]) { // return nil; // } // NSDictionary *taoKeParams = call.arguments[@"taoKeParams"]; // //taoke.adzoneId = (taoKeParams[@"adzoneId"] == (id) [NSNull null]) ? nil : taoKeParams[@"adzoneId"]; // taoke.pid = (taoKeParams[@"pid"] == (id) [NSNull null]) ? nil : taoKeParams[@"pid"]; // //有adzoneId则pid失效 // taoke.unionId = (taoKeParams[@"unionId"] == (id) [NSNull null]) ? nil : taoKeParams[@"unionId"]; // taoke.subPid = (taoKeParams[@"subPid"] == (id) [NSNull null]) ? nil : taoKeParams[@"subPid"]; // // 必须是dic // taoke.extParams = (taoKeParams[@"extParams"] == (id) [NSNull null]) ? nil : taoKeParams[@"extParams"]; // // //新加 relationId materialSourceUrl 去掉 adzoneId // taoke.relationId = (taoKeParams[@"relationId"] == (id) [NSNull null]) ? nil : taoKeParams[@"relationId"]; // taoke.materialSourceUrl = (taoKeParams[@"materialSourceUrl"] == (id) [NSNull null]) ? nil : taoKeParams[@"materialSourceUrl"]; // // 判断这玩意是什么格式,dic就直接赋值,jsoÏn需要转dic // // if ([extParams isKindOfClass:[NSDictionary class]]) { // // taoke.extParams = extParams; // // }else{ // // 解析字符串 // // taoke.extParams = [FlutterAlibcTools dictionaryWithJsonString:extParams]; // // } // // return taoke; //} #pragma mark - 转换 #pragma mark --唤起端失败的策略转换 //-(AlibcNativeFailMode )NativeFailMode:(int)mode{ // AlibcNativeFailMode openType=AlibcNativeFailModeJumpH5; // switch (mode) { // case 0: // openType=AlibcNativeFailModeJumpH5; // break; // case 1: // openType=AlibcNativeFailModeJumpDownloadPage; // break; // case 2: // openType=AlibcNativeFailModeNone; // break; // default: // break; // } // return openType; // //} //唤起类型 //- (AlibcOpenType)openType:(int)mode{ // // AlibcOpenType openType=AlibcOpenTypeAuto; // switch (mode) { // case 0: // openType=AlibcOpenTypeAuto; // break; // case 1: // openType=AlibcOpenTypeNative; // break; // default: // break; // } // return openType; //} //打开类型 -(NSString*)schemeType:(int)mode{ NSString *linkKey=@"tmall"; switch (mode) { case 0: linkKey=@"tmall"; break; case 1: linkKey=@"taobao"; break; default: break; } return linkKey; } /** 可设置的参数 1.是否同步淘客打点 2.是否使用Native支付宝 3.是否使用淘客参数(是,需要设置如下参数) adzoneId pid //有adzoneId则pid失效 unionId subPid extParams{ sellerId taokeAppkey } 4.页面打开方式 是否唤端 Auto/Native 唤起目标应用 淘宝/天猫 是否以push的方式打开页面 是否绑定webview 是否自定义唤端失败策略(若是:H5,DownLoad,None) 5.跟踪参数 customParams自定义 */ @end