整理记录App开发常用功能

1.网络请求安全性

目的

确保接口都是合法的被访问,而不是外部人员通过接口测试工具(例如postman)进行访问。
和后台开发人员沟通好签名规则后,Android 未登录无token 的情况下后端开发人员按约定好的加密方式进行验签,若已登录有token的情况下,安卓端请求头带token,后端验证token的合法性

签名的写法(举个例子)

  1. 把所有参数加一个时间戳参数,对所有参数首字母排序并生成字符串。
  2. 时间戳整除17取余数
  3. 然后整个字符串从余数位置进行截取,首尾互换,未满余数的不截取字符串,
  4. 再进行MD5加密
    实例代码
public static String getSignature(JSONObject initParam,long time) throws JSONException {
        List<String> list = new ArrayList<>();
        Iterator iterable=initParam.keys();
        while (iterable.hasNext()){
            list.add((String) iterable.next());
        }
        Collections.sort(list);
        StringBuffer sb=new StringBuffer();
        for (String s:list){
            sb.append(initParam.getString(s));
        }

        String rawString=sb.toString();
        int  l= (int)(time%17);
        if(rawString.length()>l){
            rawString=rawString.substring(l,rawString.length())+rawString.substring(0,l);
        }
        return Utils.toMD5(rawString);
    }

2.APP 免密登录,提高用户体验度。

背景

用户登录系统后一直在操作,当到token到期后,突然该用户被提示需要重新登录,这样的体验是非常不好的。

开发前期准备:后台开发人员提供一个刷新token的接口

App端开发思路

  1. 用户第一次登录填写账号密码后,调用登录接口获取用户信息、accessToken、refreshToken,
  2. 当后台返回的信息错误码为accessToken失效时,使用refreshToken,访问刷新token的接口获取最新accessToken

3.手机上获取Log,摆脱电脑限制,从而快速准确定位到bug

背景

常规情况调试app,都是手机连接电脑,根据Android studio logcat 查看log。
但由于app各个场景的复杂性(例如用户那边出现bug,公司测试人员无法复现、bug出现在智慧工厂生产环境中,开发人员不在现场等场景),出现bug时无法连接电脑,便看不到log了,

开发思路

通过在app代码中加入执行带有log输出的cmd命令的代码,获取到log输出的字符串,写入sd卡完成log实时记录。
实例代码

 try {
               cmds = "logcat";//打印所有日志信息
                logcatProc = Runtime.getRuntime().exec(cmds);
                mReader = new BufferedReader(new InputStreamReader(
                        logcatProc.getInputStream()), 1024);
                String line = null;
                while (mRunning && (line = mReader.readLine()) != null) {
                    if (!mRunning) {
                        break;
                    }
                    if (line.length() == 0) {
                        continue;
                    }
                    if (out != null && line.contains(mPID)) {
                        out.write((line + "\n").getBytes());
                    }
                }

            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                if (logcatProc != null) {
                    logcatProc.destroy();
                    logcatProc = null;
                }
                if (mReader != null) {
                    try {
                        mReader.close();
                        mReader = null;
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
                if (out != null) {
                    try {
                        out.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                    out = null;
                }

            }

        }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容