HBuilderX

HBuilderX

极客开发工具
uni-app

uni-app

开发一次,多端覆盖
uniCloud

uniCloud

云开发平台
HTML5+

HTML5+

增强HTML5的功能体验
MUI

MUI

上万Star的前端框架

谈一下uniapp,自定义camera,来进行人脸识别的

uniapp模板 uniapp uniapp插件 Camera

本人,小白一个,大神可忽略本内容

由于uniapp,在打包成APP的时候不能自定义相机,很多人脸识别的项目,在APP里面只能使用原生,本人也不会原生,很是苦逼,很羡慕能开发原生的,但是也想搞一下人脸识别,迫于无奈,研究属于自己的一套,h5的人脸识别,喜欢的可以研究研究。

自定义相机启动界面

自定义摄像头界面大小,遮罩等

人脸放到框内,自动拍照,保存base64,也快手动拍照

识别到人脸以后,大家可以自行发挥了,如,人脸对比等...

<script>

    //激活摄像头  
    navigator.getUserMedia  = navigator.getUserMedia ||  
      navigator.webkitGetUserMedia ||  
      navigator.mozGetUserMedia ||  
      navigator.msGetUserMedia;  
    navigator.getUserMedia({video:true}, gotStream, noStream);  

    function gotStream(stream) {  
      myVideo.src = URL.createObjectURL(stream);  
      myVideo.onerror = function () {  
        stream.stop();  
      };  
      stream.onended = noStream;  
      myVideo.onloadedmetadata = function () {  
        console.log('摄像头成功打开!');  
      };  
    }  

    function noStream(err){  
        console.log(err);  
    }  

    //激活摄像头end  
    var saveArray = {};  
    window.onload = function () {  
        var video = document.getElementById('video');  
        var canvas = document.getElementById('canvas');  
        var context = canvas.getContext('2d');  

        var tracker = new tracking.ObjectTracker('face');  
        tracker.setInitialScale(4);  
        tracker.setStepSize(2);  
        tracker.setEdgesDensity(0.1);  

        tracking.track('#video', tracker, {camera: true});  

        tracker.on('track', function (event) {  
            context.clearRect(0, 0, canvas.width, canvas.height);  

            event.data.forEach(function (rect) {  
                context.strokeStyle = '#fff';  
                context.strokeRect(rect.x, rect.y, rect.width, rect.height);  
                //context.font = '11px Helvetica';   
                context.fillStyle = "#fff";  

                   context.fillText('x: ' + rect.x + 'px', rect.x + rect.width + 5, rect.y + 11);  
                   context.fillText('y: ' + rect.y + 'px', rect.x + rect.width + 5, rect.y + 22);  

                saveArray.x = rect.x;  
                saveArray.y = rect.y;  
                saveArray.width = rect.width;  
                saveArray.height = rect.height;  

            });  
        });  
        setInterval(function () {    
            //console.log(saveArray);  
            if (saveArray.x > 80 &&  
                    saveArray.x + saveArray.width < 260 &&  
                    saveArray.y > 90 &&  
                    saveArray.y + saveArray.height < 260 &&  
                    saveArray.width < 150  
                    && saveArray.height < 150) {  
                console.log(saveArray);  
                getPhoto();  
                for (var key in saveArray) {  
                    delete saveArray[key];  
                }  
            }   
        }, 2000);  
        function getPhoto() {  

            context2.drawImage(video, 100, 120, 260, 380, 0, 0, 170, 255); //将video对象内指定的区域捕捉绘制到画布上指定的区域,实现拍照。  

        }  

        var btn = document.getElementById("btn");  
        btn.onclick= function () {  
            getPhoto();  
        }  

        var canvas1 = document.getElementById('canvas1');  
        var context1 = canvas1.getContext('2d');  
        var can = document.getElementById('shortCut');  
        var context2 = can.getContext('2d');  
        context1.strokeStyle = "#69fff1";  
          context1.moveTo(63, 66); //上线 x,y  
          context1.lineTo(257, 66); //右  
          context1.lineTo(257, 321); //下  
          context1.lineTo(63, 321);//左  
          context1.lineTo(63, 66);//左  
        context1.stroke();  

        var img = document.getElementById("img")  

        function convertCanvasToImage(canvas) {  
            var image = new Image();  
            image.src = canvas.toDataURL("image/png");  
            return image;  
        }  

        var keepImg = document.getElementById("keepImg");  
        keepImg.onclick = function () {  
            var photoImg = document.createElement("img");  
            photoImg.src = convertCanvasToImage(can).src;  
            img.appendChild(photoImg);  

            console.log(convertCanvasToImage(can).src);  
        }  

    };  

