Files
WebApp/ShenQi/GDWebURLSessionService.m
2026-02-24 09:55:08 +08:00

70 lines
2.4 KiB
Objective-C
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
//
// GDWebURLSessionService.m
// DESThreeTest
//
// Created by Qwerdf on 2025/10/24.
// Copyright © 2025 zhang alan. All rights reserved.
//
#import "GDWebURLSessionService.h"
#import "GDWebURLSessionDelegate.h"
@implementation GDWebURLSessionService
#pragma mark - 初始化
- (instancetype)initWithSchemeTask:(id<WKURLSchemeTask>)task {
if (self = [super init]) {
_schemeTask = task;
}
return self;
}
#pragma mark - GDWebCustomURLSchemeProtocol
+ (BOOL)canService:(id<WKURLSchemeTask>)task {
// 作为默认服务,理论上不需要实现(因为其他服务不处理时才会走到这里)
return YES;
}
- (void)startLoading:(void (^)(void))completion {
self.completion = completion;
NSURLRequest *request = self.schemeTask.request;
// 发起常规网络请求,直接将结果返回给网页
// self.dataTask = [[NSURLSession sharedSession] dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
// if (error) {
// [self.schemeTask didFailWithError:error];
// } else {
// [self.schemeTask didReceiveResponse:response];
// if (data) [self.schemeTask didReceiveData:data];
// [self.schemeTask didFinish];
// }
// if (completion) completion();
// }];
// [self.dataTask resume];
// =====新增:用自定义 NSURLSession + 代理处理重定)=====
// 配置会话默认配置即可如需自定义超时、Cookie 可在此调整)
NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];
// 创建自定义代理(关联 schemeTask用于处理重定向和回调
GDWebURLSessionDelegate *sessionDelegate = [[GDWebURLSessionDelegate alloc] initWithSchemeTask:self.schemeTask completion:completion];
sessionDelegate.stopMarkDic = self.stopMarkDic; // 传递 dic 引用
// 创建会话绑定代理delegateQueue 为 nil 表示用默认队列)
NSURLSession *session = [NSURLSession sessionWithConfiguration:config delegate:sessionDelegate delegateQueue:nil];
// 发起请求(替换原 sharedSession 的 dataTask
self.dataTask = [session dataTaskWithRequest:request];
[self.dataTask resume];
}
- (void)stopLoading {
[self.dataTask cancel];
self.dataTask = nil;
self.schemeTask = nil;
if (self.completion) self.completion();
}
@end