移动调度中心在 10.1.68 及以上版本基线中提供支持。本文介绍移动调度中心接入 iOS 的方法。

接入 SDK

根据您采用的接入方式,请选择相应的接入方法。

接入方法

接入移动开发平台 mPaaS 的方式主要有以下 3 种:

基于 mPaaS 框架接入

mPaaS iOS 框架是源自支付宝客户端的开发框架。该框架直接接管应用的生命周期,负责整个应用 启动托管应用生命周期管理。同时基于 Framework 的设计思想,将业务隔离成相对独立的模块,着力于追求模块之间的高內聚、低耦合。参考 mPaaS 框架介绍 获取更多信息。

您可以快速搭建一个基于 mPaaS 框架的全新应用,具体步骤参考 基于 mPaaS 框架接入

基于已有工程且使用 mPaaS 插件接入

若当前已有工程为一个单工程,所有 SDK 直接链接到此工程中,推荐您使用 mPaaS 插件接入,具体步骤参考 基于已有工程且使用 mPaaS 插件接入

基于已有工程且使用 CocoaPods 接入

若当前已有工程通过 Cocoapods 来管理 SDK 的依赖,推荐您使用 Cocoapods 接入,具体步骤参考 基于已有工程且使用 CocoaPods 接入

组件接入

  • 使用 mPaaSPlugin 接入 mPaaS。

    1. 点击 Xcode 菜单项 Editor mPaaS 编辑工程,打开编辑工程页面。

    2. 选择 移动调度,保存后点击 开始编辑,即可在模块列表里添加移动调度模块。image.png

  • 使用 Cocopods 接入 mPaaS。

    1. 在 Podfile 文件中添加 mPaaS_pod 'mPaaS_MDC'

    2. 在终端(terminal)执行 pod install 即可完成接入。

使用 SDK

参数配置

重写 MPNetworkInterfacecategory 配置。

  • Port 开关:是否使用移动调度中心下发的 Port,默认关闭。

  • 备用 IP:移动调度中心请求地址的备用 IP,默认 nil。

  • 域名分组:控制台配置的域名分组,默认值为 nil。

  • 域名列表:控制台配置的域名列表,默认值为 nil。

// 移动调度中心 Port开关
- (BOOL)useMdcPort {
    return NO;
}

// 备用IP,默认值为nil
- (NSString *)amdcBackupIp
{
    return @"192.168.1.1";
}

// 控制台配置的域名分组。默认值为nil
- (NSString *)amdcDomainGroup
{
    return @"test";
}

// 控制台配置的域名列表,默认值为nil
- (NSArray *)amdcDomainList
{
    return @[@"www.test.com"];
}

接口文档

初始化

初始化移动调度中心,并刷新数据。

  • 初始化操作只应执行一次,若在控制台修改了域名 IP 信息,或者在客户端修改了配置,请调用刷新数据的方法 initServiceWithDelegate

  • 若未初始化移动调度中心,则其他接口无法使用。

/// 初始化
+ (void)initServiceWithDelegate:(id<MPDNSNetworkDelegate>)delegate;

MPDNSNetworkDelegate 回调

// code为RPC响应码,1000表示成功
- (void)didDNSNetworkInfoRefresh:(int)code;

刷新数据

刷新域名IP信息

/// 刷新数据
+ (void)refresh;

获取全部 IP 信息

获取移动调度中心返回的全部域名 IP 信息。

/// 获取全部IP信息
+ (NSArray<MPDNSNetworkInfo *> *)getNetworkInfoList;

获取单个域名的 IP 信息

返回单个域名对应的 IP 信息。

/// 获取单个域名的IP信息
/// @param host 域名
+ (MPDNSNetworkInfo *)getNetworkInfoByHost:(NSString *)host;

返回结果说明

MPDNSNetworkInfo

@interface MPDNSNetworkInfo : NSObject

/// 域名
@property (nonatomic, copy) NSString *host;
/// cname
@property (nonatomic, copy) NSString *cname;
/// IP信息列表
@property (nonatomic, copy) NSArray<MPDNSNetworkIP *> *ipList;

@end

MPDNSNetworkIP

@interface MPDNSNetworkIP : NSObject

/// IP地址
@property (nonatomic, copy) NSString *ip;
/// IP端口
@property (nonatomic, assign) NSInteger port;
/// IP类型(4:IPv4 6:IPv6)
@property (nonatomic, assign) NSInteger ipType;

@end

MPMDCNetworkInfo

// IP地址
@property (nonatomic, copy) NSString *ip;
// IP端口
@property (nonatomic, copy) NSNumber *port;
// 移动调度中心时间戳
@property (nonatomic, copy) NSString *timestamp;

代码示例

#import <MPMDC/MPMDC.h>

// 初始化移动调度中心,只会执行一次
[MPDNSNetworkService initServiceWithDelegate:nil];

// 刷新移动调度中心,若用户在控制台修改IP或者在客户端修改配置,需手动执行刷新操作
[MPDNSNetworkService refresh];

RPC接入

RPC 接入移动调度中心需要配置开关,通过重写 DTRpcInterfacecategory 来配置

  • 移动调度中心开关:是否启用移动调度中心,开启该配置后仍然需要手动调用移动调度中心初始化方法。默认关闭。

  • IPv6 开关:是否使用移动调度中心返回的 IPv6 地址发起请求,开启该配置后,优先使用 IPv6 地址发起请求。默认关闭。

  • Port 开关:是否使用移动调度中心下发的 Port。

// 移动调度中心开关
- (BOOL)isHTTPDNS {
    return YES;
}

// IPv6 开关
- (BOOL)ipv6Enabled {
    return NO;
}

// 移动调度中心 Port 开关
- (BOOL)useMdcPort {
    return NO;
}
说明
  • RPC 内部不会自动初始化移动调度中心,需要用户手动调用移动调度中心的初始化方法才可以正常使用。

  • RPC 单次请求内部不会重试,需要用户重新请求才会切换到下一个 IP。