HBuilderX

HBuilderX

极客开发工具
uni-app

uni-app

开发一次,多端覆盖
uniCloud

uniCloud

云开发平台
HTML5+

HTML5+

增强HTML5的功能体验
MUI

MUI

上万Star的前端框架

关于离线推送的问题

第三方离线推送基本是不可能的没建议使用厂商的推送sdk

目前第三方推送都无法保证关闭应用过后还可以收到推送消息,这个是手机定制ROM对信鸽service的限制问题,信鸽的一切活动都需要建立在信鸽的service能够正常联网运行,service被终止后,由系统、安全软件和用户操作限定是否能够再次启动
QQ,微信是系统级别的应用白名单,相关的service不会因为关闭应用而退出,所以用户感知推出应用过后还可以收到消息,其实相关的service 还是能够在后台存活的
Android端在应用退出,信鸽service和信鸽的服务器断开连接后,这个时候给这个设备下发的消息,会变成离线消息,离线消息最多保存72小时,每个设备最多保存两条,如果有多条离线消息。在关闭应用期间推送的消息,如开启应用无法收到,请检查是否调用了反注册接口:XGPushManager.unregisterPush(this);

继续阅读 »

第三方离线推送基本是不可能的没建议使用厂商的推送sdk

目前第三方推送都无法保证关闭应用过后还可以收到推送消息,这个是手机定制ROM对信鸽service的限制问题,信鸽的一切活动都需要建立在信鸽的service能够正常联网运行,service被终止后,由系统、安全软件和用户操作限定是否能够再次启动
QQ,微信是系统级别的应用白名单,相关的service不会因为关闭应用而退出,所以用户感知推出应用过后还可以收到消息,其实相关的service 还是能够在后台存活的
Android端在应用退出,信鸽service和信鸽的服务器断开连接后,这个时候给这个设备下发的消息,会变成离线消息,离线消息最多保存72小时,每个设备最多保存两条,如果有多条离线消息。在关闭应用期间推送的消息,如开启应用无法收到,请检查是否调用了反注册接口:XGPushManager.unregisterPush(this);

收起阅读 »

分享一个查看APK信息的工具

uniapp

比如申请微信开放平台 安卓端需要输入签名。
比如申请地图 IOS 需要包名 和签名这些。可以利用下面的软件去查看 蛮方便的,是京东的一个。

下载地址

继续阅读 »

比如申请微信开放平台 安卓端需要输入签名。
比如申请地图 IOS 需要包名 和签名这些。可以利用下面的软件去查看 蛮方便的,是京东的一个。

下载地址

收起阅读 »

推荐使用rpx替代upx的公告

rpx upx

upx在2018年就推出了,其初衷是为了让微信的rpx机制可以跨全端使用。

在普通css写法里,upx会被编译器编译。但动态绑定时,upx无法被准确编译,此时官方提出了使用uni.upx2px()方法,用来动态计算。

后来其他几家小程序平台陆续都兼容了rpx机制,rpx不再是微信的专用单位,而成为了这个行业的通用单位。

最近官方收到很多开发小程序的用户投诉upx不能像rpx那样直接支持动态绑定,还得再使用uni.upx2px方法。

官方反思了策略,既然微信不可能支持upx的动态绑定,不如我们在App端和H5端来支持rpx的动态绑定。这样rpx就可以全端通用,且支持动态绑定,不再需要uni.upx2px方法。

从HBuilderX 2.0.5起,已经支持rpx的正常着色和px2rpx的ide代码提示转换功能。

官方也修改了uni-app文档中关于尺寸单位的介绍,不再推荐upx的使用,而推荐rpx。

这个策略调整,不影响开发者的已有代码正常运行。

开发者仍然可以使用upx和uni.upx2px,也可以改用rpx,都可以。没有必要批量调整老代码。但新开发还是应该使用rpx。

顺便提醒另一个事情,很多开发者对响应式单位依赖太严重了,比如组件高度或字体大小也使用upx/rpx。

注意只有当你需要某元素的单位要根据屏幕宽度(小范围)大小变化时,才需要rpx这类动态宽度单位。

一般情况下高度和字体大小是不应该根据屏幕宽度(等比)变化的。

继续阅读 »

upx在2018年就推出了,其初衷是为了让微信的rpx机制可以跨全端使用。

在普通css写法里,upx会被编译器编译。但动态绑定时,upx无法被准确编译,此时官方提出了使用uni.upx2px()方法,用来动态计算。

后来其他几家小程序平台陆续都兼容了rpx机制,rpx不再是微信的专用单位,而成为了这个行业的通用单位。

