1. 引言
2017年中国手机产量跌破20亿部,2018年手机产量17.98亿部 [1]。2019年全年,中国智能手机市场整体出货量约为3.7亿台 [2]。受中美贸易战影响,2020年中国智能手机整体出货量约3.26亿台 [3]。显然,手机已成为当代人们生活的必需品。智能手机改变着人们的消费习惯,工作和学习的方式,加快了人们的移动、快捷、自由、随性的生活,体现出人们的智能化生活方式 [4]。智能手机已渗透到生活工作的方方面面,各种APP的开发成为研究的热点。文献 [4] [5] [6] [7] [8] 设计的智能饮食、点餐推荐APP或微信小程序,将线下线上服务结合,顾客使用移动设备即可享受到实时、快捷、自由的个性化餐饮服务,商家可及时了解自己的运营情况。文献 [9] [10] [11] [12] [13] 研究或设计的智能学习APP,有效促进了学习者的个性化与碎片化学习。文献 [14] [15] [16] [17] 研究或设计的购物APP或系统,可使消费者快速从众多的商品中选择到满意的商品;超市管理者而言可实时查看商品销售情况,以便快速响应市场需求。
但目前市场上没有推荐购买手机的APP。目前消费者主要通过考查实体店或网上查询,选择心仪手机。实体店因手机型号有限,再加上销售员以推销产品为主,极易误导用户;而网上有关手机评论和评测的文章类型繁多,但有价值的信息较少。太平洋电脑网、中关村在线等手机评测网站,因缺少对手机的筛选和参数的解释以及移动端信息界面杂乱等,导致用户花费了过多的时间和精力查询但结果却差强人意。大型购物App,比如淘宝、京东、苏宁等,虽然提供了手机及部分参数筛选功能,但因其商品种类众多,信息过载,检索极不方便。因此,充分利用手机的便利性,设计一款推荐手机App,从专业的角度帮助消费者从繁多的手机品牌和型号中快速选到心仪的手机,值得研究。
2. 推荐手机App客户端需求分析
2.1. App客户端用户需求
该App为用户主要提供以下功能。
1) 登录注册:用户需登录App后方能进行相应操作。无账号需先注册。
2) 产品展示:显示热门手机品牌、App收录的全部手机型号以及详情。
3) 热门手机排行:显示热门手机的屏幕、充电、续航等方面排行数据。
4) 手机搜索:可搜索某手机的所有型号以及对应机型的详细信息。
5) 手机筛选:可通过手机品牌、处理器等参数组合筛选手机型号及详情,按上市时间、价格、性能等显示筛选结果。
6) 个性推荐:根据用户行为,推荐符合其偏好的手机。
7) 手机参数详解:详解手机外观、屏幕、处理器等硬件参数。
8) 手机对比:依据用户需求,比对不同手机参数。
9) 手机收藏:将用户有意向的机型加入收藏,方便下次查看。
用户用例如图1所示。
2.2. App客户端性能需求
1) 可靠性:App的手机信息来自各大官网,需经过严格核实才能使用,确保数据的准确性。App规定使用的最低版本和最佳版本、采用异常处理等避免出现崩溃、闪退等,保障其稳定性。
2) 实时性:App采用OkGo、JFinal、MySQL等热门成熟技术,保障其搜索、筛选、查看手机信息等操作及时安全传输、处理数据。
3. 推荐手机App客户端设计
3.1. App总体架构设计
推荐手机App采用C/S架构、JFinal、OkGo等构建框架,总体架构设计如图2,采用MVC模式。用户通过客户端可以随时随地使用,配套的服务管理端利用JFinal框架作为开发框架,为客户端提供了数据快速访问的接口以及对于手机信息的管理,同时使用OkGo网络框架进行客户端与服务管理端数据交互和MySQL存储数据。本App分为用户登录、用户注册、主界面、搜索界面、筛选界面等共12个主要的Activity。在后台的Controller文件类似MVC中的Model层,它主要实现获取从Activity里传递过来的参数,通过参数对数据库进行增删查改操作,并将结果返回给Activity。本App依据功能划分出手机操作、排行图片操作、用户操作、手机收藏操作,手机对比操作等共5个主要的Controller文件。客户端为用户提供查看全部产品、综合排行、参数详解以及手机搜索和筛选等功能。通过Android中的Activity组件完成用户与客户端的交互。客户端通过OkGo网络框架与服务器交互,并把解析数据显示在客户端。
3.2. 推荐手机App客户端软件结构设计
客户端主要为用户提供登录注册、查看产品、热门手机排行详情、搜索、筛选手机、手机参数详解、收藏、对比等功能,其软件结构设计如图3。

Figure 3. APP client software structure
图3. APP客户端软件结构
3.3. App客户端搜索、筛选模块设计
推荐手机App客户端包含用户登录注册、查看全部产品、热门手机各项排行等模块。限于篇幅,本节只描述手机搜索、筛选模块的设计。
3.3.1. 界面设计
搜索与筛选界面展示APP包含手机以及搜索、筛选与推荐的手机。其界面由搜索与筛选、搜索和筛选三个界面组成。其中搜索与筛选界面设计见图4。