</script>  
继续阅读 »

本人,小白一个,大神可忽略本内容

由于uniapp,在打包成APP的时候不能自定义相机,很多人脸识别的项目,在APP里面只能使用原生,本人也不会原生,很是苦逼,很羡慕能开发原生的,但是也想搞一下人脸识别,迫于无奈,研究属于自己的一套,h5的人脸识别,喜欢的可以研究研究。

自定义相机启动界面

自定义摄像头界面大小,遮罩等

人脸放到框内,自动拍照,保存base64,也快手动拍照

识别到人脸以后,大家可以自行发挥了,如,人脸对比等...

<script>

    //激活摄像头  
    navigator.getUserMedia  = navigator.getUserMedia ||  
      navigator.webkitGetUserMedia ||  
      navigator.mozGetUserMedia ||  
      navigator.msGetUserMedia;  
    navigator.getUserMedia({video:true}, gotStream, noStream);  

    function gotStream(stream) {  
      myVideo.src = URL.createObjectURL(stream);  
      myVideo.onerror = function () {  
        stream.stop();  
      };  
      stream.onended = noStream;  
      myVideo.onloadedmetadata = function () {  
        console.log('摄像头成功打开!');  
      };  
    }  

    function noStream(err){  
        console.log(err);  
    }  

    //激活摄像头end  
    var saveArray = {};  
    window.onload = function () {  
        var video = document.getElementById('video');  
        var canvas = document.getElementById('canvas');  
        var context = canvas.getContext('2d');  

        var tracker = new tracking.ObjectTracker('face');  
        tracker.setInitialScale(4);  
        tracker.setStepSize(2);  
        tracker.setEdgesDensity(0.1);  

        tracking.track('#video', tracker, {camera: true});  

        tracker.on('track', function (event) {  
            context.clearRect(0, 0, canvas.width, canvas.height);  

            event.data.forEach(function (rect) {  
                context.strokeStyle = '#fff';  
                context.strokeRect(rect.x, rect.y, rect.width, rect.height);  
                //context.font = '11px Helvetica';   
                context.fillStyle = "#fff";  

                   context.fillText('x: ' + rect.x + 'px', rect.x + rect.width + 5, rect.y + 11);  
                   context.fillText('y: ' + rect.y + 'px', rect.x + rect.width + 5, rect.y + 22);  

                saveArray.x = rect.x;  
                saveArray.y = rect.y;  
                saveArray.width = rect.width;  
                saveArray.height = rect.height;  

            });  
        });  
        setInterval(function () {    
            //console.log(saveArray);  
            if (saveArray.x > 80 &&  
                    saveArray.x + saveArray.width < 260 &&  
                    saveArray.y > 90 &&  
                    saveArray.y + saveArray.height < 260 &&  
                    saveArray.width < 150  
                    && saveArray.height < 150) {  
                console.log(saveArray);  
                getPhoto();  
                for (var key in saveArray) {  
                    delete saveArray[key];  
                }  
            }   
        }, 2000);  
        function getPhoto() {  

            context2.drawImage(video, 100, 120, 260, 380, 0, 0, 170, 255); //将video对象内指定的区域捕捉绘制到画布上指定的区域,实现拍照。  

        }  

        var btn = document.getElementById("btn");  
        btn.onclick= function () {  
            getPhoto();  
        }  

        var canvas1 = document.getElementById('canvas1');  
        var context1 = canvas1.getContext('2d');  
        var can = document.getElementById('shortCut');  
        var context2 = can.getContext('2d');  
        context1.strokeStyle = "#69fff1";  
          context1.moveTo(63, 66); //上线 x,y  
          context1.lineTo(257, 66); //右  
          context1.lineTo(257, 321); //下  
          context1.lineTo(63, 321);//左  
          context1.lineTo(63, 66);//左  
        context1.stroke();  

        var img = document.getElementById("img")  

        function convertCanvasToImage(canvas) {  
            var image = new Image();  
            image.src = canvas.toDataURL("image/png");  
            return image;  
        }  

        var keepImg = document.getElementById("keepImg");  
        keepImg.onclick = function () {  
            var photoImg = document.createElement("img");  
            photoImg.src = convertCanvasToImage(can).src;  
            img.appendChild(photoImg);  

            console.log(convertCanvasToImage(can).src);  
        }  

    };  

</script>  
收起阅读 »

uni-app 适配刘海屏

自定义导航

自定义头部导航组件 会出现被刘海屏遮挡的问题 这样需要给导航添加一个padding-top:var(--status-bar-height);


`var(--status-bar-height)是计算状态栏的高度  
``

自定义头部导航组件 会出现被刘海屏遮挡的问题 这样需要给导航添加一个padding-top:var(--status-bar-height);


`var(--status-bar-height)是计算状态栏的高度  
``

