文档章节

基于邮件和百度云存储的android用户反馈系统设计

bbdlg
 bbdlg
发布于 2014/03/12 15:47
字数 1213
阅读 136
收藏 1

1.整体设计

    android应用程序通过专门的“用户反馈”页面获取用户反馈,将用户反馈内容打包成文件上传至百度云存储,上传完毕后通知服务端。服务端收到通知后下载对应文件,并通过邮件发送给指定邮箱。

    本文采用的服务器是CentOS release 5.8 (Final)。

    本文中用到的工具或服务有:百度云存储mutt+msmtp(邮件服务)、ucspi-tcp(TCP多线程服务)、bash脚本。

2.客户端

2.1 反馈内容上传至云存储

    这里可以下载到android使用的SDK,同样可以下到php和python的SDK,因此本文中所提到的方法同样适用于使用php或python开发的客户端。

    上传的具体方法在百度云存储官网写的比较清楚,这里只是简单介绍一下过程。

  • 注册百度账号,并成为百度开发者。

  • 创建应用并获取密钥对(ak&sk)

  • 创建bucket,即存放文件的‘仓库’

  • 上传文件至‘仓库’

    现在我们假设已经可以将文件通过代码的方式上传至百度云存储。

    官方提供了web页面管理,我们手动上传一个图片文件作为用户反馈内容。

2.2 通知服务端有反馈内容

    客户端以TCP的方式通知服务端有反馈内容,通知的格式为 userid:filename,当然这里可以自定义。服务端在收到通知后结束TCP连接。

3. 服务端

3.1 mail环境

    在ubuntu中可以很方便的利用mutt和msmtp配置好mail环境,具体可参考这里

    而在我用的centos的yum源里没有msmtp的包,着实费了点力气。具体可以参考这里

    在我的服务器上出现了 centos msmtp error: pkg-config not found 的错误,也就是说pkgconfig没有安装,可以一次性把所有东西都装了。

yum -y install automake autoconf libtool ncurses-devel libxslt groff pcre-devel pkgconfig

    配置完毕后,可以通过如下命令验证是否成功:

echo "this is a test attachment." >>attachment.log
echo "mail content"|mutt -s "hello from centos" 目标邮箱 -a `pwd`/attachment.log

    检查你的邮箱是否收到该邮件。

3.2 云存储下载工具

    百度云存储的官方提供了shell下载工具shell-tool,下载后解压,解压后的文件夹是Baidu_BCS_Shell-Tool_V1.2,在该目录下的bsconf文件中配置刚刚申请的百度云存储的ak和sk,也即百度云存储的用户名和密码。

    配置完成后测试刚刚我们存放在云上的文件:

3.3 TCP多线程服务

    由于服务程序需要支持多个客户端,因此nc这个万能军刀暂时只能搁置一边了。我们用ucspi-tcp的tcpserver服务来完成TCP的多客户端支持。

    我们首先按照官网的介绍来安装,下载→解压→configure+make+make install,一路过去。

    期间我的服务器出现报错:/lib64/libc.so.6: could not read symbols: Bad value,解决方法是:

    编辑 ./ucspi-tcp-0.88./conf-cc,将原来的 gcc -O2 改为

gcc -O2 -include /usr/include/errno.h

    请留意,这里是errno而非error。

    安装完毕后,我们来测试一下。在服务器端输入tcpserver 0.0.0.0 8888 pwd,意思是开启一个8888的对外端口,有客户端连接到该端口后,将执行‘pwd’这个程序。我们用nc命令模拟一个客户端,

nc your_server_ip 8888

客户端将出现执行服务器的当前目录:

3.4 服务脚本

    好了,现在我们只剩下最后一步了,就是写服务脚本。有两个脚本需要写:

文件1:proc_feedback.sh

#!/bin/sh
file_log=`pwd`log.txt
dir_feedback=`pwd`/feedback
dir_baidu_utils="/root/tools/Baidu_BCS_Shell-Tool_V1.2"

#wait for client sending something.
read recv

#inform client for recved
echo "recved: ${recv}" >>/dev/null

#download feedback content
#assume content recved like "userid:feedback_content_file_store_in_baidu_cloud"
userid=`echo $recv | cut -d ":" -f1`
len_userid=`expr ${#userid} + 2`
filename=`expr substr $recv $len_userid ${#recv}`
cur_time=`date '+20%y-%m-%d %H:%M:%S'`
if [ -z "$userid" -o -z "$filename" ]
then
   echo "[$cur_time]  feedback invalid, userid=$userid, filename=$filename"
   exit
fi

