曾志,歐陽承
(惠州學院信息科學技術學院,惠州 516007)
隨著我國經(jīng)濟崛起以及與國際交流日益頻繁,人們對物資與信息流通產(chǎn)生了更大、更多元化、更個性化的需求,快遞服務迎來了飛速的發(fā)展,形成了國際、國內(nèi)與同城三種模式[1]。同城快遞是快遞企業(yè)為處在同一城市不同轄區(qū)的發(fā)件人和收件人所進行的快件收發(fā)活動,是國際快遞和國內(nèi)異地快遞的有力補充。其重點是“同城”,因此更突出配送效率和個性化服務。在當前同城共同配送體系不健全的環(huán)境下,同城快遞主要抓住了用戶對“末端快遞配送”的服務需求點:時效性強、個性化明顯、安全性高和服務靈活??梢源蟠蠊?jié)省收發(fā)快遞的時間,凸顯了App帶來的成本與效率的雙重增長。與一般的快遞App不同[2-4],首先,同城快遞iOS-App使用范圍為同一城市,避免了同一城市快遞分揀而導致隔日遞送的缺點,使得快遞在數(shù)小時內(nèi)完成送達;其次,吸引大眾參與模式,所有經(jīng)過審核認證的人員,均可以參與到派送快件這項工作中來,舉手之勞創(chuàng)造價值。對于參與派件的人員,提出采納支付保證金的方法,同時對發(fā)送的物品進行前后拍照比較認證的方法確??爝f物品的安全。一旦完成交易,系統(tǒng)將自動將費用轉(zhuǎn)入派送員賬戶。綜上,同城快遞iOSApp系統(tǒng)將快遞物流與移動電子商務更加緊密地結合,一方面在于加速物品在同城范圍內(nèi)的遞送,同時也為大眾的參與提供了平臺,解決了“最后一公里”高效快速的快件遞送問題。
“互聯(lián)網(wǎng)+”利用信息通信技術與各行業(yè)的深度融合,為經(jīng)濟社會的創(chuàng)新發(fā)展提供了便捷、高效的解決方案?;贏pp的移動計算技術正在成為實現(xiàn)“互聯(lián)網(wǎng)+”創(chuàng)造新業(yè)務與新服務模式的基礎。同城快遞App采用目前較為新近的技術框架,分析各業(yè)務流程(如圖1所示),完善和添加有利于用戶體驗的模塊,從技術上以及產(chǎn)品上均有一定的創(chuàng)新。
圖1 同城快遞App系統(tǒng)的業(yè)務流程
從系統(tǒng)架構可知,同城快遞iOS-App系統(tǒng)是一款雙App系統(tǒng),包括用戶端與快遞員派送端兩部分。系統(tǒng)iOS客戶端使用Apple官方IDE Xcode,以及蘋果最穩(wěn)定的Objective-C編程語言進行代碼編寫,并用iOS數(shù)據(jù)格式Plist,NSUserdefault單例進行數(shù)據(jù)歸檔,使用AFNetworking與服務器端進行數(shù)據(jù)交互。整個項目采用了MVVM架構,很好地解決Massive View Controller的問題。在該項目中將Controller中的展示邏輯抽取出來,放置到ViewModel。MVVM衍生于MVC,是對MVC的一種演進,它促進了UI代碼與業(yè)務邏輯的分離。它正式規(guī)范了視圖和控制器緊耦合的性質(zhì),并引入新的組件。各組件間的結構關系如圖2所示。
其次,整個項目圖片都采用異步加載保證界面流暢度,在圖片呈現(xiàn)前顯示占位圖,當圖片加載后再予以替換占位圖,加載后的圖片采用緩存機制,亦或多級緩存機制,用以提升客戶端界面的流暢度。此外,界面組件還采用了預排版技術,將每條Cell需要的數(shù)據(jù)都在后臺線程計算并封裝為一個布局對象CellLayout,避免Cell內(nèi)部的重計算,增加了UITableView列表的加載速度,增加了用戶體驗。最后,項目實踐過程采用了全局并發(fā)控制技術,App內(nèi)所有異步操作,包括圖像解碼、對象釋放、異步繪制等,均已按優(yōu)先級放入了全局的serial queue中執(zhí)行,從而避免了過多線程影響計算性能的問題。
依據(jù)同城快遞App系統(tǒng)業(yè)務流程,用戶App前端模塊共包含7大模塊,而快遞員派送端App主要包含接單模塊。用戶App端的幾大模塊描述見圖3所示。用戶首先是注冊、認證與個人信息的完善,接著就是下單、支付、查詢與評價;而快遞員端App主要有接/搶單、派送、簽收幾大功能。以下為iOS-App端所涉及的下單、接單、查詢與支付幾大模塊的實現(xiàn)。
圖3 iOS-App用戶端功能模塊
在用戶注冊并經(jīng)過認證后,用戶就具有發(fā)貨位置,物品信息,包括物品照片,訂單發(fā)布時間,聯(lián)系方式等。用戶在手機端完成訂單的填寫,將數(shù)據(jù)打包成JSON格式傳遞到后臺處理,代碼實現(xiàn)如下:
//用戶下單模塊
- (void)completeInputInfomationWithJSON:(NSDictionary *)json{
AFHTTPSessionManager*manager=[AFHTTPSession?Manager manager];
圖2 iOS-App系統(tǒng)架構體系
//申明請求的數(shù)據(jù)是json類型
manager.requestSerializer=[AFJSONRequestSerializer se?rializer];
manager.responseSerializer=[AFHTTPResponseSerializer serializer];
manager.requestSerializer.timeoutInterval=10;
manager.responseSerializer.acceptableContentTypes=[NS?Set setWithObjects:@"text/plain", @"multipart/form- data",@"application/json",@"text/html",@"image/jpeg",@"image/png",@"application/octet-stream",@"text/json",nil];
NSString*createNewOrderurl=[NSString stringWithFor?mat:@"% @/Express/order/Order_createOrder.action", server?URL];
[manager POST:createNewOrderurl parameters:json con?structingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData){
//formData:專門用于拼接需要上傳的數(shù)據(jù),在此位置生成一個要上傳的數(shù)據(jù)體
for(int i=0;i<self.imagesM.count;i++){
UIImage*image=self.imagesM[i];
NSData*imageData=UIImageJPEGRepresen?tation(image,0.5);
//使用當前的系統(tǒng)事件作為文件名
NSDateFormatter*formatter=[[NSDateFormat?ter alloc]init];
//設置時間格式
[formatter setDateFormat:@"yyyyMMddHHmmss"];
NSString*dateString=[formatter stringFrom?Date:[NSDate date]];
NSString*fileName=[NSString stringWithFor?mat:@"%@.jpg",dateString];
[formData appendPartWithFileData:imageData name:@"upload"fileName:fileName mimeType:@"image/jpeg"];///jpg/png
}
}
}
快遞員派送端可以在App完成訂單的查詢、接單與派送的過程。其中接單也被認為是搶單,系統(tǒng)完成手機端數(shù)據(jù)的拼接,并通過序列化的方式對數(shù)據(jù)完成傳輸操作,代碼略。
支付主要實現(xiàn)錢包的功能,包括支付寶、微信和銀行卡的支付與提現(xiàn)。根據(jù)用戶ID列出訂單的明細列表,而后提交后臺進行支付相關的處理。代碼實現(xiàn)如下:
//支付模塊
-(void)walletInstruction{
UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"說明"message:@" 1、余額可提現(xiàn)至支付寶、微信和銀行卡(銀聯(lián))等平臺。 2、提交提現(xiàn)申請后,需要2~3個工作日到賬。 3、提現(xiàn)或充值后,如遇到金額長時間沒有到賬,請及時聯(lián)系客服。"preferredStyle:UI?AlertControllerStyleAlert];
UIAlertAction*canelAction=[UIAlertAction actionWith?Title:@"知道了"style:UIAlertActionStyleDefault handler:nil];UIAlertAction*callAction=[UIAlertAction actionWithTitle:@"聯(lián)系客服"style:UIAlertActionStyleDefault handler:^(UIAlertAc?tion*_Nonnull action){
//通過UIWebView實現(xiàn)
UIWebView*phoneWV=[[UIWebView alloc]init?WithFrame:CGRectZero];
[self.view addSubview:phoneWV];
//讀入電話號碼
NSString *urlStr= [NSString stringWithFormat:@"tel:%@",@"0752-8884788"];
NSURL*url=[NSURL URLWithString:urlStr];
NSURLRequest*request=[NSURLRequest request?WithURL:url];
//加載請求
[phoneWV loadRequest:request];
}];
[alertController addAction:canelAction];
[alertController addAction:callAction];
[self presentViewController:alertController animated:YES completion:nil];
}
//請求賬戶明細數(shù)據(jù)
-(void)requestDataFromServer{
//請求的參數(shù)
NSUserDefaults*userDefaults=[NSUserDefaults standar?dUserDefaults];
NSString*userID=[[userDefaults objectForKey:@"userIn?formation"]objectForKey:@"userID"];
NSDictionary*dic=[NSDictionary dictionaryWithObject?sAndKeys:@“0”,@“first”,userID,@“userId”,nil];
NSString*uploadAddressUrl=[NSString stringWithFor?mat:@"%@%@",serverURL,@"/Express/user/User_findEx?pense.action"];
AFHTTPSessionManager*manager=[AFHTTPSession?Manager manager];
manager.responseSerializer=[AFHTTPResponseSerializer serializer];
[managerPOST:uploadAddressUrlparameters:dic con?structingBodyWithBlock:^(id_Nonnull formData){
//拼接data到請求體
}progress:^(NSProgress*_Nonnull uploadProgress){[SVProgressHUD show];
[SVProgressHUD setDefaultStyle:SVProgressHUDStyle?Dark];
} success:^(NSURLSessionDataTask * _Nonnull task, id_Nullable responseObject){
……
}failure:^(NSURLSessionDataTask*_Nullable task,NSError*_Nonnull error){
……
}
后臺管理系統(tǒng)實現(xiàn)了用戶認證管理、下單、接單、查詢、支付以及評價管理等,其中查詢模塊調(diào)用了百度地圖API實現(xiàn)[5]。后臺數(shù)據(jù)管理頁面效果如圖4所示。
圖4 iOS-App后臺管理系統(tǒng)功能示例
手機App端各頁面效果展示如圖5所示。
圖5 iOS-App手機端頁面效果示例
使用Instruments進行內(nèi)存測試,根據(jù)需求分析的要求重復測試3次以上,Instruments并沒有發(fā)出警報,在測試的過程中并沒有發(fā)生內(nèi)存暴漲的情況。綜上,軟件并沒有明顯的內(nèi)存泄漏,不影響功能和使用,符合需求分析的要求。Instruments內(nèi)存泄漏測試如圖6所示。
圖6 iOS-App內(nèi)測效果
綜上,同城快遞App系統(tǒng)將快遞物流與同城內(nèi)的移動電子商務更加緊密地結合,屬于C2C模式的一種實現(xiàn)。一方面在于加速物品同城快遞的遞送,同時為大眾參與提供了平臺,解決了“最后一公里”高效快速的快件遞送問題。