uni-app 安卓 图片自适应

图片加工

安卓端和h5 端不一样,H5端img 写完宽度就可以自适应高度,uni-app 需要在img中 添加属性 mode="widthFix"
<img src=" " mode="widthFix">

继续阅读 »

安卓端和h5 端不一样,H5端img 写完宽度就可以自适应高度,uni-app 需要在img中 添加属性 mode="widthFix"
<img src=" " mode="widthFix">

收起阅读 »

iOS APP上架的详细步骤!

iOS打包

HBuilderX打包iOS应用需要私钥证书p12文件及profile文件.mobileprovision

下面进行详细介绍申请iOS证书打包上传测试提交审核过程!

HBuilderX打包上架App Store审核分6步进行。

1、安装iOS上架辅助软件Appuploader

2、申请iOS发布证书(p12)

3、申请iOS发布描述文件(mobileprovision)

4、打包ipa

5、上传ipa到iTunes Connect

6、TestFlight方式安装到苹果手机测试

7、设置APP各项信息提交审核

一、下载安装iOS上架辅助软件Appuploader

Appuploader可以辅助在Windows、linux或mac系统直接申请iOS证书p12,及上传ipa到App Store

方便快捷,配合本教程使用,可以快速掌握如何真机测试及上架!

Appuploader下载安装

下载软件包后解压直接使用,无需安装。

一、申请iOS发布证书(p12文件)

发布证书用于上架,证书有p12及mobileprovision两个文件,配套使用,先申请p12!

1.1、点击证书进入!

点击右下角 ADD选择

类型:下拉选择发布证书

证书名称:不要中文、随意设置

邮箱:随意

密码:证书的密码、比如设置123这样,不用很复杂,记好、打包时要用、很重要

应用id:这里不用选

点击ok创建。

注意:iOS发布证书最多能申请3个,如果账号已经有3个发布证书了,将申请报错(如下图)

p12有数量限制,但可以公用! 也就是一个p12可以对应无数个描述文件(mobileprovision)组成无数套证书上架不同的APP!

也可以删掉之前的发布证书,重新创建,不会影响已上架的app。

1.2、创建成功后,找到刚创建的发布证书(iOS Distribution这个类型的就是发布证书,如果之前创建过请看过期时间就知道哪个是新创建的了),点击p12 文件,下载保存.p12证书文件到电脑。

二、创建iOS发布描述文件(.mobileprovision文件)

2.1、返回Appuploader首页,选择描述文件进去。

在申请ios描述文件之前先加个应用id(如果之前加过要用以前加过的应用id,可跳过此步)

应用id:又称套装id,appid,BundleID,包名,各打包平台叫法不同!

点击右下角 ADD,在应用id项,点击下拉三角符号即可看到以前加过的记录!

初次使用或者需要上架另一个项目app需要先创建一个新的应用id!

2.2、添加新应用ID步骤,点击添加应用id!(不同的APP需要编写不同的应用id相当于app的身份证)

应用id:三段式格式、如app名称是淘宝,可以编写为com.app.taobao,自由编写!不能重复!具有唯一性@

名称:数字或者字母,自由编写,不要中文,不能重复。

点击ok添加!

如果添加报错(应用id具有唯一性,可能重复添加或者别人用过这个应用id),解决办法就是查看自己是否已经加过,或者修改编下应用id再添加。

点击ok只要没弹出报错就是添加成功了,注意先关掉窗口,重新点右下角 ADD进入下拉应用id可查看刚添加的应用id是否存在。

2.2、添加成功后,点击右下角 ADD,进入添加界面!

Type:下拉选择发布版profile

应用id:选择对应的应用id(又称套装id,appid,BundleID,包名)

证书:选中全部就行

Devices:设备这里不像选开发版profile时会出现,发布版不用选。

输入名称:不要中文,随意,123之类的就行,注意不要跟之前申请过的名称一样),点击ok创建。

2.3、选择刚创建的发布版描述文件(iOS Distribution这个类型的就是发布描述文件,找刚创建的输入的名称),点击Download下载,保存到电脑

申请到p12及mobileprovision这两个iOS证书文件即可去打包了!

四、iOS打包IPA

4.1、打开HBuilderX工具,选择开发好的项目,点击发行,选择发行为原生安装包。

4.2、选择iOS打包,支持的设备类型(可以选择支持iPhone和支持ipad),选择使用苹果证书

AppID:跟申请证书描述.mobileprovision时选择的要一致(又称套装id,appid,BundleID,应用id,包名)

profile文件:选择上传配置文件.mobileprovision