最近官方收到很多开发小程序的用户投诉upx不能像rpx那样直接支持动态绑定,还得再使用uni.upx2px方法。

官方反思了策略,既然微信不可能支持upx的动态绑定,不如我们在App端和H5端来支持rpx的动态绑定。这样rpx就可以全端通用,且支持动态绑定,不再需要uni.upx2px方法。

从HBuilderX 2.0.5起,已经支持rpx的正常着色和px2rpx的ide代码提示转换功能。

官方也修改了uni-app文档中关于尺寸单位的介绍,不再推荐upx的使用,而推荐rpx。

这个策略调整,不影响开发者的已有代码正常运行。

开发者仍然可以使用upx和uni.upx2px,也可以改用rpx,都可以。没有必要批量调整老代码。但新开发还是应该使用rpx。

顺便提醒另一个事情,很多开发者对响应式单位依赖太严重了,比如组件高度或字体大小也使用upx/rpx。

注意只有当你需要某元素的单位要根据屏幕宽度(小范围)大小变化时,才需要rpx这类动态宽度单位。

一般情况下高度和字体大小是不应该根据屏幕宽度(等比)变化的。

收起阅读 »

上架电视应用商店(小米为例)

问题:

解决方案:

distribute 》 android 》permissions 加上这段代码哈
"<uses-feature android:name=\"android.hardware.type.television\" android:required=\"true\"/>"

继续阅读 »

问题:

解决方案:

distribute 》 android 》permissions 加上这段代码哈
"<uses-feature android:name=\"android.hardware.type.television\" android:required=\"true\"/>"

收起阅读 »

同样的代码。平板扫描闪退,但是app没有闪退

闪退

扫描的dom元素 ,一定要添加,宽和高

扫描的dom元素 ,一定要添加,宽和高

web-view组件如何自定义标题 官方默认的是加在页面的title

web-view组件可以自定义标题吗,我不想用加载页面的title?
加载的页面为第三方页面,不方便改人家的title。我这边能自定义title吗?

web-view组件可以自定义标题吗,我不想用加载页面的title?
加载的页面为第三方页面,不方便改人家的title。我这边能自定义title吗?

关于安卓获取IMEI那些破事

IMEI

获取imei需要用户给获取手机标识的权限,
h5+ 封装的那个 plus.device.imei 看上去很美好。
但是OPPO手机存在一个缺陷,刚安装用户第一次打开 返回的imei是错误的一串16位的字符串(非纯数字)
杀掉进程第二次进入 才能正确获取imei,无论延迟或者别的页面触发 都一样的。

采用以下原始的方法完美获取IMEI ,折腾了很久。希望能给遇到的朋友派上用处:

if (plus.os.name == "Android") {
var Context = plus.android.importClass("android.content.Context");
var tephoneManager = plus.android.importClass("android.telephony.TelephonyManager");
var tm = plus.android.runtimeMainActivity().getSystemService(Context.TELEPHONY_SERVICE);
this.imei = tm.getDeviceId();
}

继续阅读 »

获取imei需要用户给获取手机标识的权限,
h5+ 封装的那个 plus.device.imei 看上去很美好。
但是OPPO手机存在一个缺陷,刚安装用户第一次打开 返回的imei是错误的一串16位的字符串(非纯数字)
杀掉进程第二次进入 才能正确获取imei,无论延迟或者别的页面触发 都一样的。

采用以下原始的方法完美获取IMEI ,折腾了很久。希望能给遇到的朋友派上用处:

if (plus.os.name == "Android") {
var Context = plus.android.importClass("android.content.Context");
var tephoneManager = plus.android.importClass("android.telephony.TelephonyManager");
var tm = plus.android.runtimeMainActivity().getSystemService(Context.TELEPHONY_SERVICE);
this.imei = tm.getDeviceId();
}

收起阅读 »

native.js实现AlarmManager定时任务

闹钟 定时

由于公司业务需要,必须需要定时任务,以前从来没用过JAVA写代码,只能先研究了原生代码,再研究了《Android平台通过native.js实现接收系统消息,如监听安装卸载apk事件》,有了以下代码,在android9.0通过测试,代码如下:

var AlarmManager;  
var PendingIntent;  
var Intent;  
var IntentFilter;  
var Context;  
var Calendar;  
var main;  
var System;  
var receiver;  
var ALARM_EVENT = "com.kkaass.alarm";  

