FlutterWxworkPlugin.m 14.6 KB
#import "FlutterWxworkPlugin.h"

#import "WWKApiObject.h"

@implementation FlutterWxworkPlugin

FlutterResult authResult;
FlutterMethodChannel *channel;
+ (void)registerWithRegistrar:(NSObject<FlutterPluginRegistrar>*)registrar {
   channel = [FlutterMethodChannel
      methodChannelWithName:@"flutter_wxwork"
            binaryMessenger:[registrar messenger]];
  FlutterWxworkPlugin* instance = [[FlutterWxworkPlugin alloc] init];
  [registrar addMethodCallDelegate:instance channel:channel];
}



- (void)handleMethodCall:(FlutterMethodCall*)call result:(FlutterResult)result {
 if([@"isAppInstalled" isEqualToString:call.method]){
   
        result(@([WWKApi isAppInstalled]));
   }else if ([@"register" isEqualToString:call.method]) {
     NSDictionary *dic = call.arguments;
     NSString *scheme = dic[@"scheme"];
     NSString *corpId = dic[@"corpId"];
     NSString *agentId = dic[@"agentId"];
     result(@([WWKApi registerApp:scheme corpId:corpId agentId:agentId]));
  } else if ([@"auth" isEqualToString:call.method]){
     WWKSSOReq *req = [[WWKSSOReq alloc] init];
     // state参数为这次请求的唯一标示,客户端需要维护其唯一性。SSO回调时会原样返回
     req.state = call.arguments[@"state"];
     [WWKApi sendReq:req];
     authResult = result;
  }
   else if ([@"shareImageNetWork" isEqualToString:call.method]) {
        [self shareImageNetWork:call result:result];
   }
   else if([@"shareImagePath" isEqualToString:call.method]) {
        [self shareImagePath:call result:result];
   }
   else if ([@"shareMiniProgram" isEqualToString:call.method]) {
        [self shareMiniProgram:call result:result];
   }else if ([@"shareText" isEqualToString:call.method]) {
        [self shareText:call result:result];
   } else {
    result(FlutterMethodNotImplemented);
  }
}


- (void)shareText:(FlutterMethodCall *)call result:(FlutterResult)result {

    WWKSendMessageReq *req = [[WWKSendMessageReq alloc] init];
    WWKMessageTextAttachment *attachment = [[WWKMessageTextAttachment alloc] init];
    attachment.text = @"分享的文本内容";
    req.attachment = attachment;
    [WWKApi sendReq:req];
    
}

- (void)shareImageNetWork:(FlutterMethodCall *)call result:(FlutterResult)result {
    // [WWKApi registerApp:@"wwauthbdca186ec4257973000006" corpId:@"wwbdca186ec4257973" agentId:@"1000006"];
    
    dispatch_queue_t globalQueue = dispatch_get_global_queue(0, 0);
       dispatch_async(globalQueue, ^{


           // 使用NSURLSession异步请求网络图片
           NSURL *imageURL = [NSURL URLWithString:call.arguments[@"path"]];
           NSURLRequest *request = [NSURLRequest requestWithURL:imageURL];

           // 创建URLSession并开始任务
           NSURLSession *session = [NSURLSession sharedSession];
           NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:
               ^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
                   if (error) {
                       // 处理错误
                       NSLog(@"Error: %@", error);
                   } else {
                       // 成功获取数据,转换为NSData
                       NSData *imageData = data;

                       dispatch_async(dispatch_get_main_queue(), ^{
                           WWKSendMessageReq *req = [[WWKSendMessageReq alloc] init];
                               WWKMessageImageAttachment *attachment = [[WWKMessageImageAttachment alloc] init];
                       //        attachment.filename = @"icon.jpg";
                       //        attachment.path = [[NSBundle mainBundle] pathForResource:@"icon" ofType:@"jpg"];
           //                      NSURL *imageURL = [NSURL URLWithString:@"http://nosqn.colorcun.com/reserve/images/3x/%E6%9A%82%E6%97%A0.png"];
           //                         //下载图片
           //                         NSData *data= [NSData dataWithContentsOfURL:imageURL];
                           attachment.filename = @"share_image";
                                attachment.data = imageData;
                               req.attachment = attachment;
                               [WWKApi sendReq:req];
                                authResult = result;
                       });



                       // 此处可以使用imageData,例如保存到本地或者用于其他处理
                       // 保存到本地示例代码
                       // [imageData writeToFile:@"/path/to/save/image.png" atomically:YES];

                       // 或者直接使用
                       // UIImage *image = [UIImage imageWithData:imageData];
                   }
               }];

           // 启动任务
           [task resume];


       });

    // WWKSendMessageReq *req = [[WWKSendMessageReq alloc] init];
    // WWKMessageImageAttachment *attachment = [[WWKMessageImageAttachment alloc] init];
    // attachment.filename = @"icon.jpg";
    // attachment.path = [[NSBundle mainBundle] pathForResource:@"icon" ofType:@"jpg"];
    // //  NSURL *imageURL = [NSURL URLWithString:@"http://nosqn.colorcun.com/reserve/images/3x/%E6%9A%82%E6%97%A0.png"];
    // //     //下载图片
    // //     NSData *data= [NSData dataWithContentsOfURL:imageURL];
    // // attachment.data = data;
    // req.attachment = attachment;
    // [WWKApi sendReq:req];
    
}