私钥证书:上传.p12文件

私钥密码:输入创建p12设置的密码。

然后点击打包。

4.3、打包成功后,下载保存ipa,这个ipa包就能安装到手机测试了。

五、上传ipa到iTunes Connect

4.1、上传前先登录iTunes Connect,点击我的APP进入创建一个APP

https://itunesconnect.apple.com/login

4.2、进入点击左上角 号选择新建APP,选择平台iOS,

应用名称:APP的名称

语言:APP的语言,中文还是英文。

套装ID:(应用id、appid、包名,跟申请证书使用的要保持一致)

sku:不能写中文,自己用拼音随便编一个,好识别就行,如app叫淘宝,就输入taobao。

用户访问权限:选完全访问权限

创建后即可上传ipa到App Store后台了

5.1、上传IPA到App Store

先创建一个APP专用密码,配置到Appuploader软件才能上传!

苹果一种机制,上传ipa需要一个特定的APP专用密码,app-specific password

打开网站https://appleid.apple.com/zh_CN

登录苹果开发者账号

登录进去找到安全项目,点击生成专用密码。

密码标签随便输入,123,app等之类的都行。

点击创建生成,(注意密码标签不是专用密码,是由苹果系统生成的一串密码)专用密码就是下面这个样子的密码,把这个密码复制,打开Appuploader

点击右上角,选择设置,把上传专用密码复制上去,同时勾选上保存密码,点击Save保存,然后再回去提交ipa上传就可以正常上传了。

5.2、输入专用密码点击OK保存后,点击单个ipa按钮提交

5.3、选择刚打包的ipa包

5.4Appuploader将自动上传你的IPA,包如果很大需要上传一段时间,当出现以下提示时(packages were  uploaded successfully 进度条蓝色),说明上传成功。

如果进度条红色说明上传失败,通过下面的链接,找解决方案,或者加技术支持解答。

上传ipa常见错误解决方案

5.5上传成功后到后台查看上传的版本

packages were  uploaded successfully 进度条蓝色,ipa上传成功后,登录iTunes Connect  https://itunesconnect.apple.com/login后台查看上传的ipa

进入APP,点击活动,所有构建版本选项(下图所示),这里会显示上传成功的构建版本,如果ipa包没问题刚上传会显示正在处理!

如果没有出现版本,请查看下面的链接解决

成功上传ipa但iTunes Connect后台没有构建版本解决办法

继续阅读 »

HBuilderX打包iOS应用需要私钥证书p12文件及profile文件.mobileprovision

下面进行详细介绍申请iOS证书打包上传测试提交审核过程!

HBuilderX打包上架App Store审核分6步进行。

1、安装iOS上架辅助软件Appuploader

2、申请iOS发布证书(p12)

3、申请iOS发布描述文件(mobileprovision)

4、打包ipa

5、上传ipa到iTunes Connect

6、TestFlight方式安装到苹果手机测试

7、设置APP各项信息提交审核

一、下载安装iOS上架辅助软件Appuploader

Appuploader可以辅助在Windows、linux或mac系统直接申请iOS证书p12,及上传ipa到App Store

方便快捷,配合本教程使用,可以快速掌握如何真机测试及上架!

Appuploader下载安装

下载软件包后解压直接使用,无需安装。

一、申请iOS发布证书(p12文件)

发布证书用于上架,证书有p12及mobileprovision两个文件,配套使用,先申请p12!

1.1、点击证书进入!

点击右下角 ADD选择

类型:下拉选择发布证书

证书名称:不要中文、随意设置

邮箱:随意

密码:证书的密码、比如设置123这样,不用很复杂,记好、打包时要用、很重要

应用id:这里不用选

点击ok创建。

注意:iOS发布证书最多能申请3个,如果账号已经有3个发布证书了,将申请报错(如下图)

p12有数量限制,但可以公用! 也就是一个p12可以对应无数个描述文件(mobileprovision)组成无数套证书上架不同的APP!

也可以删掉之前的发布证书,重新创建,不会影响已上架的app。

1.2、创建成功后,找到刚创建的发布证书(iOS Distribution这个类型的就是发布证书,如果之前创建过请看过期时间就知道哪个是新创建的了),点击p12 文件,下载保存.p12证书文件到电脑。

二、创建iOS发布描述文件(.mobileprovision文件)

2.1、返回Appuploader首页,选择描述文件进去。

在申请ios描述文件之前先加个应用id(如果之前加过要用以前加过的应用id,可跳过此步)

应用id:又称套装id,appid,BundleID,包名,各打包平台叫法不同!

点击右下角 ADD,在应用id项,点击下拉三角符号即可看到以前加过的记录!

