HBuilderX

HBuilderX

极客开发工具
uni-app

uni-app

开发一次,多端覆盖
uniCloud

uniCloud

云开发平台
HTML5+

HTML5+

增强HTML5的功能体验
MUI

MUI

上万Star的前端框架

数据筛选,下拉框选择类型,点击后样式不会改变,必须切换后文本字体才会改变,线上组件库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.   包含未经授权而把应用播放或者直播内容(比如音乐、视频和相关封面艺术)用作预览或者截屏的应用将会被拒绝。注意提供用户名和密码的准确性。注意仔细检查产品给你提供上传浏览图片的内容。

收起阅读 »

安卓原生插件引用第三方包问题

自定义基座 原生插件


自定义基座调试原生插件时,引用的第三方包需要放置libs文件夹下,不然引用不到。
官方的文档说aar的包直接放在android目录下就行了,jar包和so文件才需要放到libs文件夹,感觉是误导人。


自定义基座调试原生插件时,引用的第三方包需要放置libs文件夹下,不然引用不到。
官方的文档说aar的包直接放在android目录下就行了,jar包和so文件才需要放到libs文件夹,感觉是误导人。

自定义基座不生成安装包

自定义基座


最近因为要调试自定义的原生插件,于是尝试使用自定义基座,结果点了好多遍都诶有生成自定义基座的安装包,在unpackage-->debug目录下会生成安装和ios的安装包。由于本人习惯问题,把ios的选项给去掉了,而且下面什么渠道包、广告联盟啥的全都取消了,只留了一个自定义基座,可是试了很多次都没有生成基座的安装包。一直没找到是什么原因,后来不经意间把ios什么的框框全都勾上了,一点打包居然生成出了基座的安装包,真是搞不懂什么原因。如果有遇到类似问题的可以试试把所有的勾都勾上在打包。

还有必须要吐槽的就是,制作自定义基座也会把项目提交到服务器打包,不知道是什么原因不能单独制作基座安装包,这样不是浪费服务器资源吗?


自定义基座生成成功的日志应该是这样的,前几次没有生成成功都是直接把项目上传打包了,返回了项目的下载地址(只能下载5次的那个地址)

继续阅读 »


最近因为要调试自定义的原生插件,于是尝试使用自定义基座,结果点了好多遍都诶有生成自定义基座的安装包,在unpackage-->debug目录下会生成安装和ios的安装包。由于本人习惯问题,把ios的选项给去掉了,而且下面什么渠道包、广告联盟啥的全都取消了,只留了一个自定义基座,可是试了很多次都没有生成基座的安装包。一直没找到是什么原因,后来不经意间把ios什么的框框全都勾上了,一点打包居然生成出了基座的安装包,真是搞不懂什么原因。如果有遇到类似问题的可以试试把所有的勾都勾上在打包。

还有必须要吐槽的就是,制作自定义基座也会把项目提交到服务器打包,不知道是什么原因不能单独制作基座安装包,这样不是浪费服务器资源吗?


自定义基座生成成功的日志应该是这样的,前几次没有生成成功都是直接把项目上传打包了,返回了项目的下载地址(只能下载5次的那个地址)

收起阅读 »

uni-app 在APP-PLUS下实现mdns自动发现同网段设备服务

Native.JS

//#ifdef APP-PLUS //条件编译
let vm = this;
let mServerType = '_http._tcp.';//服务类型
let NsdServiceInfo = plus.android.importClass('android.net.nsd.NsdServiceInfo');
let NsdManager = plus.android.importClass('android.net.nsd.NsdManager');
let Context = plus.android.importClass('android.content.Context');
// 导入后可以使用new方法创建类的实例对象
let nsd_service_info = new NsdServiceInfo();
let nsd_manager = new NsdManager();
//获取应用主Activity实例对象系统服务NSD_SERVICE方法
let mNsdManager = plus.android.runtimeMainActivity().getSystemService(Context.NSD_SERVICE);
//实列API接口监听回调函数
let mDiscoveryListener = plus.android.implements('android.net.nsd.NsdManager$DiscoveryListener', {
onServiceFound: function(service) {
//先发现设备服务再执行连接获取数据
//导入service类
plus.android.importClass(service);
//实列化连接服务接口监听回调函数
//注意NsdManager$ResolveListener中间使用$不是“.”
let mResolveListener = plus.android.implements('android.net.nsd.NsdManager$ResolveListener', {
onServiceResolved: function(services) {
//连接服务
let name = services.getServiceName();
let port = services.getPort();
let ip = services.getHost();
plus.android.importClass(ip); //导入services.getHost()类
ip = ip.getHostAddress();
let arry = {
name: name,
port: port,
ip: ip
};
}
});
mNsdManager.resolveService(service, mResolveListener);//启动连接服务
}
});
// 导入mNsdManager Java类对象
plus.android.importClass(mNsdManager);
mNsdManager.discoverServices(mServerType, 1, mDiscoveryListener);//启动监听服务(类型,常量,回调函数)参考java discoverServices需要携带的参数类型
//#endif

