HBuilderX

HBuilderX

极客开发工具
uni-app

uni-app

开发一次,多端覆盖
uniCloud

uniCloud

云开发平台
HTML5+

HTML5+

增强HTML5的功能体验
MUI

MUI

上万Star的前端框架

如何在 uniapp 项目中,使用“插件市场” 的原生插件

uniapp原生插件 插件市场 uniapp插件

插件市场 : http://ext.dcloud.net.cn/?cat1=5&cat2=51

1. 第一步: 首先在HBuilder x 中新建一个uniapp 项目,如果已建好 uniapp 项目则跳过该步骤。

第二步: 在 ”插件市场中 “ 选择你需要的原生插件 -》 选择购买 或 试用-》 弹出一个 uniapp 应用选择框,勾选你要在哪一个uniapp项目中使用该插件。

第三步: 回到HBuilder x 工程中,找到刚才 勾选中的 uniapp 项目,打开配置文件-》manifest.json -》选择“App原生插件配置” -》选择 “ 云端插件 “,弹出一个插件选择框,勾选你要使用的插件即可。

第四步: 你进行正常的云打包,就可以使用相关插件的功能, 如果你是想在本地测试使用该插件,还需要制作自定义基座,分别是android 或 ios 的,主要是把插件打包进基座里,以便可以在本地测试应用, 制作自定义基座方法, HBx 菜单栏 -》发行-》原生App 云打包-》填写好相关的证书文件后-》勾选自定义基座-》执行打包。

第五步: 等待云打包成功, 你检查 unpackage / debug 文件夹下会出一个: android_debug.apk 或者 iOS_debug.ipa 安装包,这就是测试使用的自定义基座安装包。

第六步:等自定义基座制作完成后, 在HBx 菜单栏-》运行 -》运行到手机或者模拟器-》运行基座选择-》 选择 自定义基座 即可。

第七步: 运行项目到 手机 或者 模拟器上,就可以使用该插件的功能。

第八步:根据插件相关的文档 ,使用插件相关的方法即可。

继续阅读 »

插件市场 : http://ext.dcloud.net.cn/?cat1=5&cat2=51

1. 第一步: 首先在HBuilder x 中新建一个uniapp 项目,如果已建好 uniapp 项目则跳过该步骤。

第二步: 在 ”插件市场中 “ 选择你需要的原生插件 -》 选择购买 或 试用-》 弹出一个 uniapp 应用选择框,勾选你要在哪一个uniapp项目中使用该插件。

第三步: 回到HBuilder x 工程中,找到刚才 勾选中的 uniapp 项目,打开配置文件-》manifest.json -》选择“App原生插件配置” -》选择 “ 云端插件 “,弹出一个插件选择框,勾选你要使用的插件即可。

第四步: 你进行正常的云打包,就可以使用相关插件的功能, 如果你是想在本地测试使用该插件,还需要制作自定义基座,分别是android 或 ios 的,主要是把插件打包进基座里,以便可以在本地测试应用, 制作自定义基座方法, HBx 菜单栏 -》发行-》原生App 云打包-》填写好相关的证书文件后-》勾选自定义基座-》执行打包。

第五步: 等待云打包成功, 你检查 unpackage / debug 文件夹下会出一个: android_debug.apk 或者 iOS_debug.ipa 安装包,这就是测试使用的自定义基座安装包。

第六步:等自定义基座制作完成后, 在HBx 菜单栏-》运行 -》运行到手机或者模拟器-》运行基座选择-》 选择 自定义基座 即可。

第七步: 运行项目到 手机 或者 模拟器上,就可以使用该插件的功能。

第八步:根据插件相关的文档 ,使用插件相关的方法即可。

收起阅读 »

关于uniapp原生插件打包 FileProvider冲突问题。

云打包冲突 插件 FileProvider 冲突

1、新建XXFileProvider继承自FileProvider
2、注册改为<provider android:name="xxx.xx.xx.XXFileProvider"
android:authorities="${applicationId}.xxx.fileProvider"
3、authorities不要跟主项目有冲突即可

(XX xx 表示开发者任意填写)

继续阅读 »

1、新建XXFileProvider继承自FileProvider
2、注册改为<provider android:name="xxx.xx.xx.XXFileProvider"
android:authorities="${applicationId}.xxx.fileProvider"
3、authorities不要跟主项目有冲突即可

(XX xx 表示开发者任意填写)

收起阅读 »