初次使用或者需要上架另一个项目app需要先创建一个新的应用id!

2.2、添加新应用ID步骤,点击添加应用id!(不同的APP需要编写不同的应用id相当于app的身份证)

应用id:三段式格式、如app名称是淘宝,可以编写为com.app.taobao,自由编写!不能重复!具有唯一性@

名称:数字或者字母,自由编写,不要中文,不能重复。

点击ok添加!

如果添加报错(应用id具有唯一性,可能重复添加或者别人用过这个应用id),解决办法就是查看自己是否已经加过,或者修改编下应用id再添加。

点击ok只要没弹出报错就是添加成功了,注意先关掉窗口,重新点右下角 ADD进入下拉应用id可查看刚添加的应用id是否存在。

2.2、添加成功后,点击右下角 ADD,进入添加界面!

Type:下拉选择发布版profile

应用id:选择对应的应用id(又称套装id,appid,BundleID,包名)

证书:选中全部就行

Devices:设备这里不像选开发版profile时会出现,发布版不用选。

输入名称:不要中文,随意,123之类的就行,注意不要跟之前申请过的名称一样),点击ok创建。

2.3、选择刚创建的发布版描述文件(iOS Distribution这个类型的就是发布描述文件,找刚创建的输入的名称),点击Download下载,保存到电脑

申请到p12及mobileprovision这两个iOS证书文件即可去打包了!

四、iOS打包IPA

4.1、打开HBuilderX工具,选择开发好的项目,点击发行,选择发行为原生安装包。

4.2、选择iOS打包,支持的设备类型(可以选择支持iPhone和支持ipad),选择使用苹果证书

AppID:跟申请证书描述.mobileprovision时选择的要一致(又称套装id,appid,BundleID,应用id,包名)

profile文件:选择上传配置文件.mobileprovision

私钥证书:上传.p12文件

私钥密码:输入创建p12设置的密码。

然后点击打包。

4.3、打包成功后,下载保存ipa,这个ipa包就能安装到手机测试了。

五、上传ipa到iTunes Connect

4.1、上传前先登录iTunes Connect,点击我的APP进入创建一个APP

https://itunesconnect.apple.com/login

4.2、进入点击左上角 号选择新建APP,选择平台iOS,

应用名称:APP的名称

语言:APP的语言,中文还是英文。

套装ID:(应用id、appid、包名,跟申请证书使用的要保持一致)

sku:不能写中文,自己用拼音随便编一个,好识别就行,如app叫淘宝,就输入taobao。

用户访问权限:选完全访问权限

创建后即可上传ipa到App Store后台了

5.1、上传IPA到App Store

先创建一个APP专用密码,配置到Appuploader软件才能上传!

苹果一种机制,上传ipa需要一个特定的APP专用密码,app-specific password

打开网站https://appleid.apple.com/zh_CN

登录苹果开发者账号

登录进去找到安全项目,点击生成专用密码。

密码标签随便输入,123,app等之类的都行。

点击创建生成,(注意密码标签不是专用密码,是由苹果系统生成的一串密码)专用密码就是下面这个样子的密码,把这个密码复制,打开Appuploader

点击右上角,选择设置,把上传专用密码复制上去,同时勾选上保存密码,点击Save保存,然后再回去提交ipa上传就可以正常上传了。

5.2、输入专用密码点击OK保存后,点击单个ipa按钮提交

5.3、选择刚打包的ipa包

5.4Appuploader将自动上传你的IPA,包如果很大需要上传一段时间,当出现以下提示时(packages were  uploaded successfully 进度条蓝色),说明上传成功。

如果进度条红色说明上传失败,通过下面的链接,找解决方案,或者加技术支持解答。

上传ipa常见错误解决方案

5.5上传成功后到后台查看上传的版本

packages were  uploaded successfully 进度条蓝色,ipa上传成功后,登录iTunes Connect  https://itunesconnect.apple.com/login后台查看上传的ipa

进入APP,点击活动,所有构建版本选项(下图所示),这里会显示上传成功的构建版本,如果ipa包没问题刚上传会显示正在处理!

如果没有出现版本,请查看下面的链接解决

成功上传ipa但iTunes Connect后台没有构建版本解决办法

收起阅读 »

数据筛选,下拉框选择类型,点击后样式不会改变,必须切换后文本字体才会改变,线上组件库ThorUI也有同样的问题!在APP上是没问题的,但是在H5上就有问题了...

vue数据是实时更新的,只要数据改变,页面就是及时渲染到页面上,但是在开发实际项目的过程中遇到了问题,线上ThorUI组件也有类似问题,下拉框筛选,点击选择类型,结果是选中的数据类型没有做样式改变的,APP上是没有问题的,H5出现的问题!