plus调用安卓所有原生大致实现方法:
1.let NsdServiceInfo= plus.android.importClass("java类")
2.let nsd_service_info= new NsdServiceInfo() new方法创建类的实例对象
3.let mNsdManager = plus.android.runtimeMainActivity().getSystemService(Context.NSD_SERVICE); //获取应用主Activity实例对象系统服务NSD_SERVICE方法
4.plus.android.implements 声明监听回调方法 (主要通过监听函数获取数据)
5.mNsdManager.discoverServices(mServerType, 1, mDiscoveryListener);//启动监听服务

https://android.googlesource.com/platform/development/+/master/samples/training/NsdChat/src/com/example/android/nsdchat/NsdHelper.java 需要引入的类和整个实现方法参考java源代码

继续阅读 »

//#ifdef APP-PLUS //条件编译
let vm = this;
let mServerType = '_http._tcp.';//服务类型
let NsdServiceInfo = plus.android.importClass('android.net.nsd.NsdServiceInfo');
let NsdManager = plus.android.importClass('android.net.nsd.NsdManager');
let Context = plus.android.importClass('android.content.Context');
// 导入后可以使用new方法创建类的实例对象
let nsd_service_info = new NsdServiceInfo();
let nsd_manager = new NsdManager();
//获取应用主Activity实例对象系统服务NSD_SERVICE方法
let mNsdManager = plus.android.runtimeMainActivity().getSystemService(Context.NSD_SERVICE);
//实列API接口监听回调函数
let mDiscoveryListener = plus.android.implements('android.net.nsd.NsdManager$DiscoveryListener', {
onServiceFound: function(service) {
//先发现设备服务再执行连接获取数据
//导入service类
plus.android.importClass(service);
//实列化连接服务接口监听回调函数
//注意NsdManager$ResolveListener中间使用$不是“.”
let mResolveListener = plus.android.implements('android.net.nsd.NsdManager$ResolveListener', {
onServiceResolved: function(services) {
//连接服务
let name = services.getServiceName();
let port = services.getPort();
let ip = services.getHost();
plus.android.importClass(ip); //导入services.getHost()类
ip = ip.getHostAddress();
let arry = {
name: name,
port: port,
ip: ip
};
}
});
mNsdManager.resolveService(service, mResolveListener);//启动连接服务
}
});
// 导入mNsdManager Java类对象
plus.android.importClass(mNsdManager);
mNsdManager.discoverServices(mServerType, 1, mDiscoveryListener);//启动监听服务(类型,常量,回调函数)参考java discoverServices需要携带的参数类型
//#endif

plus调用安卓所有原生大致实现方法:
1.let NsdServiceInfo= plus.android.importClass("java类")
2.let nsd_service_info= new NsdServiceInfo() new方法创建类的实例对象
3.let mNsdManager = plus.android.runtimeMainActivity().getSystemService(Context.NSD_SERVICE); //获取应用主Activity实例对象系统服务NSD_SERVICE方法
4.plus.android.implements 声明监听回调方法 (主要通过监听函数获取数据)
5.mNsdManager.discoverServices(mServerType, 1, mDiscoveryListener);//启动监听服务

https://android.googlesource.com/platform/development/+/master/samples/training/NsdChat/src/com/example/android/nsdchat/NsdHelper.java 需要引入的类和整个实现方法参考java源代码

收起阅读 »

HbuilderX云编译次数限制

HBuilderX

HbuilderX云编译一天可编译10次。

HbuilderX云编译一天可编译10次。