uni-push ,iOS 通过透传 发送通知,但手机通知知栏未显示

前提 :1、Uni Push后台 配置ok (iOS 推送p12证书)
2、通过 this.clientid=plus.push.getClientInfo().clientid 获取客户端id
3、* plus.push.createMessage(message.title,message.content);这段代码必须要有,手机通知栏才会显示通知,也就是说需要在接收消息回调里面 自己注册本地通知才会有通知栏的 ,但经过测试,使用透传方式,app在线状态会收到通知,离线收不到。

继续更新 ....目前已实现安卓、苹果在线离线接收消息。。


在App.vue 文件里 onLaunch: function () {}   方法如下  
//判断客户端  
 var clent=uni.getSystemInfoSync().platform  
plus.push.setAutoNotification(true)  
const _self = this;  
        //收到透传消息    
        //只有APP在线时,才会触发receive事件,透传消息不会触发系统消息,需要创建本地消息    
        plus.push.addEventListener("receive", function(msg) {    
            var clent=uni.getSystemInfoSync().platform  
            console.log("(receive):" + JSON.stringify(msg));    
            if (clent=='ios') { //如果是IOS    
                var payload = msg.payload;    
                //【APP离线】收到消息,但没有提醒(发生在一次收到多个离线消息时,只有一个有提醒,但其他的没有提醒)    
                //【APP在线】收到消息,不会触发系统消息,需要创建本地消息,但不能重复创建。必须加msg.type验证去除死循环                  
                if (msg.aps == null && msg.type == "receive") {     
                    var messageTitle = payload.messageTitle;    
                    var messageContent = payload.messageContent;    
                    //创建本地消息,发送的本地消息也会被receive方法接收到,但没有type属性,且aps是null    
                    plus.push.createMessage(messageContent, JSON.stringify(payload), {title: messageTitle});    
                }  
                // else{  
                //  var payload = JSON.parse(msg.payload);    
                //  plus.push.createMessage(payload.messageContent, JSON.stringify(payload.payload), {title: payload.messageTitle});    
                // }    
            }    
            if (clent=='android') {   
              //如果是Android,当APP在线时,收到透传消息不会进入系统消息,需要发送本地提醒。    
                var payload = JSON.parse(msg.content);    
                var messageTitle = payload.messageTitle;    
                var messageContent = payload.messageContent;    
                plus.push.createMessage(messageContent, msg.payload, {title: messageTitle});  
                plus.runtime.setBadgeNumber(1)  
            }    
        }, false);    

        //消息点击事件    
        //【APP在线】,收到透传消息通过,不会提醒至通知栏目,需要发送本地消息,再进行点击触发的点击事件。    
        //【APP离线】,收到离线透传消息,必须通过Java后台的Intent字符串携带payload,且符合格式才能触发click事件,格式不符合不会触发  

        plus.push.addEventListener("click", function(msg) {    
            var clent=uni.getSystemInfoSync().platform  
            console.log("(click):" + JSON.stringify(msg));    
            if (clent=='ios') { //如果是IOS    
                var payload;    
                if (msg.type == "click") { //APP离线点击包含click属性,这时payload是JSON对象    
                    payload = msg.payload;    
                } else { //APP在线,收到消息不会包含type属性,这时的payload是JSON字符串,需要转为JSON对象    
                    payload = JSON.parse(msg.payload);    
                }    
                if (payload != null || payload != undefined) {    
                    console.log("payload:"+payload)  
                    //_self.callback(payload+"");    
                    _self.setUniPush_state("1")  
                    _self.setUniPush_url(payload.payload)  
                    uni.reLaunch({  
                        url: '/pages/tabBar/index/index'  
                    })  
                }    
            }    
            if (clent=='android') { //如果是Android,收到playload均是是JSON字符串,需要转为JSON对象    
                var payload = msg.payload;    
                console.log("msg.payload:"+msg.payload)  
                if (payload != null || payload != undefined) {    
                    console.log("payload:"+payload)  
                   // _self.callback(payload+"");    
                   _self.setUniPush_state("1")  
                   _self.setUniPush_url(payload)  
                   uni.reLaunch({  
                    url: '/pages/tabBar/index/index'  
                   })  
                }    
            }    
        }, false);  