就是图片中的样式
再点击子级的时候做样式改变,数组中添加selected字段,点击即为选中,那么selected就是为true的这样页面根本不会做刷新,我也是第一次做前端,所以有些地方理解的不够深刻,这有可能是根本原因吧!
解决的方式也是简单粗暴:就是再点击后选中后,改变里边要展示字段的内容,我是在要展示的文本中加了空格,提示页面数据刷新的...
就这么简单了!可能是我不太了解vue吧,如果有大神还请多多指教啊!

继续阅读 »

vue数据是实时更新的,只要数据改变,页面就是及时渲染到页面上,但是在开发实际项目的过程中遇到了问题,线上ThorUI组件也有类似问题,下拉框筛选,点击选择类型,结果是选中的数据类型没有做样式改变的,APP上是没有问题的,H5出现的问题!


就是图片中的样式
再点击子级的时候做样式改变,数组中添加selected字段,点击即为选中,那么selected就是为true的这样页面根本不会做刷新,我也是第一次做前端,所以有些地方理解的不够深刻,这有可能是根本原因吧!
解决的方式也是简单粗暴:就是再点击后选中后,改变里边要展示字段的内容,我是在要展示的文本中加了空格,提示页面数据刷新的...
就这么简单了!可能是我不太了解vue吧,如果有大神还请多多指教啊!

收起阅读 »

震惊!安卓推送SDK集成居然如此简单!

消息推送

概述

公司准备采用个推作为第三方推送平台,我作为客户端的头号小鸟,掐指一算已经毕业 0.1 年了,Leader 准备把这个简单而又独立的功能点交给我来处理,我紧张兮兮的打开官网集成文档 学习了起来。其实早在自己大二的时候就集成过个推 SDK,溜达一圈又回来集成个推推送SDK了,发现现在的个推 SDK 与当年相比,集成起来真的方便多了。这次集成的是Android推送SDK,希望这篇文章,可以让同学们可以更加快捷的集成个推推送。

思维导图

在这里插入图片描述

详细步骤

下载 demo

我的师傅大鸟哥告诉我,集成各类 SDK 的第一步骤都是下载个 Demo,先把 Demo 跑起来看看是什么鬼。咱也不敢问,咱也不敢说,先去下载个Demo玩玩。我选择的是国内版本的个推 SDK,大家可以自行选择要下载的版本。使用 AS 3.1 把 Getui_SDK_Demo_AS_maven 这个工程直接运行起来,出现了下面这个界面(此处已经对我个人参数进行了手动马赛克)。

在这里插入图片描述
好了,按我大鸟哥的意思至少 demo 已经成功运行起来了,接下去就是去把上述的 APPID,APPKey 等参数换成自己的,那么这些参数又是怎么来的呢?

创建个推应用

看完 Demo 后,慌兮兮打开官网集成文档,原来那些参数是需要创建应用才会获得的,而 cid 是个推SDK 回调的,没啥说的,那就 “注册登录-创建应用-获取配置” 三连击

注册登录账号

GTAccount

创建应用

登入成功后,点击我的应用进入,再接着点击右上角的《创建应用》就可以创建属于自己的应用了,因为我已经创建完成,所以此处有城墙一样厚的马赛克

继续阅读 »

概述

公司准备采用个推作为第三方推送平台,我作为客户端的头号小鸟,掐指一算已经毕业 0.1 年了,Leader 准备把这个简单而又独立的功能点交给我来处理,我紧张兮兮的打开官网集成文档 学习了起来。其实早在自己大二的时候就集成过个推 SDK,溜达一圈又回来集成个推推送SDK了,发现现在的个推 SDK 与当年相比,集成起来真的方便多了。这次集成的是Android推送SDK,希望这篇文章,可以让同学们可以更加快捷的集成个推推送。

思维导图

在这里插入图片描述

详细步骤

下载 demo

我的师傅大鸟哥告诉我,集成各类 SDK 的第一步骤都是下载个 Demo,先把 Demo 跑起来看看是什么鬼。咱也不敢问,咱也不敢说,先去下载个Demo玩玩。我选择的是国内版本的个推 SDK,大家可以自行选择要下载的版本。使用 AS 3.1 把 Getui_SDK_Demo_AS_maven 这个工程直接运行起来,出现了下面这个界面(此处已经对我个人参数进行了手动马赛克)。

在这里插入图片描述
好了,按我大鸟哥的意思至少 demo 已经成功运行起来了,接下去就是去把上述的 APPID,APPKey 等参数换成自己的,那么这些参数又是怎么来的呢?

创建个推应用

