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