该APP安装包下载链接:

http://www.mnif.cn/appapk/IotDevelopmentVersion/20190820/app-debug.apk

或者扫描二维码下载

注:该下载可能下载的为旧版本,可点击 用户 检查更新 升级为最新版本

APP源码获取方式:(请阅读宝贝说明)

此APP建立在基础篇,升级篇,数据篇和安全篇.只有把这些篇章全部学过才能看得懂源码!

https://item.taobao.com/item.htm?spm=a2oq0.12575281.0.0.70471debVGb9G8&ft=t&id=569295486025

如果用户获得了源码,想快速的应用到自己的服务器上,请参看此系列文章

一,搭建配置MQTT服务器

1,基础篇中,安装配置MQTT服务器

2,安全篇中,为MQTT配置安全连接

https://www.cnblogs.com/yangfengwu/category/1451836.html

二,安装配置数据库

1,数据篇中,安装数据库

https://www.cnblogs.com/yangfengwu/category/1410242.html

请在云端数据库建一个数据库名字为login的数据库,名字为register的表格,表格中的字段名字如下

三,搭建配置Apache 服务器

1,升级篇中,安装配置Apache 服务器

https://www.cnblogs.com/yangfengwu/category/1383497.html

2,微信小程序篇中,

https://www.cnblogs.com/yangfengwu/category/1462689.html

四,云服务器配置解析登录注册的php程序

1,网页根目录建一个名字为  LoginAndRegistration 的文件夹

ChangePassword.php

<?php

//http://IP地址/LoginAndRegistration/ChangePassword.php?Phone=13275429560&Password=25
//https://域名/LoginAndRegistration/ChangePassword.php?Phone=13275429560&Password=25
//PHP规定所有的变量前头必须加$
//明确一点,PHP的echo都是http返回的数据 $servername = "localhost";//链接本地数据库
$username = "root";//root账户
$password = "qwer123456";//密码,根据自己的修改
$dbname = "login";//链接的数据库名字
$TableName = "register";//链接的表格的名字 function groupSelect($from, $where1, $condition1,$value1, $condition,$where2, $condition2, $value2) {
$sql = "select *from ".$from." where ".$where1.$condition1."'".$value1."'".$condition ." ".$where2.$condition2."'".$value2."'";
return $sql;
}
function groupSelect1($from, $where1, $condition1,$value1) {
$sql = "select *from ".$from." where ".$where1.$condition1."'".$value1."'";
return $sql;
} try {
$LoginPhone = $_GET["Phone"];//用户提交的用户名
$Loginpassword = $_GET["Password"];//用户提交的密码 try {
$conn = new PDO("mysql:host=$servername;port=3306;dbname=$dbname", $username, $password);//链接数据库
//echo "PDO的API连接成功"; // 设置 PDO 错误模式为异常
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $Flage = false; $sql = groupSelect1($TableName, "phone","=",$LoginPhone);//查询有没有此手机号 $result = $conn->query($sql);//发送SQL语句并接收数据库返回 if ($result && $result->rowCount()) {//查询到数据
$Flage = true;
} if($Flage == true){
$Flage = false;
$sql = "UPDATE ".$TableName." SET password = "."'".$Loginpassword ."'"." WHERE phone=" .$LoginPhone;//更新
$count = $conn->exec($sql); //返回受影响的行数
if($count!=){
echo "OK";//返回
}else{
echo "errorCode:NoChange";//返回
}
}
else{
echo "errorCode:NoUserName";//没有用户
}
$conn=null;//关闭
}
catch(PDOException $e){
echo $e->getMessage();
echo "errorCode:DataBase";//返回
}
}
catch(PDOException $e)
{
echo $e->getMessage();
echo "errorCode:ReadData";//返回
}

login.php

<?php

