BBASMPlugin+Network.h 7.42 KB
//
//  BBASMPlugin+Network.h
//  SWAN
//
//  Created by baidu on 2017/11/28.
//  Copyright © 2017年 baidu. All rights reserved.
//

#import "BBASMPlugin.h"
extern NSString * const BBASMNetworkModule;
extern NSString * const ProgressJSCallBackKey;
extern NSString * const CompleteJSCallBackKey;
extern int const kBBASM_UNKNOWN_CONTENT_LENGTH;
// 前端将arraybuffer base64编码通过key 传入端 端解码之后再存到key data中
// data 数据类型 'arrayBuffer'、'base64'、'jsonString'
extern NSString *const BBASMPluginNetworkRequestDataTypeKey;
// 请求的data数据类型为base64
extern NSString *const BBASMPluginNetworkRequestDataTypeBase64;
// 请求的data数据类型为arrayBuffer
extern NSString *const BBASMPluginNetworkRequestDataTypeArrayBuffer;
// 请求的data数据类型为前端序列化后的string(保证三端序列化结果一致)
extern NSString *const BBASMPluginNetworkRequestDataTypeJSONToString;
// arrayBuffer data 超过10MB
extern NSString *const BBASMPluginNetworkRequestArrayBufferSizeLimitError;

@interface BBASMPlugin (Network)

/**
 * 描  述: 发起网络请求
 * 示  例: baiduboxapp://swanAPI/request?params={"url":"https://feed.baidu.com/feed/api/getdislike?id=001&type=news","method":"POST","data":{"abc":"111"},"dataType":"json","cb":"_bdbox_pjs_884"}&callback=_bdbox_js_332&upgrade=0&oauthType=swan
 * 文  档: http://ft.baidu.com/#/scheme/swan_request
 * 备  注:
 * ********** description ************
 * @name:      request
 * @authority: swanAPI
 * @path:      /request
 * @args:      [{"name": "url", "value": "string"}, {"name": "data", "value": "string|object="}, {"name": "header", "value": "object="}, {"name": "method", "value": "string="}, {"name": "__requestDataType__", "value": "string="}, {"name": "dataType", "value": "string="}, {"name": "responseType", "value": "string="}, {"name": "ping", "value": "boolean="}, {"name": "cb", "value": "string"}, {"name": "ext", "value": "object="}, {"name": "__plugin__", "value": "string="}, {"name":"cloudCache","value":"boolean|object="}]
 * @config:    {"swan": {"web": {"invoke": "swan.message.url", "handler": "bridge"}, "jsc": {"invoke": "swan.method.json", "method": "_naSwan.bridge.networkBridge.request"}}}
 */
- (void)request:(BBASchemeDispatcher *)dispatcher;

/**
 * 描  述: 将本地资源上传到指定服务器
 * 示  例: baiduboxapp://swanAPI/uploadFile?params=%7B%22name%22%3A%22file%22%2C%22header%22%3A%7B%22Cache-Control%22%3A%22no-cache%22%2C%22x-baiduboxapp%22%3A%22demo%22%7D%2C%22formData%22%3A%7B%22user%22%3A%22test%22%7D%2C%22url%22%3A%22http%3A%2F%2Fhz01-plattech-rdqa02.hz01.baidu.com%3A8964%2Ftest_upload.php%22%2C%22filePath%22%3A%22bdfile%3A%2F%2Ftmp_123%22%2C%22onProgressUpdate%22%3A%22_onProgressUpdate_0219%22%2C%22cb%22%3A%22_uploadTask_cb_0219%22%7D&callback=_bdbox_js_979&upgrade=0
 * 文  档: http://ft.baidu.com/#/scheme/swan_uploadfile
 * 备  注:
 * ********** description ************
 * @name:      uploadFile
 * @authority: swanAPI
 * @path:      /uploadFile
 * @args:      [{"name": "url", "value": "string"}, {"name": "header", "value": "object="}, {"name": "filePath", "value": "string"}, {"name": "formData", "value": "object="}, {"name": "name", "value": "string"}, {"name": "onProgressUpdate", "value": "string"}, {"name": "cb", "value": "string"}, {"name": "__plugin__", "value": "string="}, {"name": "headersReceivedEvent", "value": "string="}]
 * @config:    {"swan": {"web": {"invoke": "swan.message.url", "handler": "bridge"}, "jsc": {"invoke": "swan.method.url", "method": "_naSwan.bridge.postMessage"}}}
 */
- (void)uploadFile:(BBASchemeDispatcher *)dispatcher;

