RPC 相关模块为 APMobileNetwork.framework、MPMgsAdapter,推荐使用 MPMgsAdapter 中的接口。
本文引导您通过以下步骤使用移动网关 SDK:
初始化网关服务
调用以下方法初始化网关服务:
[MPRpcInterface initRpc];
旧版本升级注意事项
10.1.32 版本之后不再需要添加 DTRpcInterface
类的 Category
文件,中间层会实现包装从 meta.config
中读取,升级版本后请检查工程中是否存在旧版本配置,如果有请移除。下面为新版本应移除的 DTRpcInterface
类的 Category
文件。
生成 RPC 代码
当 App 在移动网关控制台接入后台服务后,即可下载客户端的 RPC 代码。更多信息请参考 生成代码。
下载的 RPC 代码结构如下:
其中:
RPCDemoCloudpay_accountClient
为 RPC 配置。RPCDemoAuthLoginPostReq
为 request 模型。RPCDemoLoginResult
为 response 模型。
发送请求
RPC 请求必须在子线程调用,可使用中间层中 MPRpcInterface
封装的子线程调用接口,回调方法默认为主线程。示例代码如下:
- (void)sendRpc
{
__block RPCDemoLoginResult *result = nil;
[MPRpcInterface callAsyncBlock:^{
@try
{
RPCDemoLoginRequest *req = [[RPCDemoLoginRequest alloc] init];
req.loginId = @"alipayAdmin";
req.loginPassword = @"123456";
RPCDemoAuthLoginPostReq *loginPostReq = [[RPCDemoAuthLoginPostReq alloc] init];
loginPostReq._requestBody = req;
RPCDemoCloudpay_accountClient *service = [[RPCDemoCloudpay_accountClient alloc] init];
result = [service authLoginPost:loginPostReq];
}
@catch (NSException *exception) {
NSLog(@"%@", exception);
NSError *error = [userInfo objectForKey:@"kDTRpcErrorCauseError"]; // 获取异常详细信息
NSInteger code = error.code; // 获取异常详细信息错误码
}
} completion:^{
NSString *str = @"";
if (result && result.success) {
str = @"登录成功";
} else {
str = @"登录失败";
}
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:str message:nil delegate:nil
cancelButtonTitle:nil otherButtonTitles:@"ok", nil];
[alert show];
}];
}
要使用 try catch
捕获异常;当网关异常时会抛出,根据 网关结果码说明 查询原因。
请求自定义配置
DTRpcMethod
为 RPC 请求方法描述,记录 RPC 请求的方法名、参数、返回类型等信息。
如果发送请求时,不需要加签,可以将
DTRpcMethod
的signCheck
属性设置为 NO。-(MPDemoUserInfo *) dataPostSetTimeout:(MPDemoPostPostReq *)requestParam { DTRpcMethod *method = [[DTRpcMethod alloc] init]; method.operationType = @"com.antcloud.request.post"; method.checkLogin = NO ; method.signCheck = NO ; method.returnType = @"@\"MPDemoUserInfo\""; return [[DTRpcClient defaultClient] executeMethod:method params:@[ ]]; }
如果需要设置超时时间,可以配置
DTRpcMethod
的timeoutInterval
属性。-(MPDemoUserInfo *) dataPostSetTimeout:(MPDemoPostPostReq *)requestParam { DTRpcMethod *method = [[DTRpcMethod alloc] init]; method.operationType = @"com.antcloud.request.post"; method.checkLogin = NO ; method.signCheck = YES ; method.timeoutInterval = 1; // 这个超时时间是客户端收到网关返回的时间,服务端配置的超时时间是后端业务系统的返回时间;默认 20s,设置小于 1 时无效即为默认值 method.returnType = @"@\"MPDemoUserInfo\""; return [[DTRpcClient defaultClient] executeMethod:method params:@[ ]]; }
如果需要为接口添加 Header,可以使用下面
DTRpcClient
的扩展方法。-(MPDemoUserInfo *) dataPostAddHeader:(MPDemoPostPostReq *)requestParam { DTRpcMethod *method = [[DTRpcMethod alloc] init]; method.operationType = @"com.antcloud.request.postAddHeader"; method.checkLogin = NO ; method.signCheck = YES ; method.returnType = @"@\"MPDemoUserInfo\""; // 针对接口添加 header NSDictionary *customHeader = @{@"testKey": @"testValue"}; return [[DTRpcClient defaultClient] executeMethod:method params:@[ ] requestHeaderField:customHeader responseHeaderFields:nil]; }
如果需要为所有接口添加 Header,可以参考下方拦截器的使用,采用拦截器的方式实现。具体实现方法请参考移动网关 代码示例。
checkLogin
属性为接口session
校验使用,需要配合网关控制台完成,默认设置为 NO 即可。
自定义 RPC 拦截器
基于业务需求,可能需要在 RPC 发送前,或 RPC 处理完成后进行相关逻辑处理,RPC 模块提供拦截器机制处理此类需求。
自定义拦截器
创建拦截器,并实现 <DTRpcInterceptor>
协议的方法,用来处理 RPC 请求前后的相关操作。
@interface HXRpcInterceptor : NSObject<DTRpcInterceptor>
@end
@implementation HXRpcInterceptor
- (DTRpcOperation *)beforeRpcOperation:(DTRpcOperation *)operation{
// TODO
return operation;
}
- (DTRpcOperation *)afterRpcOperation:(DTRpcOperation *)operation{
// TODO
return operation;
}
@end
注册拦截器
您可通过调用中间层的扩展接口,在拦截器容器中注册自定义的子拦截器。
HXRpcInterceptor *mpTestIntercaptor = [[HXRpcInterceptor alloc] init]; // 自定义子拦截器
[MPRpcInterface addRpcInterceptor:mpTestIntercaptor];
数据加密
RPC 提供多种数据加密配置功能,详情参考 数据加密。
数据签名(10.2.3 支持)
10.2.3 基线 RPC 提供多种数据签名配置功能。10.2.3 基线升级了无线保镖SDK,支持国密签名,升级后使用本基线需要更换无线保镖图片为 V6 版本。
10.1.68 基线默认为 V5 版本,请按照下列步骤使用插件生成 V6 图片,并替换工程中原有的 yw_1222.jpg
无线保镖图片。
安装 mPaaS 命令行工具(命令行工具包在了插件安装中,去除 Xcode 签名可设置 N)。
使用下列命令行,生成新的无线保镖图片。
mpaas inst sgimage -c /path/to/Ant-mpaas-0D4F511111111-default-IOS.config -V 6 -t 1 -o /path/to/output --app-secret sssssdderrff --verbose
说明其中 config 文件目录、目标文件目录、appsecret 参数说明请替换成实际值。
如需无线保镖支持国密功能,请按照下面代码配置 category 代码设置签名算法,默认不配置时是 MPAASRPCSignTypeDefault,签名算法为 MD5。
签名算法可选值如下:
MD5:MPAASRPCSignTypeDefault(默认)
SHA256:MPAASRPCSignTypeSHA256
HMACSHA256:MPAASRPCSignTypeHMACSHA256
SM3:MPAASRPCSignTypeSM3
代码示例:
#import <APMobileNetwork/DTRpcInterface.h> @interface DTRpcInterface (mPaaSDemo) @end @implementation DTRpcInterface (mPaaSDemo) - (MPAASRPCSignType)customRPCSignType { return MPAASRPCSignTypeSM3; } @end