//http://IP地址/LoginAndRegistration/login.php?Phone=13275429560&Password=25
//PHP规定所有的变量前头必须加$
//明确一点,PHP的echo都是http返回的数据 $servername = "localhost";
$username = "root";
$password = "qq946029359";//根据自己的修改
$dbname = "login";//链接的数据库名字
$TableName = "register";//链接的表格的名字 function groupSelect($from, $where1, $condition1,$value1, $condition,$where2, $condition2, $value2) {
$sql = "select *from ".$from." where ".$where1.$condition1."'".$value1."'".$condition ." ".$where2.$condition2."'".$value2."'";
return $sql;
}
function groupSelect1($from, $where1, $condition1,$value1) {
$sql = "select *from ".$from." where ".$where1.$condition1."'".$value1."'";
return $sql;
} try {
$LoginPhone = $_GET["Phone"];//用户提交的用户名
$Loginpassword = $_GET["Password"];//用户提交的密码 try {
$conn = new PDO("mysql:host=$servername;port=3306;dbname=$dbname", $username, $password);//链接数据库
//echo "PDO的API连接成功"; // 设置 PDO 错误模式为异常
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $Flage = false; $sql = groupSelect1($TableName, "phone","=",$LoginPhone);//查询有没有此手机号 $result = $conn->query($sql);//发送SQL语句并接收数据库返回 if ($result && $result->rowCount()) {//查询到数据
$Flage = true;
} if($Flage == true){
$Flage = false;
$sql = groupSelect($TableName, "phone","=",$LoginPhone,"and","password","=",$Loginpassword);//组合SQL语句
$result = $conn->query($sql);//发送SQL语句并接收数据库返回
if ($result && $result->rowCount()) {//查询到数据
//其实只要查询到就可以 $Flage = true;
while($row = $result->fetch()) {//循环读出数据
$Flage = true;//用户名和密码正确
//echo $row['phone'].$row['password'];//打印数据
break;
}
}
if($Flage == true)
{
echo "OK";//返回
}
else
{
echo "errorCode:Password";//密码错误
}
}
else{
echo "errorCode:NoUserName";//没有用户
}
$conn=null;//关闭
}
catch(PDOException $e){
//echo $e->getMessage();
echo "errorCode:DataBase";//返回
}
}
catch(PDOException $e)
{
//echo $e->getMessage();
echo "errorCode:ReadData";//返回
}

Register.php

<?php
//注册或者找回密码
//http://IP地址/LoginAndRegistration/Register.php?TAG=Register&Phone=13275429560&Password=25 //注册
//http://IP地址/LoginAndRegistration/Register.php?TAG=RePassword&Phone=13275429560&Password=25 //找回密码 //https://域名/LoginAndRegistration/Register.php?TAG=Register&Phone=13275429560&Password=25 //注册
//https://域名/LoginAndRegistration/Register.php?TAG=RePassword&Phone=13275429560&Password=25 //找回密码
//PHP规定所有的变量前头必须加$
//明确一点,PHP的echo都是http返回的数据 $servername = "localhost";
$username = "root";
$password = "qwer123456";//根据自己的修改
$dbname = "login";//链接的数据库名字
$TableName = "register";//链接的表格的名字 function groupSelect($from, $where1, $condition1,$value1, $condition,$where2, $condition2, $value2) {
$sql = "select *from ".$from." where ".$where1.$condition1."'".$value1."'".$condition ." ".$where2.$condition2."'".$value2."'";
return $sql;
}
function groupSelect1($from, $where1, $condition1,$value1) {
$sql = "select *from ".$from." where ".$where1.$condition1."'".$value1."'";
return $sql;
}
function groupDelete($from, $where, $condition,$value) {
$sql = "delete from ".$from." where ".$where.$condition."'".$value."'";
return $sql;
} function groupInsert($from,&$option,&$value) {
$Option = $option[];
$Value = "'".$value[];
$bl = false; foreach($option as $va){
if ($bl == true){ $Option = $Option.",".$va;}
else{$bl = true;}
}
$bl = false;
foreach($value as $va){
if ($bl == true) $Value = $Value."'".","."'".$va;
else $bl = true;
}
$Value=$Value ."'";
$sql = "insert into ".$from ."(" .$Option .")". " values(". $Value .")";
return $sql;
}
try {
$LoginTAG = $_GET["TAG"];//是注册还是找回密码
$LoginPhone = $_GET["Phone"];//用户提交的用户名
$Loginpassword = $_GET["Password"];//用户提交的密码 try {
$conn = new PDO("mysql:host=$servername;port=3306;dbname=$dbname", $username, $password);//链接数据库
//echo "PDO的API连接成功";
// 设置 PDO 错误模式为异常
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$Flage = false;
$sql = groupSelect1($TableName, "phone","=",$LoginPhone);//查询有没有此手机号
$result = $conn->query($sql);//发送SQL语句并接收数据库返回
if ($result && $result->rowCount()) {//查询到数据
$Flage = true;
} if($Flage == true){//有这个用户
$Flage = false;
if($LoginTAG == "Register"){//如果是注册
echo "errorCode:UserAlreadyExists";//返回用户已经存在
}else if ($LoginTAG == "RePassword"){//如果是找回密码
//注:用户找回密码我建议先清除掉该用户绑定的所有设备信息
/*写删除该用户的绑定设备的所有信息的函数*/
$sql = groupDelete($TableName,"phone","=",$LoginPhone);//删除该手机号的信息
$count = $conn->exec($sql); //返回受影响的行数
if($count!=){//删除了数据
$option=array("phone","password");
$value=array($LoginPhone,$Loginpassword);
$sql = groupInsert($TableName,$option,$value);
$count = $conn->exec($sql); //返回受影响的行数
if ($count !=){//插入数据成功
echo "OK";//重置密码成功
}else{
echo "errorCode:DataBase";//重置密码失败,访问数据库异常
}
}else{
echo "errorCode:DeleteUser";//删除用户信息异常
}
}
}
else{//没有这个用户
if($LoginTAG == "Register"){//如果是注册
$option=array("phone","password");
$value=array($LoginPhone,$Loginpassword);
$sql = groupInsert($TableName,$option,$value);
$count = $conn->exec($sql); //返回受影响的行数
if ($count !=){//插入数据成功
echo "OK";//注册成功
}else{
echo "errorCode:DataBase";//注册失败,访问数据库异常
}
}else if ($LoginTAG == "RePassword"){//如果是找回密码
echo "errorCode:NoUserName";//没有用户
}
}
$conn=null;//关闭
}
catch(PDOException $e){
//echo $e->getMessage();
echo "errorCode:DataBase";//返回
}
}
catch(PDOException $e)
{
//echo $e->getMessage();
echo "errorCode:ReadData";//返回
}