/**
 * 描  述: 下载指定资源到本地
 * 示  例: baiduboxapp://swanAPI/downloadFile?params=%7B%22header%22%3A%7B%22Cache-Control%22%3A%22no-cache%22%2C%22x-baiduboxapp%22%3A%22demo%22%7D%2C%22url%22%3A%22http%3A%2F%2Fcp01-qa-lvyou-001.cp01.baidu.com%3A8080%2Fstatic%2Fjssdk-test%2Foutput.zip%22%2C%22onProgressUpdate%22%3A%22_onProgressUpdate_1521371871084%22%2C%22cb%22%3A%22_filetask_cb_%22%7D&callback=_bdbox_js_569&upgrade=0
 * 文  档: http://ft.baidu.com/#/scheme/swan_downloadfile
 * 备  注:
 * ********** description ************
 * @name:      downloadFile
 * @authority: swanAPI
 * @path:      /downloadFile
 * @args:      [{"name": "url", "value": "string"}, {"name": "filePath", "value": "string="}, {"name": "header", "value": "object="}, {"name": "onProgressUpdate", "value": "string"}, {"name": "cb", "value": "string"}, {"name": "filePath", "value": "string="}, {"name": "__plugin__", "value": "string="}, {"name": "headersReceivedEvent", "value": "string="}]
 * @config:    {"swan": {"web": {"invoke": "swan.message.url", "handler": "bridge"}, "jsc": {"invoke": "swan.method.url", "method": "_naSwan.bridge.postMessage"}}}
 */
- (void)downloadFile:(BBASchemeDispatcher *)dispatcher;

/**
 * 描  述: 网络状态改变通知
 * 示  例: baiduboxapp://swanAPI/networkStatusChange?params={"cb":"_bdbox_js_255"}&callback=_bdbox_js_238&upgrade=0
 * 文  档: http://ft.baidu.com/#/scheme/swan_networkstatuschange
 * 备  注: 小程序注册一个二级回调, 生命周期与小程序相同. 当网络状态变化时执行回调并不注销, 可多次执行.
 * ********** description ************
 * @name:      onNetworkStatusChange
 * @authority: swanAPI
 * @path:      /networkStatusChange
 * @args:      [{"name": "cb", "value": "string"}]
 * @config:    {"swan": {"web": {"invoke": "swan.message.url", "handler": "bridge"}, "jsc": {"invoke": "swan.method.json", "method": "_naSwan.bridge.networkBridge.networkStatusChange"}}}
 */
- (void)networkStatusChange:(BBASchemeDispatcher *)dispatcher;

/**
 * 描  述: 获取网络类型
 * 示  例: baiduboxapp://swanAPI/getNetworkType?callback=_bdbox_js_742&upgrade=0&oauthType=swan
 * 文  档: http://ft.baidu.com/#/scheme/utils_getnetworktype
 * 备  注:
 * ********** description ************
 * @name:      getNetworkType
 * @authority: swanAPI
 * @path:      /getNetworkType
 * @args:      []
 * @config:    {"swan": {"web": {"invoke": "swan.message.url", "handler": "bridge"}, "jsc": {"invoke": "swan.method.json", "method": "_naSwan.bridge.networkBridge.getNetworkType"}}}
 */
- (void)getNetworkType:(BBASchemeDispatcher *)command;

/**
 * 描  述: 中断请求scheme
 * 示  例: baiduboxapp://swanAPI/cancelRequest?params=\$params&callback=\$callback
 * 文  档: http://ft.baidu.com/#/scheme/swan_cancelrequest
 * 备  注:
 * ********** description ************
 * @name:      cancelRequest
 * @authority: swanAPI
 * @path:      /cancelRequest
 * @args:      [{"name": "cancelTag", "value": "string="}, {"name": "taskIdentifier", "value": "string="}]
 * @config:    {"swan": {"web": {"invoke": "swan.message.url", "handler": "bridge"}, "jsc": {"invoke": "swan.method.url", "method": "_naSwan.bridge.postMessage"}}}
 */
- (void)cancelRequest:(BBASchemeDispatcher*)dispatcher;

#pragma mark - not API

+ (NSDictionary *)getNetworkTypeWithAppID:(NSString *)appId;

+ (NSDictionary *)networkStatusChangeWithAppID:(NSString *)appId
                                        params:(NSDictionary *)params
                                        completion:(void (^)(NSDictionary *status))completion;

/**
 * @brief 发起网络请求
 * @param appId 小程序appId
 * @param params 端能力参数
 * @param completion 异步callback
 * @return NSDictionay 调用结果
 */
+ (NSDictionary *)requestWithAppID:(NSString *)appId
                            params:(NSDictionary *)params
                        completion:(void (^)(NSDictionary *status))completion;
@end