#log
echo "[$cur_time]  $recv" >>$file_log

#download feedback file
if [ ! -d $dir_feedback ]
then mkdir $dir_feedback
fi
cd $dir_baidu_utils
./bsutil.sh cp bs://file-trans/${filename} ${dir_feedback}/${filename} >>/dev/null
cd - >>/dev/null

#mail to feedback service email
mail_title="feedback from $userid"
mail_content="time:$cur_time\nfrom:$userid"
mail_attachment="${dir_feedback}/${filename}"
echo -e "$mail_content" | mutt -s "$mail_title" your_email@qq.com -a "${mail_attachment}"

文件2:service_feedback.sh

#!/bin/sh
tcpserver 0.0.0.0 8888 /root/src/feedback/proc_feedback.sh

4. 测试

4.1 启动服务

./service_feedback.sh &

4.1 用户准备反馈内容

    前面我们已经上传了一个feedback_test.gif的文件到云端。

4.2 用户发送反馈内容

4.3 客服人员在指定邮箱内查看用户反馈内容

© 著作权归作者所有

bbdlg

bbdlg

粉丝 57
博文 47
码字总数 29679
作品 1
无锡
CTO(技术副总裁)
私信 提问
免费!华为 DevEco 云测平台上线 EMUI9.0 机型和绿色应用 2.0 测试能力

为什么要把华为的EMUI9.0系统和安卓绿色联盟绿色应用标准2.0放在一块提?有兴趣的朋友可以自行google百度,小编这里卖个关子~ 9月5日,华为正式对外发布EMUI 9.0系统,这也是目前国内首个基于...

安卓绿色联盟
2018/09/13
0
0
浅析Android 4.0的通知系统(附Android 4.0设计指南全文翻译)

  通过手机的通知系统,可以将应用程序的一些重要消息告知给用户。流畅、舒适、友好的应用程序离不开精心设计的消息提醒机制。但是并不是所有的通知都是用户想看的,否则只会给用户造成骚扰...

墙头草
2012/06/18
5
0
Android并非免费午餐!谷歌对阿里云下重拳

[导读]尽管宏碁和谷歌暂时并未作出回应,不过仍引发国内互联网行业轩然大波。在这背后,谷歌和国际硬件厂商签订的Android系统反分裂协议也开始浮出水面。 腾讯科技 雷建平 9月14日报道 Andr...

oschina
2012/09/14
6.8K
52
Android 程序之在线词典【重构归来】

【前言】 博主在2009年十月份发表了一篇关于Android在线词典项目的源码(Android 程序之在线词典[2010-05-08更新图片]), 当时自己完全凭个人兴趣和直觉做的设计和实现, 可惜后面有一段工作完全...

晨曦之光
2012/03/09
110
0
Android 程序之在线词典【重构归来】

【前言】 博主在2009年十月份发表了一篇关于Android在线词典项目的源码(Android 程序之在线词典[2010-05-08更新图片]), 当时自己完全凭个人兴趣和直觉做的设计和实现, 可惜后面有一段工作完全...

晨曦之光
2012/03/07
1K
0

没有更多内容

加载失败,请刷新页面

加载更多

性能优化

js相关 根据js时间线,将js放在最下面加载,先加载DOM,再加载js 懒执行,就是将某些逻辑延迟到使用时在执行。该技术可用于首屏优化,对于某些耗时逻辑并不需要在首屏就使用的,就可以使用懒...

祖达
3分钟前
0
0
websocket通信failed to execute 'send'问题的解决

在建立web socket通信后,发送数据时,出现下图所示现象: 问题代码演示 function TestSockets() { //实例化一个WebSocket对象 var socket = new WebSocket("ws://127.0.0.1:8000/w...

城市之雾
9分钟前
0
0
PHPStorm 如何设置 yaf 代码提示?

下载 php-yaf-doc git clone https://github.com/elad-yosifon/php-yaf-doc.git PHPStorm 如下设置 使用

whoru
10分钟前
0
0
typeorm drop foreign key

1. 问题描述 项目代码中使用typeorm进行mysql的数据操作, 昨天突然部署测试环境发现测试环境数据库的外键都为空了, 导致涉及的整个系统不可用. 2. 问题探究 尝试复现 mysqldump 线上数据, 然...

jimmywa
11分钟前
2
0
好程序员web前端开发测验之css部分

好程序员web前端开发测验之css部分Front End Web Development Quiz CSS 部分问题与解答 Q: CSS 属性是否区分大小写? <p><font size="3">  ul {</font></p> <p><font size="3">  MaRGin:......

好程序员IT
17分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部