五,修改APP连接的地址信息

1,修改注册登录连接的IP地址

2,修改连接的MQTT的信息

3,APP的更新配置(只需要把更新文件和更新的安装包放在可以http或者https访问下载的地方就可以)

1,修改访问更新文件,根据自己的修改

访问的更新文件的内容

{
VerCode:,
VerName:1.2.,
Address:"http://www.mnif.cn/appapk/IotDevelopmentVersion/20190730/app-debug.apk",
Details:
"1,增加自定义MQTT连接,支持TCP,SSL;
,绑定设备可以自定义订阅的主题
,支持单路开关控制
,优化了通信监听程序
"
}

注:整个文件内容为JSON格式

VerCode:5,
VerName:1.2.1,
每次上传APP安装包以后请修改此处和APP内部保持一致

Address:"http://www.mnif.cn/appapk/IotDevelopmentVersion/20190730/app-debug.apk",
此为APP安装包的地址信息,请自行按照自己的修改 注:我的方式是先访问 updateinfo.txt 文件的内容,然后对比版本信息,
如果有新版本则提示
1,增加自定义MQTT连接,支持TCP,SSL;
2,绑定设备可以自定义订阅的主题
3,支持单路开关控制
4,优化了通信监听程序 用户点击更新以后,APP 访问 http://www.mnif.cn/appapk/IotDevelopmentVersion/20190730/app-debug.apk
下载安装包,下载完,调起安装.
 
我的存放方式:(我使用的阿里云的OSS存储,http/https下载比较快,当然也可以存放在自己的云端)
如果其它问题,将在后续文章中说明

https://www.cnblogs.com/yangfengwu/p/11273743.html
 