另外:在 DCloud 平台发送消息时 :注意 intent格式
intent:#Intent;action=android.intent.action.oppopush;launchFlags=0x14000000;component=io.dcloud.XXXXXX/io.dcloud.PandoraEntry;S.UP-OL-SU=true;S.title=你好,这是标题;S.content=这是通知的内容,你好,这是内容。;S.payload=;end
注意:component 为你的 应用id(io.dcloud.xxx)
可以看下这个链接https://ask.dcloud.net.cn/article/36622?notification_id-760228__item_id-32878写的,我也是根据她的来写的,挺不错的

继续阅读 »

前提 :1、Uni Push后台 配置ok (iOS 推送p12证书)
2、通过 this.clientid=plus.push.getClientInfo().clientid 获取客户端id
3、* plus.push.createMessage(message.title,message.content);这段代码必须要有,手机通知栏才会显示通知,也就是说需要在接收消息回调里面 自己注册本地通知才会有通知栏的 ,但经过测试,使用透传方式,app在线状态会收到通知,离线收不到。

继续更新 ....目前已实现安卓、苹果在线离线接收消息。。


在App.vue 文件里 onLaunch: function () {}   方法如下  
//判断客户端  
 var clent=uni.getSystemInfoSync().platform  
plus.push.setAutoNotification(true)  
const _self = this;  
        //收到透传消息    
        //只有APP在线时,才会触发receive事件,透传消息不会触发系统消息,需要创建本地消息    
        plus.push.addEventListener("receive", function(msg) {    
            var clent=uni.getSystemInfoSync().platform  
            console.log("(receive):" + JSON.stringify(msg));    
            if (clent=='ios') { //如果是IOS    
                var payload = msg.payload;    
                //【APP离线】收到消息,但没有提醒(发生在一次收到多个离线消息时,只有一个有提醒,但其他的没有提醒)    
                //【APP在线】收到消息,不会触发系统消息,需要创建本地消息,但不能重复创建。必须加msg.type验证去除死循环                  
                if (msg.aps == null && msg.type == "receive") {     
                    var messageTitle = payload.messageTitle;    
                    var messageContent = payload.messageContent;    
                    //创建本地消息,发送的本地消息也会被receive方法接收到,但没有type属性,且aps是null    
                    plus.push.createMessage(messageContent, JSON.stringify(payload), {title: messageTitle});    
                }  
                // else{  
                //  var payload = JSON.parse(msg.payload);    
                //  plus.push.createMessage(payload.messageContent, JSON.stringify(payload.payload), {title: payload.messageTitle});    
                // }    
            }    
            if (clent=='android') {   
              //如果是Android,当APP在线时,收到透传消息不会进入系统消息,需要发送本地提醒。    
                var payload = JSON.parse(msg.content);    
                var messageTitle = payload.messageTitle;    
                var messageContent = payload.messageContent;    
                plus.push.createMessage(messageContent, msg.payload, {title: messageTitle});  
                plus.runtime.setBadgeNumber(1)  
            }    
        }, false);    

        //消息点击事件    
        //【APP在线】,收到透传消息通过,不会提醒至通知栏目,需要发送本地消息,再进行点击触发的点击事件。    
        //【APP离线】,收到离线透传消息,必须通过Java后台的Intent字符串携带payload,且符合格式才能触发click事件,格式不符合不会触发  

        plus.push.addEventListener("click", function(msg) {    
            var clent=uni.getSystemInfoSync().platform  
            console.log("(click):" + JSON.stringify(msg));    
            if (clent=='ios') { //如果是IOS    
                var payload;    
                if (msg.type == "click") { //APP离线点击包含click属性,这时payload是JSON对象    
                    payload = msg.payload;    
                } else { //APP在线,收到消息不会包含type属性,这时的payload是JSON字符串,需要转为JSON对象    
                    payload = JSON.parse(msg.payload);    
                }    
                if (payload != null || payload != undefined) {    
                    console.log("payload:"+payload)  
                    //_self.callback(payload+"");    
                    _self.setUniPush_state("1")  
                    _self.setUniPush_url(payload.payload)  
                    uni.reLaunch({  
                        url: '/pages/tabBar/index/index'  
                    })  
                }    
            }    
            if (clent=='android') { //如果是Android,收到playload均是是JSON字符串,需要转为JSON对象    
                var payload = msg.payload;    
                console.log("msg.payload:"+msg.payload)  
                if (payload != null || payload != undefined) {    
                    console.log("payload:"+payload)  
                   // _self.callback(payload+"");    
                   _self.setUniPush_state("1")  
                   _self.setUniPush_url(payload)  
                   uni.reLaunch({  
                    url: '/pages/tabBar/index/index'  
                   })  
                }    
            }    
        }, false);  