Figure 4. Search and filter interface design
图4. 搜索与筛选界面设计
3.3.2. 数据设计
手机搜索、筛选模块,涉及到的存储数据主要有手机和推荐2个实体。根据需求调研,其数据模式定义如下。
1) 手机实体关系模式
手机信息(手机ID、手机名称、手机品牌、手机处理器、手机电池、手机发售时间、手机操作系统、手机解锁方式、手机发售价格、手机造型设计、手机尺寸、手机重量、手机机身材质、手机机身颜色、手机屏幕尺寸、手机屏幕类型、手机屏幕材质、手机屏幕分辨率、其他手机屏幕参数、手机电池容量、手机有线充电、手机无线充电、手机摄像头总数、手机前置摄像头、手机后置摄像头、手机其他拍摄功能、手机运行内存、手机存储内存、手机处理器型号、手机CPU规格、手机CPU性能、手机GPU规格、手机GPU性能、手机安兔兔跑分、手机充电与数据接口、手机耳机接口、NFC与传感器及其他、手机定位导航、手机WLAN/WIFI规格、手机蓝牙规格、手机电话与存储卡槽、手机支持网络类型、手机图片、手机官网详情、手机评测详情、手机起售价)。
2) 个性推荐实体关系模式
个性推荐(个性推荐信息ID、用户名、手机品牌、手机品牌 点击次数、手机处理器、手机处理器点击次数、价格区间、价格区间点击次数、手机重量、手机重量点击次数、电池容量、电池容量点击次数、屏幕尺寸、屏幕尺寸点击次数、屏幕材质、屏幕材质点击次数、屏幕类型、屏幕类型点击次数)。
此外还需定义多个集合存放用户行为等动态数据。
3.3.3. App个性推荐算法设计
本App设计精确和个性两种方式推荐手机。
1) 精确推荐
用户可根据自己的需求选择手机品牌、处理器、价格区间等参数进行筛选,App根据用户选择的参数将符合条件的全部机型推荐给用户,节省了查找时间。同时设计了按发售时间、价格和性能跑分等升、降排序显示筛选结果,增加了查询的便捷性。
2) 个性推荐
本App依据用户选择的手机参数项及其次数等行为,设计个性推荐算法,精准推荐用户心仪手机。
a) 算法思路
Step1:将用户选择的参数类型及次数保存到数据库中。假设数据库有四部手机,这四部手机参数简化,如表1所示。

Table 1. Simplified parameters of mobile phone
表1. 手机简化参数
用户甲和乙选择过的参数类型及次数如表2所示。

Table 2. User selection parameters
表2. 用户选择的参数类型
Step2:根据用户选择的参数从数据库中筛选出符合一项或多项参数的手机,形成列表,根据每个手机所含参数的多少对列表排序。假设用户甲和乙筛选排序后的列表如表3所示。

Table 3. Filter the list of mobile phones
表3. 筛选手机列表
Step3:计算推荐值。依据用户每个参数类型点击次数,按照公式(1)计算手机列表中每个手机的推荐值k。其中n为共多少个参数类型,i表示第几个参数类型。
(1)
由上面数据可得,用户甲手机A推荐值为0.67,手机D推荐值为0.2,手机B的推荐值为0.06。由此为甲用户推荐的手机列表是手机A、手机D、手机B。用户乙手机C推荐值为0.4,手机A推荐值为0.3,手机B的推荐值为0.4。此时手机C和手机B的推荐值相同,但因手机C的参数比手机B多一个,所以手机C在手机B前面,由此为乙推荐的手机列表是手机C、手机B、手机D。
b) 算法设计
① 将用户选中的手机参数类型作为参数,查询数据库出中符合一项或多项参数类型的手机,形成list列表;
**---②~⑦计算list表中各手机各用户选择的参数数量和点击次数。
② 遍历list列表里每一部手机;
③ 记录每个手机包含多少项用户选中过的手机参数,存入filterMap集合;
④ 记录每个手机包含用户选中过手机参数的点击总次数,存入phoneShuMap集合;
⑤ 重复②~④步,直到遍历结束end for;
⑥ 将filterMap集合按参数数量由大到小排序(通过compareTo())存入新集合sortFilterMap;
**--⑦~⑨循环,将sortFilterMap集合里手机信息存到sortList列表里。
⑦ 遍历sortFilterMap里的每一部手机;
⑧ 将手机及参数信息存到新的list列表sortList里;
⑨ 重复⑦~⑧步,直到遍历结束end for;
⑩ 计算手机参数用户点击次数(click-count);
**----⑪~⑭循环,计算每个手机的推荐值,并存入phoneValueMap集合;
⑪ 遍历for sortList列表里每一部手机;
⑫ 使用phoneShuMap里面手机信息以及用户各参数点击次数和click-count,依据推荐值计算公式(1)计算手机推荐值;
⑬ 将手机信息和手机推荐值存到新的map集合phoneValueMap;
⑭ 重复⑪~⑬步,直到遍历end for;
**--⑪~⑭,计算每个手机的推荐值,并存入phoneValueMap集合。
⑮ 将phoneValueMap集合按手机推荐值从大到小排序(通过compareTo())存入新集合sortValueMap;
⑯ 将list列表数据清空;
**--⑰~⑲循环,把sortValueMap集合里的手机信息存入list列表。
⑰ 遍历sortValueMap集合中里的手机;
⑱ 将手机信息存到list列表;
⑲ 重复⑰~⑱直到遍历结束end for;
该算法的时间复杂度为O(n)。
3.3.4. App搜索、筛选模块设计
手机搜索模块实现了手机搜索、显示历史记录等功能。手机筛选模块实现了按手机参数筛选、按价格,上市时间,跑分进行排序等功能。
1) 类与接口设计
该模块相关的类主要有实体类Phone、搜索与筛选类FragSearchFilter、手机搜索类PhoneSearchActivity、手机筛选类PhoneFilterActivity和手机相关操作的控制类PhoneController。App客户端搜索、筛选模块类图设计如图5所示。

