// // KBNetworkManager.h // CustomKeyboard // // 轻量网络层封装(扩展安全)。支持 GET/POST(JSON)。 // 注意:键盘扩展需要"允许完全访问"后才可联网, // 建议由宿主控制器在确认后调用 `setEnabled:YES` 再发起请求。 // #import NS_ASSUME_NONNULL_BEGIN extern NSErrorDomain const KBNetworkErrorDomain; typedef NS_ERROR_ENUM(KBNetworkErrorDomain, KBNetworkError) { KBNetworkErrorDisabled = 1, // 未启用网络(例如未开启完全访问) KBNetworkErrorInvalidURL = 2, KBNetworkErrorInvalidResponse = 3, KBNetworkErrorDecodeFailed = 4, }; /// 简单的 JSON 回调:json 为 NSDictionary/NSArray 或者在非 JSON 情况下返回 NSData typedef void(^KBNetworkCompletion)(id _Nullable jsonOrData, NSURLResponse * _Nullable response, NSError * _Nullable error); @interface KBNetworkManager : NSObject /// 单例 + (instancetype)shared; /// 是否允许网络(默认为 NO,宿主在合适时机置 YES) @property (atomic, assign, getter=isEnabled) BOOL enabled; /// 可选的基础域名,例如 https://api.example.com @property (nonatomic, strong, nullable) NSURL *baseURL; /// 全局默认请求头(每次请求会与局部 headers 合并,局部优先) @property (nonatomic, copy) NSDictionary *defaultHeaders; /// 超时时间(默认 10s) @property (nonatomic, assign) NSTimeInterval timeout; /// GET 请求,parameters 会拼到 URL 上 - (nullable NSURLSessionDataTask *)GET:(NSString *)path parameters:(nullable NSDictionary *)parameters headers:(nullable NSDictionary *)headers completion:(KBNetworkCompletion)completion; /// POST JSON 请求,jsonBody 会以 application/json 发送 - (nullable NSURLSessionDataTask *)POST:(NSString *)path jsonBody:(nullable id)jsonBody headers:(nullable NSDictionary *)headers completion:(KBNetworkCompletion)completion; @end NS_ASSUME_NONNULL_END