看完 Demo 后,慌兮兮打开官网集成文档,原来那些参数是需要创建应用才会获得的,而 cid 是个推SDK 回调的,没啥说的,那就 “注册登录-创建应用-获取配置” 三连击

注册登录账号

GTAccount

创建应用

登入成功后,点击我的应用进入,再接着点击右上角的《创建应用》就可以创建属于自己的应用了,因为我已经创建完成,所以此处有城墙一样厚的马赛克

收起阅读 »

先选择图片,前台进行压缩,再上传uploadFile

uni_app

应后台要求,上传得图片不得大于500kb,但我发现拍照或者相册里面的照片普遍大于1M,试用多种方法之后,终于在移动端测试成功,上代码
1.例-------个别参数根据需求而定,本人小白一个,欢迎大家给出更好的建议。

2.首先选择图片,uni.chooseImage,

3.执行uni.uploadFile,上传图片到服务器,(这之前也会有uploadFile:fail timeout,就是因为图片太大的原因),此处要注意同步发送请求,在上传之前,先等压缩执行完成,并返回压缩之后的图片地址,下图中上传成功后的业务代码根据个人需求写

4.最后放上压缩图片代码,写的很详细,结合 plus.zip.compressImage 压缩,新的目标地址区分原图片地址很好用,加上overwrite: true,覆盖生成新文件。总之连我这个小白都研究出来了,感觉还是比较清晰的。
参数意义具体见:http://www.html5plus.org/doc/zh_cn/zip.html#plus.zip.compressImage

5.这是后台打印的信息

继续阅读 »

应后台要求,上传得图片不得大于500kb,但我发现拍照或者相册里面的照片普遍大于1M,试用多种方法之后,终于在移动端测试成功,上代码
1.例-------个别参数根据需求而定,本人小白一个,欢迎大家给出更好的建议。

2.首先选择图片,uni.chooseImage,

3.执行uni.uploadFile,上传图片到服务器,(这之前也会有uploadFile:fail timeout,就是因为图片太大的原因),此处要注意同步发送请求,在上传之前,先等压缩执行完成,并返回压缩之后的图片地址,下图中上传成功后的业务代码根据个人需求写

4.最后放上压缩图片代码,写的很详细,结合 plus.zip.compressImage 压缩,新的目标地址区分原图片地址很好用,加上overwrite: true,覆盖生成新文件。总之连我这个小白都研究出来了,感觉还是比较清晰的。
参数意义具体见:http://www.html5plus.org/doc/zh_cn/zip.html#plus.zip.compressImage

5.这是后台打印的信息

收起阅读 »

uni swiper的高度是写死的,并不能很好的运用到实际的业务中,希望官方修改swiper的高度为内容适应,感谢~!

swiper

自己将CSS修改后,只能适用于H5端,APP和小程序无法实现,希望官方大佬能解决这个问题。谢谢。

自己将CSS修改后,只能适用于H5端,APP和小程序无法实现,希望官方大佬能解决这个问题。谢谢。

发布到谷歌play 报错 要求64位 请向应用中添加 64 位和 32 位原生代码

错误
此版本不符合 Google Play 关于提供 64 位版本应用的规定

以下 APK 或 App Bundle 面向 64 位设备,但只有 32 位原生代码:304。

请向应用中添加 64 位和 32 位原生代码。您可以使用 Android App Bundle 发布格式来自动确保每种设备架构仅接收所需要的原生代码。这样可避免增加应用的总大小。

方案:
参考 https://ask.dcloud.net.cn/article/36195
需要将(如图)

继续阅读 »

错误
此版本不符合 Google Play 关于提供 64 位版本应用的规定

以下 APK 或 App Bundle 面向 64 位设备,但只有 32 位原生代码:304。

请向应用中添加 64 位和 32 位原生代码。您可以使用 Android App Bundle 发布格式来自动确保每种设备架构仅接收所需要的原生代码。这样可避免增加应用的总大小。

方案:
参考 https://ask.dcloud.net.cn/article/36195
需要将(如图)

收起阅读 »

uniapp px转upx 自动转换方法

upx uniapp

修改less插件实现px转upx
1、安装插件 less
2、找到HBuilderX\plugins\compile-less\node_modules\less\lib\less\parse.js


input=input.replace(/\b(\d+(.\d+)?)px\b/ig, "$1upx")//替换upx

添加一行正则转换规则

保存会提示没有权限修改文件权限在保存就ok了

继续阅读 »

修改less插件实现px转upx
1、安装插件 less
2、找到HBuilderX\plugins\compile-less\node_modules\less\lib\less\parse.js


input=input.replace(/\b(\d+(.\d+)?)px\b/ig, "$1upx")//替换upx

添加一行正则转换规则

