系统扩展——服务端对机器码处理及安卓应用打包

来源:互联网 发布:黑客linux入门姜超 编辑:程序博客网 时间:2024/05/20 01:34

这几天开始啃单位的OA平台数据库,那玩意是上级的上级找集成商开发的,把它当宝贝,连个接口都不提供,不过数据库安装在内网中,要研究数据库结构,把人员和单位数据导出来到会议系统中,这样方便把人员和终端进行绑定,涉及到内部OA的事情,就不会写在这里啦,泄密可不好玩的。

安卓客户端到这里基本没什么好改的了,大不了再加个自动更新功能,那在没开发经费的情况下,估计是不可能实现的了,就这样打包发布吧。

理论上在安卓项目里面是可以找到打包好的apk文件的,在项目的app->build->outputs->apk里面有个app-debug.apk,这个就是最后一次调试运行生成的apk文件,但注意,这个文件是未签名的,在终端安装可能会给安全管家这类的软件限制安装的。

所以要打包签名,这样生成最终的apk才能发布。

在Android Studio的“Build”菜单中选择“Generate Sinned APK...”,就会打开打包向导了。


如果曾经创建过签名文件,选择签名文件填写密码就可以Next了,但没有,创建一个新的!


挑几个重要的讲讲,其实可以随便填的。

Key store path  签名文件保存文件夹和文件名,最右边的按钮可以打开创建。

Password 签名文件密码,要记住,如果以后重新打包需要用到这个签名文件要输入密码的

Confirem 重复上面的密码,确保密码没错误校验使用

下面是key文件保存的内容

Alias 别名

Validity key文件的有效期

Certificate 里面的内容一看就明白,乱填一番就可以,不填好像没事。

填完就OK,等着创建签名文件,创建完毕后会自动返回并填写完向导的内容,然后Next


在APK Destination Folder最后那个按钮那里选择一个文件夹,用来保存生成的APK文件,Finish就可以在刚才指定的文件夹里面生成最终的单一打包APK文件啦,也就是安卓的安装程序,把这个APK文件拷贝到别的安卓平板或手机就可以安装了。当然,也可以拷贝到会议系统的IIS目录里面,让用户自行下载安装,我是出名懒的,拷贝到服务器去,在服务器那里设置一下让用户使用终端的浏览器登录系统,检测是不是自己编写的app里面的webview打开的,如果不是,跳转到下载页面去,让用户自己下载安装。

APP的打包发布就讲到这里,下面讲讲机器码在服务端的应用处理。

上篇博文讲到,机器码是MD5加密后通过QueryString参数传递到服务器的,接下来就很简单啦。在default.aspx.cs里面的Page_Load弄几句代码就可以实现不同功能了。

if (Request.QueryString["code"] == null && Session["code"]==null)                Response.Redirect("download.aspx");
检测code参数和Session,如果都没有,表示是用别的浏览器登录,跳转到下载页面,下载页面就不多说了,就链接到apk文件而已,专业点的就点提示说明,弄个下载按钮。

好,在数据库里面弄个新表,保存终端信息,设一个字段,用来保存终端状态,和会议状态一样,使用数字来表达不同的状态,自己定义规则,假设我定义1位终端注册但管理员未批准,0表示终端不存在。

先在MeetingOP里面新建一个类,public class TerminalOP,在类里面添加一个获取终端状态的函数

        public static int GetState(string code)//检查终端机器码在数据库中是否存在        {            DataTable DT = DataOP.GetDataTable("select mState from MeetingTerminal where mCode='" + code+"'");            if (DT.Rows.Count > 0)                return Convert.ToInt32(DT.Rows[0]["mState"].ToString());            else                return 0;        }
回到Default.aspx,在Page_Load里面对QueryString["code"]进行处理

            string sCode = Request.QueryString["code"].Trim().ToUpper();            Session["code"] = sCode;            int iState = MeetingOP.TerminalOP.GetState(sCode);            if (iState == 0)                Response.Redirect("Registration.aspx");            if(iState == 4)                Response.Redirect("Result.aspx?ID=2");            ClientScript.RegisterStartupScript(this.GetType(), "Pop", "<script>SetDiv('" + iState .ToString()+ "');</script>");
定义个变量把Request.QueryString["code"]保存起来,去掉前后空格,并把所有字符全部转成大写,因为安卓那边传递过来的是小写的。

搞过个Session把机器码保存起来,方便签名什么的应用。

看机器码在数据库的状态,0表示这个机器码没有在数据库中存在,跳转到注册页面,4表示这个机器码因为别的原因被管理员注销了,跳转到出错页面Result.aspx?ID=2,这个页面是专门用来显示系统错误的,ID=2就是表示机器码被管理员注销,这个页面就不多说,自定义的一个东西,喜欢怎么玩都可以。

ClientScript.RegisterStartupScript(this.GetType(), "Pop", "<script>SetDiv('" + iState .ToString()+ "');</script>");这句很关键,页面显示后注册一个script体,并执行预先定义好的JS函数,这里这个函数没干什么好事情的,就是如果机器码的状态是1,就不显示会议列表了,改显示提示信息,因为前面都跳转飞掉了,只剩状态2和状态3了,状态2是设定终端为机动终端,不绑定用户,状态3设定是终端绑定用户的。

SetDIV(State)的JS函数,这个函数我懒得写在JS文件里面,就直接写在页面里面了。

    <script type="text/javascript">        function SetDiv(State) {            if (State == 1)                document.getElementById("MeetingIT").style.display = "none";            else                document.getElementById("Wait").style.display = "none";        }    </script>
可以看到,就是操作两个不同的层显示,状态1就把会议列表那个层给关掉,其余的就把提示层给关掉

    <div id="Wait" class="info">        <p style="text-align:left;text-indent:2em;">你的终端已经注册成功,等待管理员审批。</p>        <p style="text-align:left;text-indent:2em;">请稍后刷新页面查看。</p>    </div>
这是提示层,其样式是用类的,设计专门用来搞提示信息的。
.info{    position:absolute;    width:96%;      left:2%;    right:2%;      top:3.5em;  padding:0px;      height:auto;    display:block;    border: 1px solid #999;    -webkit-border-radius: 5px;    -webkit-box-shadow: 2px 2px 10px #909090;    background:#dddddd;    }
至于机器码注册那个页面就很简单了,不写代码了,简单讲讲设计思路,自己去实现吧。

页面拖一个输入框,让用户填写OA系统的用户名,去用户数据库中查看有没有这个用户,如果有再查看有没有绑定终端(单位规则限制,每用只能绑定一个终端),如果都没有,就把终端记录在数据库中,把终端状态设为1,让管理员审核。用户表和终端表连个数据库中表有很多是互相关联的,编写管理工具的时候要注意两个表的数据同步。由于我还要研究把OA系统的用户数据导出来,这部分的代码暂不提供。




0 0
原创粉丝点击