mui.plusReady(function(){  
    AlarmManager = plus.android.importClass('android.app.AlarmManager');  
    PendingIntent = plus.android.importClass('android.app.PendingIntent');  
    Intent = plus.android.importClass('android.content.Intent');  
    IntentFilter = plus.android.importClass('android.content.IntentFilter');  
    Context = plus.android.importClass('android.content.Context');  
    receiver = plus.android.implements('io.dcloud.android.content.BroadcastReceiver',{  
        onReceive:function(context,intent){  
            if(intent != null){  
                console.log('闹铃来了');  
                SetAlarm();  
            }  
        }  
    });  
    main = plus.android.runtimeMainActivity();  
    Calendar = plus.android.importClass('java.util.Calendar');  
    System = plus.android.importClass('java.lang.System');  
    var intentfilter = new IntentFilter();  
    intentfilter.addAction(ALARM_EVENT);  
    main.registerReceiver(receiver,intentfilter)  

});  

function SetAlarm(){  
    var intent = new Intent(ALARM_EVENT);  
    var pendingintent = PendingIntent.getBroadcast(main,0,intent,PendingIntent.FLAG_UPDATE_CURRENT);  
    var alarmManager =main.getSystemService(Context.ALARM_SERVICE);  
    var calendar = Calendar.getInstance();  
    calendar.setTimeInMillis(System.currentTimeMillis());  
    calendar.add(Calendar.SECOND,20);  
    alarmManager.setAndAllowWhileIdle(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis(),pendingintent);//setAndAllowWhileIdle方法API>=23才能使用  

}
继续阅读 »

由于公司业务需要,必须需要定时任务,以前从来没用过JAVA写代码,只能先研究了原生代码,再研究了《Android平台通过native.js实现接收系统消息,如监听安装卸载apk事件》,有了以下代码,在android9.0通过测试,代码如下:

var AlarmManager;  
var PendingIntent;  
var Intent;  
var IntentFilter;  
var Context;  
var Calendar;  
var main;  
var System;  
var receiver;  
var ALARM_EVENT = "com.kkaass.alarm";  

mui.plusReady(function(){  
    AlarmManager = plus.android.importClass('android.app.AlarmManager');  
    PendingIntent = plus.android.importClass('android.app.PendingIntent');  
    Intent = plus.android.importClass('android.content.Intent');  
    IntentFilter = plus.android.importClass('android.content.IntentFilter');  
    Context = plus.android.importClass('android.content.Context');  
    receiver = plus.android.implements('io.dcloud.android.content.BroadcastReceiver',{  
        onReceive:function(context,intent){  
            if(intent != null){  
                console.log('闹铃来了');  
                SetAlarm();  
            }  
        }  
    });  
    main = plus.android.runtimeMainActivity();  
    Calendar = plus.android.importClass('java.util.Calendar');  
    System = plus.android.importClass('java.lang.System');  
    var intentfilter = new IntentFilter();  
    intentfilter.addAction(ALARM_EVENT);  
    main.registerReceiver(receiver,intentfilter)  

});  

function SetAlarm(){  
    var intent = new Intent(ALARM_EVENT);  
    var pendingintent = PendingIntent.getBroadcast(main,0,intent,PendingIntent.FLAG_UPDATE_CURRENT);  
    var alarmManager =main.getSystemService(Context.ALARM_SERVICE);  
    var calendar = Calendar.getInstance();  
    calendar.setTimeInMillis(System.currentTimeMillis());  
    calendar.add(Calendar.SECOND,20);  
    alarmManager.setAndAllowWhileIdle(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis(),pendingintent);//setAndAllowWhileIdle方法API>=23才能使用  

}
收起阅读 »

关于unipush的一点使用心得

unipush

社区不行,自己研究了很久,先记录一下。
关于如何触发unipush的receive事件,之前有看见好几年的帖子都没人回复。头疼。
首先后端在使用代码测试时,虽然使用了透传的代码,但是app接收到的还是通知,而不是透传,透传和通知是两回事儿。
在app进程未被杀死时,也就是app在线的情况下,payload的数据格式不是按照标准的格式才会触发receive事件。
标准payload事件 String payload=“{title:xxxx,content:yyyy,payload:{{title:xxxx,content:yyyy,payload:{id:1000,id2:1002,id3:1003}}}}”
具体现在也还没有试过这样的标准的事件是不是不能触发receive,我看社区别人说的都不行。
至于什么是不标准的格式呢?这样的就行{"UUID":"androidPushMsg232","title":"测试","content":"测试离线ddd","payload":"测试离线ddd"},数据格式不标准不是指数据格式错误,而是自定义数据格式,只要不同于标准的数据格式就行了。