另外:在 DCloud 平台发送消息时 :注意 intent格式
intent:#Intent;action=android.intent.action.oppopush;launchFlags=0x14000000;component=io.dcloud.XXXXXX/io.dcloud.PandoraEntry;S.UP-OL-SU=true;S.title=你好,这是标题;S.content=这是通知的内容,你好,这是内容。;S.payload=;end
注意:component 为你的 应用id(io.dcloud.xxx)
可以看下这个链接https://ask.dcloud.net.cn/article/36622?notification_id-760228__item_id-32878写的,我也是根据她的来写的,挺不错的

收起阅读 »

UNIAPP-3DTOUCH iOS平台支持3D Touch快捷菜单项

3DTouch uniapp

官方有个文章介绍,说的比较简单 对于新手来说 有些困难,而且还不是UNIAPP的教程,现在分享下 UNIAPP下使用3Dtouch

首先可以参考下官方的教程:http://ask.dcloud.net.cn/article/424?tdsourcetag=s_pctim_aiomsg

1.配置3Dtouch

打开你的UNIAPP项目,根目录下有一个 manifest.json 找到 如下节点

app-plus --> distribute ---> ios 然后在 ios 节点下插入如下代码: (具体插入什么 根据自己业务逻辑来,)

 "shortcuts": [    
        {    
            "type": "share",    
            "title": "分 享",    
            "subtitle": "分享到微信、微博、QQ",    
            "icontype": "UIApplicationShortcutIconTypeShare"    
        },    
        {    
            "type": "about",    
            "title": "关 于",    
            "subtitle": "www.dcloud.io",    
            "iconfile": "sa.png",    
            "userinfo": {    
                "key3":"value3"    
            }    
        }    
    ]

2.处理3Dtouch 菜单点击

首先打开uniapp 根目录的 APP.VUEonLaunch生命周期中插入如下代码

this.checkArguments(); // 检测启动参数 // 这是默认的监听参数 也就是应用初始化的时候监听  

// 监听后台恢复 这是利用5+的方式 处理 APP进入后台后 再进入到APP前台时参数监听  
plus.globalEvent.addEventListener('newintent', (e)=>{  
            this.checkArguments(); // 检测启动参数  
});

3. 然后在 app.vue 新增处理启动参数的代码 : checkArguments

打开app.vue -->> methods 新增如下代码:

checkArguments() {  
            console.log('Shortcut-plus.runtime.launcher: ' + plus.runtime.launcher);  
            if (plus.runtime.launcher == 'shortcut') {  
                // 通过快捷方式启动,iOS平台表示通过3D Touch快捷方式,Android平台表示通过桌面快捷方式启动  
                try {  
                    var cmd = JSON.parse(plus.runtime.arguments);  
                    console.log('Shortcut-plus.runtime.arguments: ' + plus.runtime.arguments);  
                    var type = cmd && cmd.type;  
                    // 可以自行根据type 处理 你的业务逻辑  

                    setTimeout(r => {  
                        switch (type) {  
                            case 'scan':  
                                uni.scanCode({  
                                    scanType: 'qrCode'  
                                });  
                                break;  
                            case 'search':  
                                uni.navigateTo({  
                                    url: '/pages/search/index'  
                                });  
                                break;  
                            case 'shouyi':  
                                // 我的收益  
                                break;  
                            case 'agent':  
                                // 邀请好友  
                                break;    
                        }  
                    }, 800);  

                    console.log(JSON.stringify(cmd));  
                } catch (e) {  
                    console.log('Shortcut-exception: ' + e);  
                }  
            }  
        },  
继续阅读 »

官方有个文章介绍,说的比较简单 对于新手来说 有些困难,而且还不是UNIAPP的教程,现在分享下 UNIAPP下使用3Dtouch

首先可以参考下官方的教程:http://ask.dcloud.net.cn/article/424?tdsourcetag=s_pctim_aiomsg

1.配置3Dtouch

打开你的UNIAPP项目,根目录下有一个 manifest.json 找到 如下节点