1-开发共享版APP(搭建指南)-快速搭建到自己的服务器的更多相关文章

  1. 2-开发共享版APP(接入指南)-设备接入说明:快速接入

    https://www.cnblogs.com/yangfengwu/p/11249674.html 该APP安装包下载链接: http://www.mnif.cn/appapk/IotDevelop ...

  2. 1-开发共享版APP(接入指南)-APP说明

    该APP的功能,类似于网上售卖的Wi-Fi/GPRS远程控制器 设备页面                                     用户页面                       ...

  3. 3-开发共享版APP(接入指南)-设备接入说明:使用隐藏配置

    https://www.cnblogs.com/yangfengwu/p/11273226.html 该APP安装包下载链接: http://www.mnif.cn/appapk/IotDevelop ...

  4. 1-开发共享版APP(源码介绍)-BUG修复

    这一系列文章将介绍APP的源码,这一节作为所有BUG问题修复! https://www.cnblogs.com/yangfengwu/category/1512162.html    //开发共享版A ...

  5. 2-开发共享版APP(搭建指南)-修改包名

    https://www.cnblogs.com/yangfengwu/p/11273734.html https://www.cnblogs.com/yangfengwu/p/11273746.htm ...

  6. 3-开发共享版APP(搭建指南)-修改手机验证码

    https://www.cnblogs.com/yangfengwu/p/11273743.html 请先看数据篇 或者参考 https://www.cnblogs.com/yangfengwu/p/ ...

  7. iOS开发之谈谈App应用的架构搭建(推荐给大家看)

    1.iOS应用架构谈 开篇: 2.iOS应用架构谈 view层的组织和调用方案: 3.iOS应用架构谈 网络层设计方案: 4.iOS应用架构谈 本地持久化方案及动态部署: 5.iOS应用架构谈 组件化 ...

  8. Windows下快速搭建安卓开发环境android-studio

    Windows下快速搭建安卓开发环境android-studio 发布时间:2018-01-18 来源:网络 上传者:用户 关键字: 安卓 搭建 Android Windows 快速 环境 Studi ...

  9. 五分钟用Docker快速搭建Go开发环境

    挺早以前在我写过一篇用 `Docker`搭建LNMP开发环境的文章:[用Docker搭建Laravel开发环境](http://mp.weixin.qq.com/s?__biz=MzUzNTY5MzU ...

随机推荐

  1. Java 基础系列:不变性

    1.1 定义 不可变类(Immutable Objects):当类的实例一经创建,其内容便不可改变,即无法修改其成员变量. 可变类(Mutable Objects):类的实例创建后,可以修改其内容. ...

  2. Flutter基础系列之混合开发(二)

    1.混合开发的场景 1.1作为独立页面加入 这是以页面级作为独立的模块加入,而不是页面的某个元素. 原生页面可以打开Flutter页面 Flutter页面可以打开原生页面 1.2作为页面的一部分嵌入 ...

  3. vue+element 动态表单验证

    公司最近的项目有个添加动态表单的需求,总结一下我在表单验证上遇到的一些坑. 如图是功能的需求,这个功能挺好实现的,但是表单验证真是耗费了我一些功夫. vue+element在表单验证上有一些限制,必须 ...

  4. 在项目中使用Solr

    web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi=" ...

  5. axios 源码解析(中) 代码结构

    axios现在最新的版本的是v0.19.0,本节我们来分析一下它的实现源码,首先通过 gitHub地址获取到它的源代码,地址:https://github.com/axios/axios/tree/v ...

  6. Socket超时时间设置

    你知道在 Java 中怎么对 Socket 设置超时时间吗?他们的区别是什么?想一想和女朋友打电话的场景就知道了,如果实在想不到,那我们就一起来来看一下是咋回事吧 设置方式 主要有以下两种方式,我们来 ...

  7. 机器学习(八)--------支持向量机 (Support Vector Machines)

    与逻辑回归和神经网络相比,支持向量机或者简称 SVM,更为强大. 人们有时将支持向量机看作是大间距分类器. 这是我的支持向量机模型代价函数 这样将得到一个更好的决策边界 理解支持向量机模型的做法,即努 ...

  8. OpenGL入门1.3:着色器 GLSL

    前言 经过之前一段时间的学习(渲染管线简介)我们已经知道了着色器(Shader)是运行在GPU上的程序,这些小程序为图形渲染管线的某个特定部分而运行,着色器只是一种把输入转化为输出的程序,着色器也是一 ...

  9. ASP.NET Core中的jQuery Unobtrusive Ajax帮助器

    最近在ASP.NET Core下写文章管理系统时,准备在分页显示文章内容时,使用Ajax.网上找了篇帖文,简单翻一下,仅供自己查阅. 原链接:https://dotnetthoughts.net/jq ...

  10. css sprite responsive实现探究

    在做web app前端设计时,为了减少http的请求,提高系统响应时间,有一个非常常见的优化措施是:将所有用到的静态的图片通过合并形成一个sprite.png,并且配合background-posit ...