另外比较重要的是,如果你推送消息,在app打开的时候,通知栏如果有信息,那这就不是透传,而是通知。
在app进程被杀死后,透传就会直接到通知栏,并且只能触发click事件。
透传在app打开时,是不会发送到通知栏的,而是直接发送数据,不会进行页面上的一些展示。

另外我们后端的大佬用文档说的透传方法,在服务端发起的透传,在app上也是通知,这个坑导致一个上午都以为发起的通知是透传,也是为什么不触发receive的原因

继续阅读 »

社区不行,自己研究了很久,先记录一下。
关于如何触发unipush的receive事件,之前有看见好几年的帖子都没人回复。头疼。
首先后端在使用代码测试时,虽然使用了透传的代码,但是app接收到的还是通知,而不是透传,透传和通知是两回事儿。
在app进程未被杀死时,也就是app在线的情况下,payload的数据格式不是按照标准的格式才会触发receive事件。
标准payload事件 String payload=“{title:xxxx,content:yyyy,payload:{{title:xxxx,content:yyyy,payload:{id:1000,id2:1002,id3:1003}}}}”
具体现在也还没有试过这样的标准的事件是不是不能触发receive,我看社区别人说的都不行。
至于什么是不标准的格式呢?这样的就行{"UUID":"androidPushMsg232","title":"测试","content":"测试离线ddd","payload":"测试离线ddd"},数据格式不标准不是指数据格式错误,而是自定义数据格式,只要不同于标准的数据格式就行了。

另外比较重要的是,如果你推送消息,在app打开的时候,通知栏如果有信息,那这就不是透传,而是通知。
在app进程被杀死后,透传就会直接到通知栏,并且只能触发click事件。
透传在app打开时,是不会发送到通知栏的,而是直接发送数据,不会进行页面上的一些展示。

另外我们后端的大佬用文档说的透传方法,在服务端发起的透传,在app上也是通知,这个坑导致一个上午都以为发起的通知是透传,也是为什么不触发receive的原因

收起阅读 »

团队全职长期接APP,中后台开发

5+App开发 混合开发 外包

开发经验:5年。
UNI经验:从UNI发布至今一直使用,前以及开发了10多个UNIAPP项目
UNI项目其中包含:淘宝客项目、教育类项目、区块链项目、商城项目等其他小中大型APP

说明:团队承接,长期接外包,公司个人均可
技术方向:uniappvuepythonphpflutternodejsreactgolang

联系方式q:1910563900
微信:BGF-FF

继续阅读 »

开发经验:5年。
UNI经验:从UNI发布至今一直使用,前以及开发了10多个UNIAPP项目
UNI项目其中包含:淘宝客项目、教育类项目、区块链项目、商城项目等其他小中大型APP

说明:团队承接,长期接外包,公司个人均可
技术方向:uniappvuepythonphpflutternodejsreactgolang

联系方式q:1910563900
微信:BGF-FF

收起阅读 »

app兼h5项目开发经验记录

uniapp

App
1、ios 软键盘弹收起后,需将页面归位,代码如下:

        uni.pageScrollTo({  
          scrollTop: 0,  
          duration: 300  
    });  

2、安卓输入框被软键盘遮挡:
如果,输入框在scroll-view里:
1)输入框focus时,改变scroll-view 的scroll-top 属性值【bug:h5生效,app里不生效】

3、行内样式不能使用upx 单位,需要的话,可使用 uni.upx2px(**) 转换

         computed: {  
            pageTop(){  
            return uni.upx2px(this.top);  
        }  
      }  

4、uniapp 官方bug: uni.getImageInfo() app端 网络图片无法加载
社区问题: https://ask.dcloud.net.cn/question/71511

5、uniapp 官方bug:measureText() 目前只支持小程序和h5
https://ask.dcloud.net.cn/question/70374

继续阅读 »

App
1、ios 软键盘弹收起后,需将页面归位,代码如下:

        uni.pageScrollTo({  
          scrollTop: 0,  
          duration: 300  
    });  

2、安卓输入框被软键盘遮挡:
如果,输入框在scroll-view里:
1)输入框focus时,改变scroll-view 的scroll-top 属性值【bug:h5生效,app里不生效】

3、行内样式不能使用upx 单位,需要的话,可使用 uni.upx2px(**) 转换

         computed: {  
            pageTop(){  
            return uni.upx2px(this.top);  
        }  
      }  

4、uniapp 官方bug: uni.getImageInfo() app端 网络图片无法加载
社区问题: https://ask.dcloud.net.cn/question/71511

5、uniapp 官方bug:measureText() 目前只支持小程序和h5
https://ask.dcloud.net.cn/question/70374

收起阅读 »