app-plus --> distribute ---> ios 然后在 ios 节点下插入如下代码: (具体插入什么 根据自己业务逻辑来,)

 "shortcuts": [    
        {    
            "type": "share",    
            "title": "分 享",    
            "subtitle": "分享到微信、微博、QQ",    
            "icontype": "UIApplicationShortcutIconTypeShare"    
        },    
        {    
            "type": "about",    
            "title": "关 于",    
            "subtitle": "www.dcloud.io",    
            "iconfile": "sa.png",    
            "userinfo": {    
                "key3":"value3"    
            }    
        }    
    ]

2.处理3Dtouch 菜单点击

首先打开uniapp 根目录的 APP.VUEonLaunch生命周期中插入如下代码

this.checkArguments(); // 检测启动参数 // 这是默认的监听参数 也就是应用初始化的时候监听  

// 监听后台恢复 这是利用5+的方式 处理 APP进入后台后 再进入到APP前台时参数监听  
plus.globalEvent.addEventListener('newintent', (e)=>{  
            this.checkArguments(); // 检测启动参数  
});

3. 然后在 app.vue 新增处理启动参数的代码 : checkArguments

打开app.vue -->> methods 新增如下代码:

checkArguments() {  
            console.log('Shortcut-plus.runtime.launcher: ' + plus.runtime.launcher);  
            if (plus.runtime.launcher == 'shortcut') {  
                // 通过快捷方式启动,iOS平台表示通过3D Touch快捷方式,Android平台表示通过桌面快捷方式启动  
                try {  
                    var cmd = JSON.parse(plus.runtime.arguments);  
                    console.log('Shortcut-plus.runtime.arguments: ' + plus.runtime.arguments);  
                    var type = cmd && cmd.type;  
                    // 可以自行根据type 处理 你的业务逻辑  

                    setTimeout(r => {  
                        switch (type) {  
                            case 'scan':  
                                uni.scanCode({  
                                    scanType: 'qrCode'  
                                });  
                                break;  
                            case 'search':  
                                uni.navigateTo({  
                                    url: '/pages/search/index'  
                                });  
                                break;  
                            case 'shouyi':  
                                // 我的收益  
                                break;  
                            case 'agent':  
                                // 邀请好友  
                                break;    
                        }  
                    }, 800);  

                    console.log(JSON.stringify(cmd));  
                } catch (e) {  
                    console.log('Shortcut-exception: ' + e);  
                }  
            }  
        },  
收起阅读 »

挂个骗子,大家以后接单小心点

mui 外包

说的很好,把源码发给他,测试没问题,就给钱,我还是太善良了,花500要做成微信的效果,真的是服了。

说的很好,把源码发给他,测试没问题,就给钱,我还是太善良了,花500要做成微信的效果,真的是服了。

nvue编译时css告警

报警

nvue支持的css,或者说weex支持的css,是web的css的子集。
很多开发者写了错误的css,但由于css运行时不报错,而导致开发者并不知情。

2.0.3起,HBuilderX新增 nvue编译时校验css合法性,对于App平台的nvue不支持的样式在控制台给予告警。
告警不影响编译结果,仍然可以正常运行。

对于公共样式,即nvue和vue复用的样式,建议通过条件编译写法分离,比如App.vue里:

<style>  
    /*  这里写nvue和vue都复用的样式 */  

    /* #ifndef APP-PLUS-NVUE */  
    /*  这里写vue专用的样式 */    
    /* #endif */  
</style>
继续阅读 »

nvue支持的css,或者说weex支持的css,是web的css的子集。
很多开发者写了错误的css,但由于css运行时不报错,而导致开发者并不知情。

2.0.3起,HBuilderX新增 nvue编译时校验css合法性,对于App平台的nvue不支持的样式在控制台给予告警。
告警不影响编译结果,仍然可以正常运行。

对于公共样式,即nvue和vue复用的样式,建议通过条件编译写法分离,比如App.vue里:

<style>  
    /*  这里写nvue和vue都复用的样式 */  

    /* #ifndef APP-PLUS-NVUE */  
    /*  这里写vue专用的样式 */    
    /* #endif */  
</style>
收起阅读 »

隐藏 scroll-view 组件的滚动条

scroll_view

App.vue 增加如下样式可以去除 scroll-view 组件的滚动条(不支持nvue页面)

::-webkit-scrollbar {  
    display: none;  
    width: 0 !important;  
    height: 0 !important;  
    -webkit-appearance: none;  
    background: transparent;  
}

注意:
iOS 13 以下的系统,当滚动区域设置了-webkit-overflow-scrolling: touch;时(必须设置,否者几乎无法滚动),::-webkit-scrollbar 相关属性会失效,iOS 13 已经修复了此Bug。