- (void)shareImagePath:(FlutterMethodCall *)call result:(FlutterResult)result {
    // [WWKApi registerApp:@"wwauthbdca186ec4257973000006" corpId:@"wwbdca186ec4257973" agentId:@"1000006"];
    
    dispatch_queue_t globalQueue = dispatch_get_global_queue(0, 0);
       dispatch_async(globalQueue, ^{

              NSData *imageData= [NSData dataWithContentsOfFile:call.arguments[@"path"]];
  dispatch_async(dispatch_get_main_queue(), ^{
                           WWKSendMessageReq *req = [[WWKSendMessageReq alloc] init];
                               WWKMessageImageAttachment *attachment = [[WWKMessageImageAttachment alloc] init];
                       //        attachment.filename = @"icon.jpg";
                       //        attachment.path = [[NSBundle mainBundle] pathForResource:@"icon" ofType:@"jpg"];
           //                      NSURL *imageURL = [NSURL URLWithString:@"http://nosqn.colorcun.com/reserve/images/3x/%E6%9A%82%E6%97%A0.png"];
           //                         //下载图片
           //                         NSData *data= [NSData dataWithContentsOfURL:imageURL];
                           attachment.filename = @"share_image";
                                attachment.data = imageData;
                               req.attachment = attachment;
                               [WWKApi sendReq:req];
                                authResult = result;
                       });

           


       });

    // WWKSendMessageReq *req = [[WWKSendMessageReq alloc] init];
    // WWKMessageImageAttachment *attachment = [[WWKMessageImageAttachment alloc] init];
    // attachment.filename = @"icon.jpg";
    // attachment.path = [[NSBundle mainBundle] pathForResource:@"icon" ofType:@"jpg"];
    // //  NSURL *imageURL = [NSURL URLWithString:@"http://nosqn.colorcun.com/reserve/images/3x/%E6%9A%82%E6%97%A0.png"];
    // //     //下载图片
    // //     NSData *data= [NSData dataWithContentsOfURL:imageURL];
    // // attachment.data = data;
    // req.attachment = attachment;
    // [WWKApi sendReq:req];
    
}


- (void)shareMiniProgram:(FlutterMethodCall *)call result:(FlutterResult)result {

//     WWKSendMessageReq *req = [[WWKSendMessageReq alloc] init];
//             WWKMessageMiniAppAttachment *attachment = [[WWKMessageMiniAppAttachment alloc] init];
//             attachment.userName = @"gh_487873d353b3@app"; //必须是应用关联的小程序,注意要有@app后缀
//             attachment.path = @"pages/customer/index.html?id=563971&hasInvitation=1&hasSellerShare=1&uid=7035";
// // attachment.hdImageData = UIImageJPEGRepresentation([UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"bg_error" ofType:@"png"]], 1.0f);
//             NSString *hdImageData = call.arguments[@"hdImageData"]; 
//         NSURL *imageURL = [NSURL URLWithString:hdImageData];
//         //下载图片
//         NSData *data= [NSData dataWithContentsOfURL:imageURL];
//             attachment.hdImageData = data;
//             // attachment.hdImageData = UIImageJPEGRepresentation([UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"test" ofType:@"jpg"]], 1.0f);
//             attachment.title = @"您预订的长安大排档总店(测试),已经安排,点击查看详情";
//             req.attachment = attachment;        
//             [WWKApi sendReq:req];
//               authResult = result;

    dispatch_queue_t globalQueue = dispatch_get_global_queue(0, 0);
         dispatch_async(globalQueue, ^{


             // 使用NSURLSession异步请求网络图片
             NSURL *imageURL = [NSURL URLWithString:call.arguments[@"hdImageData"]];
             NSURLRequest *request = [NSURLRequest requestWithURL:imageURL];

             // 创建URLSession并开始任务
             NSURLSession *session = [NSURLSession sharedSession];
             NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:
                                           ^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
                 if (error) {
                     // 处理错误
                     NSLog(@"Error: %@", error);
                 } else {
                     // 成功获取数据,转换为NSData
                     NSData *imageData = data;

                     dispatch_async(dispatch_get_main_queue(), ^{
  NSMutableDictionary *mDic = [[NSMutableDictionary alloc]init];
                         result(mDic);
                         WWKSendMessageReq *req = [[WWKSendMessageReq alloc] init];
                         WWKMessageMiniAppAttachment *attachment = [[WWKMessageMiniAppAttachment alloc] init];
                         attachment.userName = call.arguments[@"userName"]; //必须是应用关联的小程序,注意要有@app后缀
                         attachment.path = call.arguments[@"path"];
                         attachment.hdImageData =imageData;

                         attachment.title = call.arguments[@"title"];
                         req.attachment = attachment;
                         [WWKApi sendReq:req];
                          authResult = result;

                     });

                 }}];


             // 启动任务
             [task resume];


         });



   


    
}