保存会提示没有权限修改文件权限在保存就ok了

收起阅读 »

iOS上架元数据被拒相关问题解答

iOS

注意:元素数据被拒绝不需要重新打包上传ipa,修改问题后回复即可!

iOS APP上架被拒重新提交审核教程

http://www.applicationloader.net/blog/zh/1431.html

关于元数据被拒绝(元数据名称、描述、评级、排名等)

1.       应用或者元数据中提到其他任何移动平台都将会被拒绝。

2.       带有占位符文本的应用将会被拒绝

3.       应用程序的名称、描述、截图或者预览与应用的内容和功能不相关将会被拒绝。

4.       为了不让用户产生困惑,iTunes Connect中的应用名称应该和展示在设备上的应用名称一致。

5.       应用的大图标和小图标要一致,以免造成混淆。

6.       图标、截图以及预览以及当Apple TV应用被展示在Apple TV主界面顶部的时候不符合4+年龄评级的应用将会被拒绝。7.       分类与内容选择不适合应用内容的程序将会被拒绝。

8.       开发者有责任为其程序指定适合的评级。不恰当的评级可能会由苹果公司进行修改或者删除。9.       开发者有责任为其应用指定恰当的关键字。不恰当的关键词可能会被苹果公司修改或删除。

10.   试图操控或者欺骗用户评价,或使用虚假/付费购买评价的方式在App Store排行榜作弊,或者采用其他不正当方式)以提升排名的开发者将会被苹果从iOS开发者项目中除名。

11.   在安装或打开之前,推荐用户重启iOS设备的应用将会被拒绝。

12.   提交审核的所有应用都应包含能正常运行的URL,比如支持服务URL和私有政策URL。

13.   应用程序的截图、预览或者营销文本没有清晰地指出附加内容或项目需要额外单独购买(比如使用IAP)将会被拒绝。

14.   App预览只能是使用应用本身捕捉的视频、旁白、文本以及设计轮廓,否则应用将会被拒绝。

15.   在未经允许的情况下展示真实个人信息的应用将会被拒绝。16.   应用预览只能使用在所有选定地区内经过授权许可的音乐。

17.   包含未经授权而把应用播放或者直播内容(比如音乐、视频和相关封面艺术)用作预览或者截屏的应用将会被拒绝。注意提供用户名和密码的准确性。注意仔细检查产品给你提供上传浏览图片的内容。

继续阅读 »

注意:元素数据被拒绝不需要重新打包上传ipa,修改问题后回复即可!

iOS APP上架被拒重新提交审核教程

http://www.applicationloader.net/blog/zh/1431.html

关于元数据被拒绝(元数据名称、描述、评级、排名等)

1.       应用或者元数据中提到其他任何移动平台都将会被拒绝。

2.       带有占位符文本的应用将会被拒绝

3.       应用程序的名称、描述、截图或者预览与应用的内容和功能不相关将会被拒绝。

4.       为了不让用户产生困惑,iTunes Connect中的应用名称应该和展示在设备上的应用名称一致。

5.       应用的大图标和小图标要一致,以免造成混淆。

6.       图标、截图以及预览以及当Apple TV应用被展示在Apple TV主界面顶部的时候不符合4+年龄评级的应用将会被拒绝。7.       分类与内容选择不适合应用内容的程序将会被拒绝。

8.       开发者有责任为其程序指定适合的评级。不恰当的评级可能会由苹果公司进行修改或者删除。9.       开发者有责任为其应用指定恰当的关键字。不恰当的关键词可能会被苹果公司修改或删除。

10.   试图操控或者欺骗用户评价,或使用虚假/付费购买评价的方式在App Store排行榜作弊,或者采用其他不正当方式)以提升排名的开发者将会被苹果从iOS开发者项目中除名。

11.   在安装或打开之前,推荐用户重启iOS设备的应用将会被拒绝。

12.   提交审核的所有应用都应包含能正常运行的URL,比如支持服务URL和私有政策URL。

13.   应用程序的截图、预览或者营销文本没有清晰地指出附加内容或项目需要额外单独购买(比如使用IAP)将会被拒绝。

14.   App预览只能是使用应用本身捕捉的视频、旁白、文本以及设计轮廓,否则应用将会被拒绝。

15.   在未经允许的情况下展示真实个人信息的应用将会被拒绝。16.   应用预览只能使用在所有选定地区内经过授权许可的音乐。

17.   包含未经授权而把应用播放或者直播内容(比如音乐、视频和相关封面艺术)用作预览或者截屏的应用将会被拒绝。注意提供用户名和密码的准确性。注意仔细检查产品给你提供上传浏览图片的内容。

收起阅读 »