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