// - (void)handleShare:(FlutterMethodCall *)call result:(FlutterResult)result {
//     if ([@"shareText" isEqualToString:call.method]) {
//         [self shareText:call result:result];
//     } else if ([@"shareImage" isEqualToString:call.method]) {
//         [self shareImage:call result:result];
//     } else if ([@"shareWebPage" isEqualToString:call.method]) {
//         [self shareWebPage:call result:result];
//     } else if ([@"shareMusic" isEqualToString:call.method]) {
//         [self shareMusic:call result:result];
//     } else if ([@"shareVideo" isEqualToString:call.method]) {
//         [self shareVideo:call result:result];
//     } else if ([@"shareMiniProgram" isEqualToString:call.method]) {
//         [self shareMiniProgram:call result:result];
//     } else if ([@"shareFile" isEqualToString:call.method]) {
//         [self shareFile:call result:result];
//     }
// }

- (void)checkWWorkInstallation:(FlutterMethodCall *)call result:(FlutterResult)result {
    NSString *str = [NSString stringWithFormat:@"%hhd",[WWKApi isAppInstalled]];
      result(str);
   
    // result(@([WWKApi isAppInstalled]));
}

- (void)registerApp:(FlutterMethodCall *)call result:(FlutterResult)result {
    // NSNumber* doOnIOS =call.arguments[@"iOS"];

    // if (![doOnIOS boolValue]) {
    //     result(@NO);
    //     return;
    // }

    // NSString *appId = call.arguments[@"appId"];
    // if ([FluwxStringUtil isBlank:appId]) {
    //     result([FlutterError errorWithCode:@"invalid app id" message:@"are you sure your app id is correct ? " details:appId]);
    //     return;
    // }

    // NSString *universalLink = call.arguments[@"universalLink"];

    // if ([FluwxStringUtil isBlank:universalLink]) {
    //     result([FlutterError errorWithCode:@"invalid universal link" message:@"are you sure your universal link is correct ? " details:universalLink]);
    //     return;
    // }

    
 NSString *scheme = call.arguments[@"scheme"]; // 第三方App的Schema
 NSString *corpId = call.arguments[@"corpId"]; //   第三方App所属企业的ID
 NSString *agentId = call.arguments[@"agentId"]; // 第三方App在企业内部的ID
    // BOOL isWeChatRegistered = [WXApi registerApp:appId universalLink:universalLink];
 BOOL isWWKRegistered = [WWKApi registerApp:scheme corpId:corpId agentId:agentId];
  result(@(isWWKRegistered));
    // result(@(isWeChatRegistered));
}

#pragma mark - AppDelegate

- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey, id> *)options{
    return [WWKApi handleOpenURL:url delegate:self];
}

- (BOOL)isBlankString:(NSString *)string{

    if (string == nil) {

        return YES;

    }

    if (string == NULL) {

        return YES;

    }

    if ([string isKindOfClass:[NSNull class]]) {

        return YES;

    }

    if ([[string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] length]==0) {

        return YES;

    }

    return NO;

}

- (void)onResp:(WWKBaseResp *)resp {
    /*! @brief 所有通过sendReq发送的SDK请求的结果都在这个函数内部进行异步回调
     * @param resp SDK处理请求后的返回结果 需要判断具体是哪项业务的回调
     */
    /* SSO的回调 */
    if ([resp isKindOfClass:[WWKSSOResp class]]) {
        WWKSSOResp *r = (WWKSSOResp *)resp;
        NSMutableDictionary *mDic = [[NSMutableDictionary alloc]init];
        if([self isBlankString:r.code]){
              [mDic setObject:@"1" forKey:@"errCode"];
              [mDic setObject:@"" forKey:@"code"];
        }else{
             [mDic setObject:@"0" forKey:@"errCode"];
             [mDic setObject:r.code forKey:@"code"];
        }
        [mDic setObject:r.state forKey:@"state"];
        authResult(mDic);
       // [channel invokeMethod:@"auth" arguments:mDic];
    }else if([resp isKindOfClass:[WWKSendMessageResp class]]){

        // NSMutableDictionary *mDic = [[NSMutableDictionary alloc]init];

        //   [mDic setObject:[NSString stringWithFormat:@"%@",resp.errStr]] forKey:@"errStr"];
        //   [mDic setObject:[NSString stringWithFormat:@"%d",resp.errCode]] forKey:@"errCode"];
        // authResult(mDic);
    }

}



@end