美文网首页
基于cordova的app发布技巧

基于cordova的app发布技巧

作者: 工程师54 | 来源:发表于2021-03-16 18:42 被阅读0次

             背景:APP用到的相关插件,cordova-plugin-bdasr人脸注册和识别、cordova-amap-location获取经纬度坐标及地理位置描述、cordova-plugin-android-permissions应用权限获取及授权。

         一、 签名问题

          apk文件只有签名后才能安装使用,签名的作用一方面保证安装包内文件的完整性,以防文件被篡改导致不可预知的后果;另一方面在安装包内附加应用的开发者信息。

           apk签名一般按照如下流程即可:【相关详细信息参见“创建app数字签名证书”】

         1)创建形成数字签名证书文件,如该文件名为:thiskey.jks

          2)编译完成形成未签名的apk文件,如文件名为:abc-unsigned.apk

           3)对apk文件进行签名,如形成签名文件名为:abc.apk

         签名命令:jarsigner -verbose -keystore thiskey.jks -signedjar abc.apk  -digestalg SHA1 -sigalg MD5withRSA abc-unsigned.apk nankailog

          二、 授权问题

         apk需要授予“存储”、“位置信息”、“相机”权限,否则无法进行脸部识别或者无法获取地理位置定位信息,以及由此导致的各类错误,最终就是相关应用功能无法正常执行。

         虽然可以在移动终端的“设置”功能中手工给应用进行授权,但如果apk安装包的config.xml没有进行正确设置,会导致无法执行正确的手工授权,甚至无法进行授权(即找不到需要的权限进行设置);或者即使config.xml正确设置了,手工授权时也需要操作人员具有一定的专业知识,否则手工操作授权的过程也会降低应用使用的友好体验。

        因此为了方便授权,提高操作的友好性:

       1)安装安卓运行时权限检测插件

    …\ src-cordova> cordova plugin add cordova-plugin-android-permissions

        2)代码中增加权限校验,和赋权功能

    let permissions = cordova.plugins.permissions;
    let p_list = [

    permissions.CAMERA,
    permissions.INTERNET,
    permissions.WRITE_EXTERNAL_STORAGE, permissions.ACCESS_NETWORK_STATE,
    permissions.ACCESS_WIFI_STATE,
    permissions.CHANGE_WIFI_STATE,
    permissions.READ_PHONE_STATE,
    permissions.ACCESS_COARSE_LOCATION, permissions.ACCESS_FINE_LOCATION ];
    permissions.hasPermission(p_list, (status) => {
          if (!status.hasPermission) {
              permissions.requestPermissions(p_list, (status) => {
                  if (!status.hasPermission) { this.$q.notify("请手工打开定位权限!"); }
                   else { //this.$q.notify("已授权!"); }; }, () => { this.$q.notify("授予权限失败!"); }); } else { //this.$q.notify("有权限!"); }; }, () => { this.$q.notify("访问权限失败!"); });

        3)cordova的config.xml的“<platform name="android">”段内增加如下配置信息

    <config-file parent="/*" target="AndroidManifest.xml">
     <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
     <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
     <uses-permission android:name="android.permission.CAMERA" />
     <uses-permission android:name="android.permission.INTERNET" />
     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
     <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> </config-file>

        4)签名的apk安装完成后,第一次执行会提示打开诸多权限,同时打开即可。如果不同意,那就只能手工到移动终端的“设置”功能中手工给应用进行授权:“存储”、“位置信息”、“相机”权限。

        常见问题:

         1)config.xml中需要授予权限的确定依据

         到应用用到的每个plugin中的plugin.xml文件中“uses-permission”查找所涉及的权限,然后汇总填写到config.xml中。

          2)无法扫脸识别、无法获取定位信息时,手工到“设置”功能中手工给应用进行授权:“存储”、“位置信息”、“相机”权限。

         3)如果不配置以上参数,则系统采用默认参数,由此可能导致诸多不可控权限错误。(如果运气好,也可能一切都能正常运行)

         三、app图标

    cordova的config.xml的“<platform name="android">”段内增加如下配置信息:

    <icon density="ldpi" src="res/icon/android/icon-36-ldpi.png" />
    <icon density="mdpi" src="res/icon/android/icon-48-mdpi.png" />
    <icon density="hdpi" src="res/icon/android/icon-72-hdpi.png" />
    <icon density="xhdpi" src="res/icon/android/icon-96-xhdpi.png" />

          当然前提是在以上路径res/icon/android/中增加所需要的图标文件。

         如果不配置以上信息,则采用默认的安卓图标。

         四、跨域访问

         cordova-plugin-bdasr人脸识别插件需要访问百度开放的API,在开发环境下需要通过开发环境中的反向代理功能进行API访问:

    url: '/baiduapi/rest/2.0/face/v3/search?' + qs.stringify(param3),

        在发布版本中,由于APP是直接访问,所以无需反向代理,直接访问API:

    url: 'https://aip.baidubce.com/rest/2.0/face/v3/search?' + qs.stringify(param3),

        常见问题:需要搞清楚开发环境、web发布版本、APP版本的差异性,前两者都需要进行反向代理,当然开发环境的反向代理是开发环境内进行配置支持,WEB发布版本一般需要在服务器端部署nginx以支持反向代理,app则不需要反向代理,直接访问即可。

    相关文章

      网友评论

          本文标题:基于cordova的app发布技巧

          本文链接:https://www.haomeiwen.com/subject/mundcltx.html