Figure 5. Mobile phone search, screening module class diagram
图5. 手机搜索、筛选模块类图
图5各类说明如下。
Phone:手机实体类,该实体类中封装私有化的属性,提供setter()和getter()方法,供其他类访问Phone实体类中的属性。
PhoneController:用户操作手机信息控制类,主要处理客户端传来的数据,以及控制与用户对手机信息查看、加入对比等功能的逻辑处理,执行和数据库相关的操作。
FragSearchFilter:有关搜索与筛选的总界面交互类,用来处理frag_search_filter.xml里面设置的控件以及进行和搜索与筛选的总界面有关的逻辑交互操作。
PhoneSearchActivity:有关手机搜索的交互类,用来处理phone_search.xml里面设置的控件以及进行和手机搜索有关的逻辑交互操作。
PhoneFilterActivity:有关手机筛选的交互类,用来处理phone_filter.xml里面设置的控件以及进行和手机搜索有关的逻辑交互操作。
FragSearchFilter类会调用PhoneListShow()向后台PhoneController类发出请求,PhoneController类的PhoneShow()方法查找数据库,并将结果返回给FragSearchFilter类。
图5中关键类的具体设计见表4~6。

Table 5. Phone controller class
表5. Phone controller类

Table 6. Frag search filter class
表6. Frag search filter类
2) 搜索、筛选功能设计
搜索与筛选界面的Activity类调用onCreateView()显示界面。用户点击按发售时间、发售价格、性能跑分三个升降序排列按钮。Activity判断手机列表中的信息是全部手机、搜索手机还是筛选手机。Activity类调用startActivity()方法进入搜索(筛选)界面。用户输入搜索关键字(选择筛选参数),Activity类调用Intent将要搜索的关键字(筛选参数)返回到Activity类,Activity类通过OkGo将关键字(筛选参数)传递给服务器端PhoneController类,调用PhoneController类的PhoneSearch()(PhoneFilter())查询数据库,返回符合要求的手机列表。Activity类通过OkGo接收返回参数,使用adpter将获取数据绑定到ListView里的ImageView和TextView,在界面上显示出符合条件的手机列表。
手机搜索功能序列图设计如图6所示。
4. APP功能测试
主要运用黑盒测试测试App功能。该App的测试将对用户进行登录、查看全部手机产品、手机搜索,手机筛选、加入收藏和加入对比等功能测试,对管理员进行添加手机信息,更新排行图片等功能进行测试。
4.1. 用户主要功能测试方案
限于篇幅,本节只给出用户的主要功能测试方案。用户测试方案如表7所示。

Figure 6. Mobile phone search function sequence diagram
图6. 手机搜索功能序列图

Table 7. User function test scheme
表7. 用户功能测试方案
4.2. 用户主要功能测试
1) 手机搜索功能进行测试
主要测试用户在搜索框中输入关键字后,购买手机推荐App是否会正确显示手机列表,手机搜索功能用例测试见表8。

Table 8. Mobile phone search function test
表8. 手机搜索功能测试
2) 手机筛选功能进行测试
主要测试用户在筛选界面中筛选过参数,点击确定后,购买手机推荐App是否会正确显示手机列表,手机筛选功能用例测试见表9。

Table 9. Mobile phone screening function test
表9. 手机筛选用例测试
限于篇幅限制,其他功能测试不再赘述。经测试,该APP各项功能运行稳定。
5. 总结
随着移动互联网和智能终端(特别是手机)的发展,移动购买已成为人们购物的一种主要方式。本文首先分析推荐手机App客户端的需求,在此基础上设计了App总体架构和软件结构,进而设计了App客户端搜索、筛选模块的数据和个性推荐算法以及类与接口,最终实现了手机推荐APP。经测试,该APP各功能运行稳定。本研究的后续研究为推荐算法的优化。本文探索了从专业的角度为用户推荐心仪手机,具有一定的应用价值,对其他家电APP的设计开发也具有一定的借鉴作用。
基金项目
河南省科技厅科技发展计划科技攻关项目(立项编号:172102210428)。