






target 'XXX' dopod 'MpAccSDK', :podspec => 'https://mpspeedr-online-1258344699.cos.ap-guangzhou.myqcloud.com/go/ios/2.9.8.0/MpAccSDK.podspec'end



target 'XXX' dopod 'MpAccSDK', :podspec => 'https://mpspeedr-online-1258344699.cos.ap-guangzhou.myqcloud.com/go/ios/2.9.8.0/MpAccSDK.podspec'end


class VPNViewController: UIViewController {override func viewDidLoad() {super.viewDidLoad()// 如果是单vpn模式SDK,则不需要配置该参数MpAccClient.shared.accType = .vpn// 设备接入和应用接入只需设置其一即可// 按设备接入MpAccClient.shared.setupDatakey(datakey: "xxxxx",deviceId: "xxxxx")// 按应用接入// MpAccClient.shared.setSign(appId:"xxx", sign:"xxx")// 注册回调MpAccClient.shared.registerAccCallback(self)// 尝试恢复VPNMpAccClient.shared.resumeVpn()}//启动加速func startAcc() {let config = AccConfig()config.accMode = .Redundant // 加速模式 1:聚合 2:双发 3:rtcconfig.pingInterval = 2config.groupId = "com.xxxx" // AppGroupconfig.vpnName = "XXXXXX" // VPN名称// 启动VPNMpAccClient.shared.start(config: config)}//停止加速func stopAcc() {MpAccClient.shared.stop()}}extension VPNViewController: AccCallback {func onAccSuccess(ip: String, port: Int) -> Void { }func onAccFail(_ error: NSError?) -> Void { }func onAccDataUpdate(tRx: Int64, tTx: Int64, pathDetails: [MpPathDetail]) -> Void { }func onSummaryInfoUpdate(_ summaryInfo: String) -> Void { }func onNetworkStateChanged(_ type: MpInterfaceType, available: Bool, ip: String) -> Void { }}
@interface ViewController () <AccCallback>@end@implementation ViewController- (void)viewDidLoad {[super viewDidLoad];// 如果是单vpn模式SDK,则不需要配置该参数MpAccClient.shared.accType = AccTypeVpn;// Do any additional setup after loading the view.[MpAccClient.shared registerAccCallback:self];// 设备接入和应用接入只需设置其一即可// 按设备接入[MpAccClient.shared setupDatakey:@"xxxxxxx"deviceId:@"xxxxxxx"];// 按应用接入// MpAccClient.shared.setSign(appId:"xxx", sign:"xxx")[MpAccClient.shared resumeVpn];}- (void)startVpn {AccConfig *config = [AccConfig new];/// 加速模式 1:聚合 2:双发 3:rtcconfig.accMode = AccModeRedundant;config.pingInterval = 2;config.congrestionMode = MpCongrestionModeBBR;config.groupId = @"group.xxxxxxxx";config.vpnName = @"Test_name3";config.whiteList = @[];config.blackList = @[];[MpAccClient.shared startWithConfig:config];}- (void)stopAcc {[MpAccClient.shared stop];}// AccCallback- (void)onAccSuccessWithIp:(NSString *)ip port:(NSInteger)port {}- (void)onAccFail:(NSError *)error {}- (void)onAccDataUpdateWithTRx:(int64_t)tRx tTx:(int64_t)tTx pathDetails:(NSArray<MpPathDetail *> *)pathDetails {}- (void)onSummaryInfoUpdate:(NSString *)summaryInfo {}- (void)onNetworkStateChanged:(enum MpInterfaceType)type available:(BOOL)available ip:(NSString *)ip {}@end
class PacketTunnelProvider: NEPacketTunnelProvider {var tunnelManager: MpPacketTunnelManager = MpPacketTunnelManager()override func startTunnel(options: [String : NSObject]?, completionHandler: @escaping (Error?) -> Void) {//调用SDK的startTunnel方法tunnelManager.startTunnel(packetTunnel: self, options: options, completionHandler: completionHandler);}override func stopTunnel(with reason: NEProviderStopReason, completionHandler: @escaping () -> Void) {//调用SDK的stopTunnel方法tunnelManager.stopTunnel()completionHandler()}override func handleAppMessage(_ messageData: Data, completionHandler: ((Data?) -> Void)?) {//调用SDK的handleAppMessage方法tunnelManager.handleAppMessage(messageData, completionHandler: completionHandler);}}
@interface PacketTunnelProvider() {MpPacketTunnelManager *tunnelManager;}@end@implementation PacketTunnelProvider- (id)init {self = [super init];if (self != NULL) {tunnelManager = [[MpPacketTunnelManager alloc] init];}return self;}- (void)startTunnelWithOptions:(NSDictionary *)options completionHandler:(void (^)(NSError *))completionHandler {//调用SDK的startTunnel方法[tunnelManager startTunnelWithPacketTunnel:self options:options completionHandler:completionHandler];}- (void)stopTunnelWithReason:(NEProviderStopReason)reason completionHandler:(void (^)(void))completionHandler {//调用SDK的stopTunnel方法[tunnelManager stopTunnel];completionHandler();}- (void)handleAppMessage:(NSData *)messageData completionHandler:(void (^)(NSData *))completionHandler {//调用SDK的handleAppMessage方法[tunnelManager handleAppMessage:messageData completionHandler:completionHandler];}@end
import Alamofireclass Socks5ViewController: UIViewController {private var afs: Session = AF// 开始加速func startAcc() {// 加速方式,若单SOCKS5_SDK,则忽MpAccClient.shared.accType = .socks5;let config = AccConfig()config.socksProxyPort = xxx// 启动socks5MpAccClient.shared.start(config: config)}}extension Socks5ViewController: AccCallback {func onAccSuccess(ip: String, port: Int) -> Void {// 需要切流let sessionConfig = URLSessionConfiguration.defaultsessionConfig.connectionProxyDictionary = [kCFStreamPropertySOCKSProxyHost : "127.0.0.1",// config.socksProxyPortkCFStreamPropertySOCKSProxyPort : "xxxxxx",]afs = Session(configuration: sessionConfig)}}
@interface ViewController () <AccCallback>@end@implementation ViewController- (void)startVpn {// 若单SOCKS5_SDK,则忽略该字段MpAccClient.shared.accType = AccTypeSocks5;AccConfig *config = [AccConfig new];// 参数设置[MpAccClient.shared startWithConfig:config];}// AccCallback- (void)onAccSuccessWithIp:(NSString *)ip port:(NSInteger)port {// 需要切流// AFNetworking的设置类似Alamofire}@end
文档反馈