全部產品
Search
文件中心

Mobile Platform as a Service:使用 SDK

更新時間:Jul 13, 2024

RPC 相關模組為 APMobileNetwork.framework、MPMgsAdapter,推薦使用 MPMgsAdapter 中的介面。

本文引導您通過以下步驟使用移動網關 SDK:

  1. 初始化網關服務

  2. 產生 RPC 代碼

  3. 發送請求

  4. 請求自訂配置

  5. 自訂 RPC 攔截器

  6. 資料加密

  7. 資料簽名

初始化網關服務

調用以下方法初始化網關服務:

[MPRpcInterface initRpc];

舊版本升級注意事項

10.1.32 版本之後不再需要添加 DTRpcInterface類的 Category檔案,中介層會實現封裝從 meta.config中讀取,升級版本後請檢查工程中是否存在舊版本配置,如果有請移除。下面為新版本應移除的 DTRpcInterface類的 Category檔案。

gateway

產生 RPC 代碼

當 App 在移動網關控制台接入後台服務後,即可下載用戶端的 RPC 代碼。更多資訊請參考 產生代碼

下載的 RPC 代碼結構如下:

code structure

其中:

  • 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無線保鏢圖片。

  1. 安裝 mPaaS 命令列工具(命令列工具包在了外掛程式安裝中,去除 Xcode 簽名可設定 N)。

  2. 使用下列命令列,產生新的無線保鏢圖片。

    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 參數說明請替換成實際值。

  3. 如需無線保鏢支援國密功能,請按照下面代碼配置 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

相關連結