继续阅读 »

App.vue 增加如下样式可以去除 scroll-view 组件的滚动条(不支持nvue页面)

::-webkit-scrollbar {  
    display: none;  
    width: 0 !important;  
    height: 0 !important;  
    -webkit-appearance: none;  
    background: transparent;  
}

注意:
iOS 13 以下的系统,当滚动区域设置了-webkit-overflow-scrolling: touch;时(必须设置,否者几乎无法滚动),::-webkit-scrollbar 相关属性会失效,iOS 13 已经修复了此Bug。

收起阅读 »

关于官方加强第三方控件支持的建议, 增强生态和赢利模式

建议官方加强对第三方控件的支持,
比如:
1) 聚合支付
官方可以选择性合作一两家,为开发者和企业提供支持,官方可以增加赢利模式,对开发者也是一件好事,同时也会引导其他厂商加入支持.
2) IM通讯
现在的IM通讯不是很强,特别是跨端
3) 硬件厂商
比如手唛和其他蓝牙设备,选择合作厂商

这类需求强以有个专门的团队,可以与厂商分润

继续阅读 »

建议官方加强对第三方控件的支持,
比如:
1) 聚合支付
官方可以选择性合作一两家,为开发者和企业提供支持,官方可以增加赢利模式,对开发者也是一件好事,同时也会引导其他厂商加入支持.
2) IM通讯
现在的IM通讯不是很强,特别是跨端
3) 硬件厂商
比如手唛和其他蓝牙设备,选择合作厂商

这类需求强以有个专门的团队,可以与厂商分润

收起阅读 »

uni-app技术交流外包交流群

uni-app技术交流外包交流群,欢迎大家加入讨论
qq群:806822720

uni-app技术交流外包交流群,欢迎大家加入讨论
qq群:806822720

Mac插件安装失败的问题

插件安装

有的小伙伴,第一次使用mac,点击HBuilderX启动后,发现插件安装不了。

1. 有可能是安装的方式不对

双击打开是不对的,如图,将HBuilderX拖到Applications,才是正确的安装姿势。

2. 网络问题

检查网络,是否开启了全局vpn

3. 防火墙问题

检查下防火墙,要允许HBuilderX通过防火墙连接

4. 部分Node.js插件安装失败

有的时候,Node.js插件,比如eslint、sass因各种各样的原因安装失败了。

在终端,进入/Applications/HBuilderX.app/Contents/HBuilderX/plugins目录,找到相应的插件,如下:

$ cd /Applications/HBuilderX.app/Contents/HBuilderX/plugins  
$ cd 相关插件  
$ npm install

如还存在问题,请点击菜单【帮助】,查看运行日志

继续阅读 »

有的小伙伴,第一次使用mac,点击HBuilderX启动后,发现插件安装不了。

1. 有可能是安装的方式不对

双击打开是不对的,如图,将HBuilderX拖到Applications,才是正确的安装姿势。

2. 网络问题

检查网络,是否开启了全局vpn

3. 防火墙问题

检查下防火墙,要允许HBuilderX通过防火墙连接

4. 部分Node.js插件安装失败

有的时候,Node.js插件,比如eslint、sass因各种各样的原因安装失败了。

在终端,进入/Applications/HBuilderX.app/Contents/HBuilderX/plugins目录,找到相应的插件,如下:

$ cd /Applications/HBuilderX.app/Contents/HBuilderX/plugins  
$ cd 相关插件  
$ npm install

如还存在问题,请点击菜单【帮助】,查看运行日志

收起阅读 »

uniapp开发公众号, ios配置jssdk, 刷新页面才能成功的解决方法

在开发公众号的时候, 要配置分享功能, 安卓是正常的, 但 ios 每次都要刷新页面才能配置成功.
百度了很久才找到解决方法: 链接

原因就是在ios和android中,document.location.href在spa页面的机制不同(不同在于ios是只要不刷新页面,href就不会改变),所以要对相应的系统做适配

继续阅读 »

在开发公众号的时候, 要配置分享功能, 安卓是正常的, 但 ios 每次都要刷新页面才能配置成功.
百度了很久才找到解决方法: 链接

原因就是在ios和android中,document.location.href在spa页面的机制不同(不同在于ios是只要不刷新页面,href就不会改变),所以要对相应的系统做适配

收起阅读 »