使用 SDK
RPC 相關(guān)模塊為 APMobileNetwork.framework、MPMgsAdapter,推薦使用 MPMgsAdapter 中的接口。
本文引導您通過以下步驟使用移動網(wǎng)關(guān) SDK:
初始化網(wǎng)關(guān)服務(wù)
調(diào)用以下方法初始化網(wǎng)關(guān)服務(wù):
[MPRpcInterface initRpc];
舊版本升級注意事項
10.1.32 版本之后不再需要添加 DTRpcInterface
類的 Category
文件,中間層會實現(xiàn)包裝從 meta.config
中讀取,升級版本后請檢查工程中是否存在舊版本配置,如果有請移除。下面為新版本應(yīng)移除的 DTRpcInterface
類的 Category
文件。
生成 RPC 代碼
當 App 在移動網(wǎng)關(guān)控制臺接入后臺服務(wù)后,即可下載客戶端的 RPC 代碼。更多信息請參考 生成代碼。
下載的 RPC 代碼結(jié)構(gòu)如下:
其中:
RPCDemoCloudpay_accountClient
為 RPC 配置。RPCDemoAuthLoginPostReq
為 request 模型。RPCDemoLoginResult
為 response 模型。
發(fā)送請求
RPC 請求必須在子線程調(diào)用,可使用中間層中 MPRpcInterface
封裝的子線程調(diào)用接口,回調(diào)方法默認為主線程。示例代碼如下:
- (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
捕獲異常;當網(wǎng)關(guān)異常時會拋出,根據(jù) 網(wǎng)關(guān)結(jié)果碼說明 查詢原因。
請求自定義配置
DTRpcMethod
為 RPC 請求方法描述,記錄 RPC 請求的方法名、參數(shù)、返回類型等信息。
如果發(fā)送請求時,不需要加簽,可以將
DTRpcMethod
的signCheck
屬性設(shè)置為 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:@[ ]]; }
如果需要設(shè)置超時時間,可以配置
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; // 這個超時時間是客戶端收到網(wǎng)關(guān)返回的時間,服務(wù)端配置的超時時間是后端業(yè)務(wù)系統(tǒng)的返回時間;默認 20s,設(shè)置小于 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,可以參考下方攔截器的使用,采用攔截器的方式實現(xiàn)。具體實現(xiàn)方法請參考移動網(wǎng)關(guān) 代碼示例。
checkLogin
屬性為接口session
校驗使用,需要配合網(wǎng)關(guān)控制臺完成,默認設(shè)置為 NO 即可。
自定義 RPC 攔截器
基于業(yè)務(wù)需求,可能需要在 RPC 發(fā)送前,或 RPC 處理完成后進行相關(guān)邏輯處理,RPC 模塊提供攔截器機制處理此類需求。
自定義攔截器
創(chuàng)建攔截器,并實現(xiàn) <DTRpcInterceptor>
協(xié)議的方法,用來處理 RPC 請求前后的相關(guān)操作。
@interface HXRpcInterceptor : NSObject<DTRpcInterceptor>
@end
@implementation HXRpcInterceptor
- (DTRpcOperation *)beforeRpcOperation:(DTRpcOperation *)operation{
// TODO
return operation;
}
- (DTRpcOperation *)afterRpcOperation:(DTRpcOperation *)operation{
// TODO
return operation;
}
@end
注冊攔截器
您可通過調(diào)用中間層的擴展接口,在攔截器容器中注冊自定義的子攔截器。
HXRpcInterceptor *mpTestIntercaptor = [[HXRpcInterceptor alloc] init]; // 自定義子攔截器
[MPRpcInterface addRpcInterceptor:mpTestIntercaptor];
數(shù)據(jù)加密
RPC 提供多種數(shù)據(jù)加密配置功能,詳情參考 數(shù)據(jù)加密。
數(shù)據(jù)簽名(10.2.3 支持)
10.2.3 基線 RPC 提供多種數(shù)據(jù)簽名配置功能。10.2.3 基線升級了無線保鏢SDK,支持國密簽名,升級后使用本基線需要更換無線保鏢圖片為 V6 版本。
10.1.68 基線默認為 V5 版本,請按照下列步驟使用插件生成 V6 圖片,并替換工程中原有的 yw_1222.jpg
無線保鏢圖片。
安裝 mPaaS 命令行工具(命令行工具包在了插件安裝中,去除 Xcode 簽名可設(shè)置 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 參數(shù)說明請?zhí)鎿Q成實際值。
如需無線保鏢支持國密功能,請按照下面代碼配置 category 代碼設(shè)置簽名算法,默認不配置時是 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