全部产品
云市场
云游戏

使用 SDK

更新时间:2020-07-10 11:56:36

重要:自 2020 年 6 月 28 日起,mPaaS 停止维护 10.1.32 基线。请使用 10.1.6810.1.60 系列基线。可以参考 mPaaS 10.1.68 升级指南mPaaS 10.1.60 升级指南 进行基线版本升级。

RPC 相关模块为 APMobileNetwork.frameworkMPMgsAdapter,推荐使用 MPMgsAdapter 中的接口。

本文引导您通过以下步骤使用移动网关 SDK:

  1. 初始化网关服务
  2. 生成 RPC 代码
  3. 发送请求
  4. 请求自定义配置
  5. 自定义 RPC 拦截器
  6. 数据加密

初始化网关服务

调用以下方法初始化网关服务:

  1. [MPRpcInterface initRpc];

旧版本升级注意事项

10.1.32 版本之后不再需要添加 DTRpcInterface 类的 Category 文件,中间层会实现包装从 meta.config 中读取,升级版本后请检查工程中是否存在旧版本配置,如果有请移除。下面为新版本应移除的 DTRpcInterface 类的 Category 文件。

gateway

生成 RPC 代码

当 App 在移动网关控制台接入后台服务后,即可下载客户端的 RPC 代码。更多信息请参考 生成代码

generate code

下载的 RPC 代码结构如下:

code structure

其中:

  • RPCDemoCloudpay_accountClient 为 RPC 配置。
  • RPCDemoAuthLoginPostReq 为 request 模型。
  • RPCDemoLoginResult 为 response 模型。

发送请求

RPC 请求必须在子线程调用,可使用中间层中 MPRpcInterface 封装的子线程调用接口,回调方法默认为主线程。示例代码如下:

  1. - (void)sendRpc
  2. {
  3. __block RPCDemoLoginResult *result = nil;
  4. [MPRpcInterface callAsyncBlock:^{
  5. @try
  6. {
  7. RPCDemoLoginRequest *req = [[RPCDemoLoginRequest alloc] init];
  8. req.loginId = @"alipayAdmin";
  9. req.loginPassword = @"123456";
  10. RPCDemoAuthLoginPostReq *loginPostReq = [[RPCDemoAuthLoginPostReq alloc] init];
  11. loginPostReq._requestBody = req;
  12. RPCDemoCloudpay_accountClient *service = [[RPCDemoCloudpay_accountClient alloc] init];
  13. result = [service authLoginPost:loginPostReq];
  14. }
  15. @catch (NSException *exception) {
  16. NSLog(@"%@", exception);
  17. NSError *error = [userInfo objectForKey:@"kDTRpcErrorCauseError"]; // 获取异常详细信息
  18. NSInteger code = error.code; // 获取异常详细信息错误码
  19. }
  20. } completion:^{
  21. NSString *str = @"";
  22. if (result && result.success) {
  23. str = @"登录成功";
  24. } else {
  25. str = @"登录失败";
  26. }
  27. UIAlertView *alert = [[UIAlertView alloc] initWithTitle:str message:nil delegate:nil
  28. cancelButtonTitle:nil otherButtonTitles:@"ok", nil];
  29. [alert show];
  30. }];
  31. }
说明:要使用 try catch 捕获异常;当网关异常时会抛出,根据 结果码 查询原因。

请求自定义配置

DTRpcMethod 为 RPC 请求方法描述,记录 RPC 请求的方法名、参数、返回类型等信息。

  • 如果发送请求时,不需要加签,可以将 DTRpcMethodsignCheck 属性设置为 NO。

    1. -(MPDemoUserInfo *) dataPostSetTimeout:(MPDemoPostPostReq *)requestParam
    2. {
    3. DTRpcMethod *method = [[DTRpcMethod alloc] init];
    4. method.operationType = @"com.antcloud.request.post";
    5. method.checkLogin = NO ;
    6. method.signCheck = NO ;
    7. method.returnType = @"@\"MPDemoUserInfo\"";
    8. return [[DTRpcClient defaultClient] executeMethod:method params:@[ ]];
    9. }
  • 如果需要设置超时时间,可以配置 DTRpcMethodtimeoutInterval 属性。

    1. -(MPDemoUserInfo *) dataPostSetTimeout:(MPDemoPostPostReq *)requestParam
    2. {
    3. DTRpcMethod *method = [[DTRpcMethod alloc] init];
    4. method.operationType = @"com.antcloud.request.post";
    5. method.checkLogin = NO ;
    6. method.signCheck = YES ;
    7. method.timeoutInterval = 1; // 这个超时时间是客户端收到网关返回的时间,服务端配置的超时时间是后端业务系统的返回时间;默认 20s,设置小于 1 时无效即为默认值
    8. method.returnType = @"@\"MPDemoUserInfo\"";
    9. return [[DTRpcClient defaultClient] executeMethod:method params:@[ ]];
    10. }
  • 如果需要为接口添加 Header,可以使用下面 DTRpcClient 的扩展方法。

    1. -(MPDemoUserInfo *) dataPostAddHeader:(MPDemoPostPostReq *)requestParam
    2. {
    3. DTRpcMethod *method = [[DTRpcMethod alloc] init];
    4. method.operationType = @"com.antcloud.request.postAddHeader";
    5. method.checkLogin = NO ;
    6. method.signCheck = YES ;
    7. method.returnType = @"@\"MPDemoUserInfo\"";
    8. // 针对接口添加 header
    9. NSDictionary *customHeader = @{@"testKey": @"testValue"};
    10. return [[DTRpcClient defaultClient] executeMethod:method params:@[ ] requestHeaderField:customHeader responseHeaderFields:nil];
    11. }
  • 如果需要为所有接口添加 Header,可以参考下方 拦截器 的使用,采用拦截器的方式实现。具体实现方法请参考移动网关 代码示例
  • checkLogin 属性为接口 session 校验使用,需要配合网关控制台完成,默认设置为 NO 即可。

自定义 RPC 拦截器

基于业务需求,可能需要在 RPC 发送前,或 RPC 处理完成后进行相关逻辑处理,RPC 模块提供拦截器机制处理此类需求。

自定义拦截器

创建拦截器,并实现 <DTRpcInterceptor> 协议的方法,用来处理 RPC 请求前后的相关操作。

  1. @interface HXRpcInterceptor : NSObject<DTRpcInterceptor>
  2. @end
  3. @implementation HXRpcInterceptor
  4. - (DTRpcOperation *)beforeRpcOperation:(DTRpcOperation *)operation{
  5. // TODO
  6. return operation;
  7. }
  8. - (DTRpcOperation *)afterRpcOperation:(DTRpcOperation *)operation{
  9. // TODO
  10. return operation;
  11. }
  12. @end

注册拦截器

您可通过调用中间层的扩展接口,在拦截器容器中注册自定义的子拦截器。

  1. HXRpcInterceptor *mpTestIntercaptor = [[HXRpcInterceptor alloc] init]; // 自定义子拦截器
  2. [MPRpcInterface addRpcInterceptor:mpTestIntercaptor];

数据加密

RPC 提供多种数据加密配置功能,详情参考 数据加密配置

相关链接