HBuilderX

HBuilderX

极客开发工具
uni-app

uni-app

开发一次,多端覆盖
uniCloud

uniCloud

云开发平台
HTML5+

HTML5+

增强HTML5的功能体验
MUI

MUI

上万Star的前端框架

subNVue的一些实验

subnvue

最近在熟悉uni-app的api,准备在demo里使用遮罩层,找官方文档,一顿搜索点到了subNVue,于是跟着开发指南和文档用subNVue写一个遮罩试试(毕竟官方说这个很强大,可以盖住原生组件,还能实现内部滚动)。
根据我的测试结果,如果仅仅根据uni-app的文档,我不能写出一个令自己满意的遮罩层,比如说,你不能阻止手机上的虚拟返回键关闭遮罩,你不能自己控制是否通过点击遮罩关闭遮罩层。
根据文档中的一些线索:

  1. ‘Android平台4.0以上系统才支持“transparent”背景透明样式’。
  2. 除 popup 外,其他值域参考 5+ webview position 文档。
    去查看H5+的webview文档(subNVue是对H5+webview的一层封装,但是封装的功能不全,要真正发挥subNVue的强大功能还是要结合plus对象)。
    下面是我的测试代码():
    在page.json里添加如下配置:

    {  
    "path": "pages/tabBar/home/home",  
    "style": {  
        "enablePullDownRefresh": false,  
        "navigationStyle": "default",   
        "navigationBarTitleText": "Home",  
        "app-plus": {  
            "titleNView": { // 标题栏样式  
                // "homeButton": true,  
                "buttons": [  
                    {  
                        "type": "back",  
                        "float": "left"  
                    },  
                ]  
            },  
            "subNVues":[{   
                   "id": "test", // 唯一标识    
                   "path": "/paltform/app-plus/subNVue/overlay", // 页面路径    
                   "type": "popup",  
                   "style": {  // 应该对应的是H5+中的webviewStyle  
                   "position": "absolute",    
                       "dock": "right",    
                       "width": "100upx",    
                       "height": "150upx",    
                        // "background": "rgba(0,0,0,0.5)",  
                   "mask": "none",//mask的值很重要,设置成none点击遮罩不会再关闭遮罩了  
                   "backButtonAutoControl": "none"   // 如果值是quit点击虚拟返回键会直接退出app  
                   }    
            }]    
        }  
    
    }  
    }

    overlay.vue:


<template>  
    <view class="tt">  
        <image class="swiper-item home-banner-item" mode="widthFix" src="https://pic2.zhimg.com/v2-25f301124c7524029d043a038655c829_1440w.jpg?source=172ae18b"></image>  
        </view>  

</template>  

<script>  

    export default {  
        data() {  
            return {  

            }  
        },  
        onLoad: function () {  
            const subNVue = uni.getCurrentSubNVue(); // subNVue对应的webview 对象  
            console.log(plus.webview.currentWebview().id); // package.json里设置的subNVue的id  
            console.log(subNVue.id); // package.json里设置的subNVue的id  
            console.log(plus.webview.currentWebview().opener());//创建subNVue对应的webview 的父webview,与 home.vue的webview是同一个webview  
            subNVue.canBack(function(e){  
                     console.log('是否可返回:'+e.canBack);  
                    });  
            // subNVue.addEventListener('hide', function(){  
            //     // subNVue.setStyle({mask:'rgba(0,0,0,1)'});  
            //  console.log(123000);  
            // },false);  
            // console.log(subNVue.parent());  
            subNVue.setStyle({  
                background: '#ff4050',  
            })  
            plus.key.addEventListener('backbutton',function() {  
                console.log('backbutton'); // 这个可以拦截手机上的虚拟返回键  
                return true;  
            })  
        },  
        onUnload:function(){  

        },  
        onBackPress() {  
            return true; // 这个貌似不起作用  
        },  
        methods: {  

        }  
    }  
</script>  

<style>  

</style>  

只是初步测试,希望uni-app官方能把文档给写清楚,不要让开发者猜,提高大家的工作效率。

继续阅读 »

最近在熟悉uni-app的api,准备在demo里使用遮罩层,找官方文档,一顿搜索点到了subNVue,于是跟着开发指南和文档用subNVue写一个遮罩试试(毕竟官方说这个很强大,可以盖住原生组件,还能实现内部滚动)。
根据我的测试结果,如果仅仅根据uni-app的文档,我不能写出一个令自己满意的遮罩层,比如说,你不能阻止手机上的虚拟返回键关闭遮罩,你不能自己控制是否通过点击遮罩关闭遮罩层。
根据文档中的一些线索:

  1. ‘Android平台4.0以上系统才支持“transparent”背景透明样式’。
  2. 除 popup 外,其他值域参考 5+ webview position 文档。
    去查看H5+的webview文档(subNVue是对H5+webview的一层封装,但是封装的功能不全,要真正发挥subNVue的强大功能还是要结合plus对象)。
    下面是我的测试代码():
    在page.json里添加如下配置:

    {  
    "path": "pages/tabBar/home/home",  
    "style": {  
        "enablePullDownRefresh": false,  
        "navigationStyle": "default",   
        "navigationBarTitleText": "Home",  
        "app-plus": {  
            "titleNView": { // 标题栏样式  
                // "homeButton": true,  
                "buttons": [  
                    {  
                        "type": "back",  
                        "float": "left"  
                    },  
                ]  
            },  
            "subNVues":[{   
                   "id": "test", // 唯一标识    
                   "path": "/paltform/app-plus/subNVue/overlay", // 页面路径    
                   "type": "popup",  
                   "style": {  // 应该对应的是H5+中的webviewStyle  
                   "position": "absolute",    
                       "dock": "right",    
                       "width": "100upx",    
                       "height": "150upx",    
                        // "background": "rgba(0,0,0,0.5)",  
                   "mask": "none",//mask的值很重要,设置成none点击遮罩不会再关闭遮罩了  
                   "backButtonAutoControl": "none"   // 如果值是quit点击虚拟返回键会直接退出app  
                   }    
            }]    
        }  
    
    }  
    }

    overlay.vue:


<template>  
    <view class="tt">  
        <image class="swiper-item home-banner-item" mode="widthFix" src="https://pic2.zhimg.com/v2-25f301124c7524029d043a038655c829_1440w.jpg?source=172ae18b"></image>  
        </view>  

</template>  

<script>  

    export default {  
        data() {  
            return {  

            }  
        },  
        onLoad: function () {  
            const subNVue = uni.getCurrentSubNVue(); // subNVue对应的webview 对象  
            console.log(plus.webview.currentWebview().id); // package.json里设置的subNVue的id  
            console.log(subNVue.id); // package.json里设置的subNVue的id  
            console.log(plus.webview.currentWebview().opener());//创建subNVue对应的webview 的父webview,与 home.vue的webview是同一个webview  
            subNVue.canBack(function(e){  
                     console.log('是否可返回:'+e.canBack);  
                    });  
            // subNVue.addEventListener('hide', function(){  
            //     // subNVue.setStyle({mask:'rgba(0,0,0,1)'});  
            //  console.log(123000);  
            // },false);  
            // console.log(subNVue.parent());  
            subNVue.setStyle({  
                background: '#ff4050',  
            })  
            plus.key.addEventListener('backbutton',function() {  
                console.log('backbutton'); // 这个可以拦截手机上的虚拟返回键  
                return true;  
            })  
        },  
        onUnload:function(){  

        },  
        onBackPress() {  
            return true; // 这个貌似不起作用  
        },  
        methods: {  

        }  
    }  
</script>  

<style>  

</style>  

只是初步测试,希望uni-app官方能把文档给写清楚,不要让开发者猜,提高大家的工作效率。

收起阅读 »

打包APP 页面出现白屏最新解决方案

白屏 App WKWebview白屏 WKWebview

首先还是应该将tabbar页面用nvue编写,就不会出现这种问题了。
但是我的使用了过多组件,相当于要重构了。。。就放弃改为nvue了。下面是我根据之前版本的方法修改的,大概能解决大部分问题?

先贴原来用的方法,这个是在社区找到的,新版不能使用原因请看注释

function reloadCurrentPage(_self, isTab = true) {  
    // #ifdef APP-PLUS  
    if (plus.os.name === 'iOS') {  
        var route = _self.$scope.route  
        var data = _self.$scope.options && _self.$scope.options.data  
        var url = '/' + route  
        if (data) {  
            url = '/' + route + '?data=' + data  
        }  
        var isRecovery = true;  
        const query = uni.createSelectorQuery().in(_self);  
        //新版本这里在获取节点失败后不再调用boundingClientRect方法了  
        query.select('#containerId').boundingClientRect(data => {  
            isRecovery = false  
        }).exec();  
        setTimeout(() => {  
            if (isRecovery) {  
                if (isTab) {  
                    uni.reLaunch({  
                        url  
                    })  
                } else {  
                    uni.redirectTo({  
                        url  
                    })  
                }  
            }  
        }, 600)  
    }  
    // #endif  
}

然后我根据这个改了一版,在使用前需要以下条件
1、需要一个全局挂载的工具类,Vue.prototype.$utils = utils
2、在需要使用的页面(一般为tab页)最外层<view>需要设置为同一个class名称
3、在onshow方法调用
目前好像就tab页出现白屏比较严重,只需要在tabbar页使用应该就够了

let pageList = {};  
const utils = {  
    reloadCurrentPage: function(_self, isTab = true) {  
        // #ifdef APP-PLUS  
        var route = _self.$scope.route  
        var data = _self.$scope.options && _self.$scope.options.data  
        var url = '/' + route  
        if (data) {  
            url = '/' + route + '?data=' + data  
        }  
        var isRecovery = true;  
        let newTime = Date.now();  
        if (pageList[url]) {  
            const query = uni.createSelectorQuery().in(_self);  
            //这里select()中替换为自己的样式class名称  
            query.select('.container').fields({size:true}, data => {  
                isRecovery = false  
            }).exec();  
            setTimeout(() => {  
                if (isRecovery) {  
                    //如果获取不到节点  
                    //确保只刷新一次  
                    if (newTime - pageList[url] > 3000) {  
                        //超过3秒才重新刷新,这里设置几秒就行,目的是防止无限刷新  
                        //因为刷新后页面肯定会出来,但是立马再次调用该方法不一定能获取节点  
                        pageList[url] = newTime;  
                        if (isTab) {  
                            uni.reLaunch({  
                                url  
                            })  
                        } else {  
                            uni.redirectTo({  
                                url  
                            })  
                        }  
                    }  
                }  
            }, 600)  
        } else {  
            pageList[url] = newTime;  
        }  
        // if (plus.os.name === 'iOS') {  

        // }  
        // #endif  
    }  
}
继续阅读 »

首先还是应该将tabbar页面用nvue编写,就不会出现这种问题了。
但是我的使用了过多组件,相当于要重构了。。。就放弃改为nvue了。下面是我根据之前版本的方法修改的,大概能解决大部分问题?

先贴原来用的方法,这个是在社区找到的,新版不能使用原因请看注释

function reloadCurrentPage(_self, isTab = true) {  
    // #ifdef APP-PLUS  
    if (plus.os.name === 'iOS') {  
        var route = _self.$scope.route  
        var data = _self.$scope.options && _self.$scope.options.data  
        var url = '/' + route  
        if (data) {  
            url = '/' + route + '?data=' + data  
        }  
        var isRecovery = true;  
        const query = uni.createSelectorQuery().in(_self);  
        //新版本这里在获取节点失败后不再调用boundingClientRect方法了  
        query.select('#containerId').boundingClientRect(data => {  
            isRecovery = false  
        }).exec();  
        setTimeout(() => {  
            if (isRecovery) {  
                if (isTab) {  
                    uni.reLaunch({  
                        url  
                    })  
                } else {  
                    uni.redirectTo({  
                        url  
                    })  
                }  
            }  
        }, 600)  
    }  
    // #endif  
}

然后我根据这个改了一版,在使用前需要以下条件
1、需要一个全局挂载的工具类,Vue.prototype.$utils = utils
2、在需要使用的页面(一般为tab页)最外层<view>需要设置为同一个class名称
3、在onshow方法调用
目前好像就tab页出现白屏比较严重,只需要在tabbar页使用应该就够了

let pageList = {};  
const utils = {  
    reloadCurrentPage: function(_self, isTab = true) {  
        // #ifdef APP-PLUS  
        var route = _self.$scope.route  
        var data = _self.$scope.options && _self.$scope.options.data  
        var url = '/' + route  
        if (data) {  
            url = '/' + route + '?data=' + data  
        }  
        var isRecovery = true;  
        let newTime = Date.now();  
        if (pageList[url]) {  
            const query = uni.createSelectorQuery().in(_self);  
            //这里select()中替换为自己的样式class名称  
            query.select('.container').fields({size:true}, data => {  
                isRecovery = false  
            }).exec();  
            setTimeout(() => {  
                if (isRecovery) {  
                    //如果获取不到节点  
                    //确保只刷新一次  
                    if (newTime - pageList[url] > 3000) {  
                        //超过3秒才重新刷新,这里设置几秒就行,目的是防止无限刷新  
                        //因为刷新后页面肯定会出来,但是立马再次调用该方法不一定能获取节点  
                        pageList[url] = newTime;  
                        if (isTab) {  
                            uni.reLaunch({  
                                url  
                            })  
                        } else {  
                            uni.redirectTo({  
                                url  
                            })  
                        }  
                    }  
                }  
            }, 600)  
        } else {  
            pageList[url] = newTime;  
        }  
        // if (plus.os.name === 'iOS') {  

        // }  
        // #endif  
    }  
}
收起阅读 »

App Store上架支持

专业App Store上架,如有需要请咨询QQ:514323566

专业App Store上架,如有需要请咨询QQ:514323566

个推技术分享 | 统一推送UPS详解及集成指南

近日,统一推送联盟宣布将把联盟的相关标准与成果纳入到中国信通院与中国互联网协会共建的“中国移动基础服务平台”(China Mobile Service,CMS)相关体系中,为我国移动互联网生态提供自主可控的第三方基础服务。联盟标准和成果中很重要的一部分就是统一推送标准及相关规范。

那么,究竟什么是统一推送?统一推送的意义和价值在哪里?为何统一推送标准得以被纳入到CMS中?开发者又该如何接入统一推送?

个推为您全面解读统一推送的那些事儿。

统一推送之由来

众所周知,谷歌的系统级推送服务GCM(Google Cloud Messaging)在国内无法使用。App开发者要在Android设备上进行消息下发,就需要考虑自建消息推送通道或使用第三方消息推送平台。同时,不同手机硬件厂商也会提供各自的系统级别的推送服务,比如华为推送、小米推送等。如此一来,APP开发者就需要针对不同的设备和系统去做适配,还要花费大量的时间和人力对接、管理和维护不同的推送通道。

为保证服务一致性,降低开发者使用推送服务的成本,2017年10月,在工信部号召下,中国信息通信研究院泰尔终端实验室牵头,联手众多手机厂商和个推等提供推送服务的互联网企业,共同建立了统一推送联盟。联盟的核心任务之一,就是通过标准化的方式统一推送通道和接口,帮助开发者更好地解决消息推送需求,并为终端用户带来更好的使用体验,破解移动互联网生态碎片化的问题。

统一推送UPS:为开发者带来重大利好

2018年,统一推送联盟发布了我国自主的移动基础服务标准《统一推送通道层接口规范》。通过对规范进行更新和完善,联盟于2019年发布《T-UPA0002-2019统一推送接口层规范(冻结版)》,为设备厂商和第三方消息推送服务商适配和实现统一推送提供了具体规范和技术标准。UPS(Unified Push Service),指的则是使用统一的推送通道层接口规范,已经适配和满足统一推送标准的消息推送服务。

图片来源:www.chinaupa.com
如上图所示,UPS的接口规范主要包含两部分:
APP-Server与UPS-Server之间的API接口集L1,包含推送请求的鉴权(Auth)、提交推送(Send);
App-Client与UPS-SDK之间的API接口集L2,包含注册令牌(registerToken)、注销令牌(unRegisterToken)、开启推送(turnOnPush)、关闭推送(turnOffPush)。

当应用方使用UPS时,无论是Server端还是Client端,只需按照UPS接口,即可对接所有支持UPS的厂商,无需针对每家厂商一一对接不同接口,真正给开发者节省了大量成本,带来了极大便利。

同时,由于UPS是系统级的推送服务,还能帮助APP大大提升消息的到达率,使得应用即使在后台不活跃的状态下也能收到消息;同时,UPS还可减少手机因为无效连接所耗费的流量消耗以及对系统资源的占用,极大提升终端用户的使用体验。根据统一推送联盟的待机功耗测试结果,系统级推送可以降低30%~40%的手机待机能耗。

综上,无论是对开发者还是对终端用户,统一推送标准的制定和应用都具有非常重要和明显的积极意义。目前,华为、荣耀、OPPO、中兴、vivo、小米、红米等众多知名手机厂商均已通过统一推送联盟测试,完成了对统一推送联盟相关标准的支持。

个推统一推送解决方案

个推是统一推送联盟内唯一一家成为副理事长单位的第三方消息推送服务商。一直以来,个推积极开放和分享自身在推送领域的多年实践和经验,是工信部安卓统一推送服务UPS技术标准制定的主要推动方之一。个推还是业内首家支持UPS标准的第三方消息推送服务商,并陆续同三星、索尼、坚果、比亚迪、海信、零跑汽车等达成战略合作,为手机及电视厂商、智能汽车制造商、汽车操作系统提供商等客户搭建符合UPS标准的智能触达体系,提供统一推送解决方案。

接下来,本文介绍厂商和开发者如何通过个推接入统一推送UPS。

一、厂商通过个推接入UPS

Step1:建立系统级长连接
个推提供符合统一推送标准的推送SDK——个推UPS SDK。厂商将个推UPS SDK集成到系统层后,即可与个推UPS服务建立系统级长连接。

Step2:通过UPS下发消息
厂商通过UPS下发消息的方式有两种,一种是直接使用个推的消息推送服务下发消息,此种方式适用于未自建推送通道的厂商,能够帮助厂商一次性、高效率搭建起符合UPS的消息推送通道,同时还能依托个推智能标签推送、场景推送等技术能力,对用户展开个性化、智慧化的有效触达。

另一种方式主要面向拥有开发者平台的厂商,该类型厂商通过个推UPS服务,帮助开发者完成消息的统一推送。

二、开发者通过个推集成UPS

个推还面向广大App开发者开放了UPS集成方式。
已经注册接入个推SDK的开发者只需要完成以下两步,即可使用个推UPS服务:

Step1:进入个推开发者中心开通UPS机型
目前个推消息推送服务支持的UPS手机厂商有坚果、索尼等。

Step2:在dependencies中增加UPS扩展包依赖
implementation 'com.getui.opt:ups:{version}'
详细接入流程请参考个推文档中心:docs.getui.com/getui/mobil…

统一推送标准的推出,以及各大手机、电视、汽车等厂商和操作系统供应商对统一推送标准的逐步适配,为互联网生态建设提供了极大推动力,也进一步促进了万物互联。接下来,个推还将持续关注统一推送的动态,并面向开发者继续分享消息推送、大数据等领域的技术实践和解决方案,欢迎大家保持关注。

继续阅读 »

近日,统一推送联盟宣布将把联盟的相关标准与成果纳入到中国信通院与中国互联网协会共建的“中国移动基础服务平台”(China Mobile Service,CMS)相关体系中,为我国移动互联网生态提供自主可控的第三方基础服务。联盟标准和成果中很重要的一部分就是统一推送标准及相关规范。

那么,究竟什么是统一推送?统一推送的意义和价值在哪里?为何统一推送标准得以被纳入到CMS中?开发者又该如何接入统一推送?

个推为您全面解读统一推送的那些事儿。

统一推送之由来

众所周知,谷歌的系统级推送服务GCM(Google Cloud Messaging)在国内无法使用。App开发者要在Android设备上进行消息下发,就需要考虑自建消息推送通道或使用第三方消息推送平台。同时,不同手机硬件厂商也会提供各自的系统级别的推送服务,比如华为推送、小米推送等。如此一来,APP开发者就需要针对不同的设备和系统去做适配,还要花费大量的时间和人力对接、管理和维护不同的推送通道。

为保证服务一致性,降低开发者使用推送服务的成本,2017年10月,在工信部号召下,中国信息通信研究院泰尔终端实验室牵头,联手众多手机厂商和个推等提供推送服务的互联网企业,共同建立了统一推送联盟。联盟的核心任务之一,就是通过标准化的方式统一推送通道和接口,帮助开发者更好地解决消息推送需求,并为终端用户带来更好的使用体验,破解移动互联网生态碎片化的问题。

统一推送UPS:为开发者带来重大利好

2018年,统一推送联盟发布了我国自主的移动基础服务标准《统一推送通道层接口规范》。通过对规范进行更新和完善,联盟于2019年发布《T-UPA0002-2019统一推送接口层规范(冻结版)》,为设备厂商和第三方消息推送服务商适配和实现统一推送提供了具体规范和技术标准。UPS(Unified Push Service),指的则是使用统一的推送通道层接口规范,已经适配和满足统一推送标准的消息推送服务。

图片来源:www.chinaupa.com
如上图所示,UPS的接口规范主要包含两部分:
APP-Server与UPS-Server之间的API接口集L1,包含推送请求的鉴权(Auth)、提交推送(Send);
App-Client与UPS-SDK之间的API接口集L2,包含注册令牌(registerToken)、注销令牌(unRegisterToken)、开启推送(turnOnPush)、关闭推送(turnOffPush)。

当应用方使用UPS时,无论是Server端还是Client端,只需按照UPS接口,即可对接所有支持UPS的厂商,无需针对每家厂商一一对接不同接口,真正给开发者节省了大量成本,带来了极大便利。

同时,由于UPS是系统级的推送服务,还能帮助APP大大提升消息的到达率,使得应用即使在后台不活跃的状态下也能收到消息;同时,UPS还可减少手机因为无效连接所耗费的流量消耗以及对系统资源的占用,极大提升终端用户的使用体验。根据统一推送联盟的待机功耗测试结果,系统级推送可以降低30%~40%的手机待机能耗。

综上,无论是对开发者还是对终端用户,统一推送标准的制定和应用都具有非常重要和明显的积极意义。目前,华为、荣耀、OPPO、中兴、vivo、小米、红米等众多知名手机厂商均已通过统一推送联盟测试,完成了对统一推送联盟相关标准的支持。

个推统一推送解决方案

个推是统一推送联盟内唯一一家成为副理事长单位的第三方消息推送服务商。一直以来,个推积极开放和分享自身在推送领域的多年实践和经验,是工信部安卓统一推送服务UPS技术标准制定的主要推动方之一。个推还是业内首家支持UPS标准的第三方消息推送服务商,并陆续同三星、索尼、坚果、比亚迪、海信、零跑汽车等达成战略合作,为手机及电视厂商、智能汽车制造商、汽车操作系统提供商等客户搭建符合UPS标准的智能触达体系,提供统一推送解决方案。

接下来,本文介绍厂商和开发者如何通过个推接入统一推送UPS。

一、厂商通过个推接入UPS

Step1:建立系统级长连接
个推提供符合统一推送标准的推送SDK——个推UPS SDK。厂商将个推UPS SDK集成到系统层后,即可与个推UPS服务建立系统级长连接。

Step2:通过UPS下发消息
厂商通过UPS下发消息的方式有两种,一种是直接使用个推的消息推送服务下发消息,此种方式适用于未自建推送通道的厂商,能够帮助厂商一次性、高效率搭建起符合UPS的消息推送通道,同时还能依托个推智能标签推送、场景推送等技术能力,对用户展开个性化、智慧化的有效触达。

另一种方式主要面向拥有开发者平台的厂商,该类型厂商通过个推UPS服务,帮助开发者完成消息的统一推送。

二、开发者通过个推集成UPS

个推还面向广大App开发者开放了UPS集成方式。
已经注册接入个推SDK的开发者只需要完成以下两步,即可使用个推UPS服务:

Step1:进入个推开发者中心开通UPS机型
目前个推消息推送服务支持的UPS手机厂商有坚果、索尼等。

Step2:在dependencies中增加UPS扩展包依赖
implementation 'com.getui.opt:ups:{version}'
详细接入流程请参考个推文档中心:docs.getui.com/getui/mobil…

统一推送标准的推出,以及各大手机、电视、汽车等厂商和操作系统供应商对统一推送标准的逐步适配,为互联网生态建设提供了极大推动力,也进一步促进了万物互联。接下来,个推还将持续关注统一推送的动态,并面向开发者继续分享消息推送、大数据等领域的技术实践和解决方案,欢迎大家保持关注。

收起阅读 »

最近上架iOS的大佬们进来交流一下经验

iOS打包 iOS 应用上架 上架

最近上架了两个iOS应用,都是以4.3的理由被拒绝了,想了解一下最近有没有其他朋友上架过iOS,结果怎么样,希望大家一起交流一下经验。

最近上架了两个iOS应用,都是以4.3的理由被拒绝了,想了解一下最近有没有其他朋友上架过iOS,结果怎么样,希望大家一起交流一下经验。

6700万次下载,“微信自动抢红包”软件被判赔475万

法律科普

一款名为“微信自动抢红包”的软件,可以使用户在微信软件后台运行的情况下,自动抢到微信红包,并且设置有“开启防封号保护”应对微信软件的治理措施。

这款软件的开发和运营方掌上远景公司以及提供下载平台的卓易讯畅公司,被微信软件的开发者和运营者腾讯科技公司、腾讯计算机公司以不正当竞争为由诉至北京知识产权法院。

近日,该案一审宣判,法院认定掌上远景公司构成不正当竞争,判决其赔偿两原告经济损失450万元及合理支出约25.4万元

法官说理

近年来,我国互联网技术发展迅猛,互联网产业规模逐年扩大,互联网领域内的创新非常活跃,新技术和商业模式层出不穷,行业内的竞争也异常激烈,带来了诸多新的竞争法问题。

2017年修订后的反不正当竞争法第十二条专门就规制网络环境下的不正当竞争行为问题作出规定,俗称“互联网专条”

反不正当竞争法第十二条:经营者利用网络从事生产经营活动,应当遵守本法的各项规定。

经营者不得利用技术手段,通过影响用户选择或者其他方式,实施下列妨碍、破坏其他经营者合法提供的网络产品或者服务正常运行的行为

(一)未经其他经营者同意,在其合法提供的网络产品或者服务中,插入链接、强制进行目标跳转;

(二)误导、欺骗、强迫用户修改、关闭、卸载其他经营者合法提供的网络产品或者服务;

(三)恶意对其他经营者合法提供的网络产品或者服务实施不兼容;

(四)其他妨碍、破坏其他经营者合法提供的网络产品或者服务正常运行的行为。

本案被诉不正当竞争行为不属于该条文第二款前三项中明确列举的行为,但是否属于第四项兜底条款以及反不正当竞争法第二条原则条款规制的范围,则应从以下几个方面进行分析:

首先,二原告与掌上远景公司、卓易讯畅公司均属利用网络从事生产经营活动的经营者,存在市场竞争关系。

其次,涉案软件利用技术手段破坏了微信软件的正常运行,侵害了二原告的合法权益。

涉案软件在功能上通过技术手段直接改变了“微信红包”功能的正常操作流程,以自动抢红包代替手动抢红包,架空了“微信红包”功能的娱乐性和社交性,损害了微信软件的竞争优势和用户体验,进而可能减少微信用户使用微信的黏性和时间,削弱了二原告通过微信流量变现的能力,实质上破坏了二原告运营微信获益的正常商业模式,直接妨碍和破坏了微信软件的正常运行。

此外,批量化、自动化的操作方式也必然会增加微信软件运行的数据量和数据流,增加微信服务器的运营负担。

再次,涉案软件不当地利用了微信软件的运营资源和竞争优势,扰乱互联网环境中市场竞争秩序,并损害了软件用户的利益

涉案软件相关页面显示,其具有“加速抢红包”“抢大红包功能”等功能项,但实际上涉案软件并没有开发相应功能,点击“加速抢红包”等功能,会显示“优化中”,并在“优化完成”后弹出广告信息。这种诱导性的页面设置欺骗了消费者,侵害了消费者的选择权。

同时对于未使用涉案软件的用户,由于理论上手动操作滞后于系统自动操作,其亦无法获得公平获赠及领取红包的机会。

最后,掌上远景公司在实施被诉行为的过程中具有明显恶意,违反了诚信原则以及商业道德。

涉案软件设置有“开启防封号保护”功能,并设置有专门页面详细介绍防封号说明及技巧,可见掌上远景公司并未按照商业道德寻求与微信软件运营者的授权或合作,而是在明知二原告对涉案软件持否定态度的前提下,未经许可运营涉案软件且设置防封号功能应对二原告的治理措施,主观恶意明显。

法院认为

掌上远景公司开发并宣传、运营涉案软件行为虽未被明确列举于反不正当竞争法第十二条第二款前三项之中,但应属第十二条第二款第四项和第二条所规制的不正当竞争行为

被告卓易讯畅公司系软件分发平台,提供信息存储空间服务,涉案软件由掌上远景公司自行上传并发布,卓易讯畅公司并未宣传涉案软件,并无证据证明卓易讯畅公司存在帮助他人实施不正当竞争行为的主观意图,不构成不正当竞争。

涉案行为自2016年1月持续至本案审理之时,持续时间长,下载量、用户规模较大。涉案软件在OPPO软件商店、PP助手、“豌豆荚”、华为应用市场、百度手机助手、酷派应用商店等安卓应用分发平台的下载量总计超过6747.6万次。掌上远景公司曾宣传该软件“累计用户达2000万,荣获中国开发者百强APP称号”。

最终,法院判决掌上远景公司赔偿二原告经济损失450万元及合理支出约25.4万元

双方当事人均未提出上诉,目前该案已生效。

【来源:来源:光明日报 转自:中国青年网】,声明:转载此文是出于传递更多信息之目的。若有来源标注错误或侵犯了您的合法权益,请作者持权属证明与本网联系,我们将及时更正、删除,谢谢。 邮箱地址:pufa@dcloud.io 。

原文链接

继续阅读 »

一款名为“微信自动抢红包”的软件,可以使用户在微信软件后台运行的情况下,自动抢到微信红包,并且设置有“开启防封号保护”应对微信软件的治理措施。

这款软件的开发和运营方掌上远景公司以及提供下载平台的卓易讯畅公司,被微信软件的开发者和运营者腾讯科技公司、腾讯计算机公司以不正当竞争为由诉至北京知识产权法院。

近日,该案一审宣判,法院认定掌上远景公司构成不正当竞争,判决其赔偿两原告经济损失450万元及合理支出约25.4万元

法官说理

近年来,我国互联网技术发展迅猛,互联网产业规模逐年扩大,互联网领域内的创新非常活跃,新技术和商业模式层出不穷,行业内的竞争也异常激烈,带来了诸多新的竞争法问题。

2017年修订后的反不正当竞争法第十二条专门就规制网络环境下的不正当竞争行为问题作出规定,俗称“互联网专条”

反不正当竞争法第十二条:经营者利用网络从事生产经营活动,应当遵守本法的各项规定。

经营者不得利用技术手段,通过影响用户选择或者其他方式,实施下列妨碍、破坏其他经营者合法提供的网络产品或者服务正常运行的行为

(一)未经其他经营者同意,在其合法提供的网络产品或者服务中,插入链接、强制进行目标跳转;

(二)误导、欺骗、强迫用户修改、关闭、卸载其他经营者合法提供的网络产品或者服务;

(三)恶意对其他经营者合法提供的网络产品或者服务实施不兼容;

(四)其他妨碍、破坏其他经营者合法提供的网络产品或者服务正常运行的行为。

本案被诉不正当竞争行为不属于该条文第二款前三项中明确列举的行为,但是否属于第四项兜底条款以及反不正当竞争法第二条原则条款规制的范围,则应从以下几个方面进行分析:

首先,二原告与掌上远景公司、卓易讯畅公司均属利用网络从事生产经营活动的经营者,存在市场竞争关系。

其次,涉案软件利用技术手段破坏了微信软件的正常运行,侵害了二原告的合法权益。

涉案软件在功能上通过技术手段直接改变了“微信红包”功能的正常操作流程,以自动抢红包代替手动抢红包,架空了“微信红包”功能的娱乐性和社交性,损害了微信软件的竞争优势和用户体验,进而可能减少微信用户使用微信的黏性和时间,削弱了二原告通过微信流量变现的能力,实质上破坏了二原告运营微信获益的正常商业模式,直接妨碍和破坏了微信软件的正常运行。

此外,批量化、自动化的操作方式也必然会增加微信软件运行的数据量和数据流,增加微信服务器的运营负担。

再次,涉案软件不当地利用了微信软件的运营资源和竞争优势,扰乱互联网环境中市场竞争秩序,并损害了软件用户的利益

涉案软件相关页面显示,其具有“加速抢红包”“抢大红包功能”等功能项,但实际上涉案软件并没有开发相应功能,点击“加速抢红包”等功能,会显示“优化中”,并在“优化完成”后弹出广告信息。这种诱导性的页面设置欺骗了消费者,侵害了消费者的选择权。

同时对于未使用涉案软件的用户,由于理论上手动操作滞后于系统自动操作,其亦无法获得公平获赠及领取红包的机会。

最后,掌上远景公司在实施被诉行为的过程中具有明显恶意,违反了诚信原则以及商业道德。

涉案软件设置有“开启防封号保护”功能,并设置有专门页面详细介绍防封号说明及技巧,可见掌上远景公司并未按照商业道德寻求与微信软件运营者的授权或合作,而是在明知二原告对涉案软件持否定态度的前提下,未经许可运营涉案软件且设置防封号功能应对二原告的治理措施,主观恶意明显。

法院认为

掌上远景公司开发并宣传、运营涉案软件行为虽未被明确列举于反不正当竞争法第十二条第二款前三项之中,但应属第十二条第二款第四项和第二条所规制的不正当竞争行为

被告卓易讯畅公司系软件分发平台,提供信息存储空间服务,涉案软件由掌上远景公司自行上传并发布,卓易讯畅公司并未宣传涉案软件,并无证据证明卓易讯畅公司存在帮助他人实施不正当竞争行为的主观意图,不构成不正当竞争。

涉案行为自2016年1月持续至本案审理之时,持续时间长,下载量、用户规模较大。涉案软件在OPPO软件商店、PP助手、“豌豆荚”、华为应用市场、百度手机助手、酷派应用商店等安卓应用分发平台的下载量总计超过6747.6万次。掌上远景公司曾宣传该软件“累计用户达2000万,荣获中国开发者百强APP称号”。

最终,法院判决掌上远景公司赔偿二原告经济损失450万元及合理支出约25.4万元

双方当事人均未提出上诉,目前该案已生效。

【来源:来源:光明日报 转自:中国青年网】,声明:转载此文是出于传递更多信息之目的。若有来源标注错误或侵犯了您的合法权益,请作者持权属证明与本网联系,我们将及时更正、删除,谢谢。 邮箱地址:pufa@dcloud.io 。

原文链接

收起阅读 »

个人兼职接单,前后端皆可开发

本人有参与过大中型项目开发,可接前端页面开发,也可接后端开发。后端主要是Java开发,有意向的老板请砸单过来,联系:QQ1640367234(备注Dcloud),码云开源项目地址:https://gitee.com/liyp648181796/my-open-project.git;
uniapp插件地址:https://ext.dcloud.net.cn/plugin?id=5604

继续阅读 »

本人有参与过大中型项目开发,可接前端页面开发,也可接后端开发。后端主要是Java开发,有意向的老板请砸单过来,联系:QQ1640367234(备注Dcloud),码云开源项目地址:https://gitee.com/liyp648181796/my-open-project.git;
uniapp插件地址:https://ext.dcloud.net.cn/plugin?id=5604

收起阅读 »

uniapp踩坑笔记01-环境部署开发环境和生产环境

uniapp

最近用uniapp开发项目,作为一个后端还是遇到了不少坑,在此记录一下。开发环境,测试环境,发布环境不同环境下部署的参数和接口都是不一样,这是一个很基础的需求。uniapp的文档写的有点乱,很容易一头雾水,其实并不难就是要分清uniapp的HBuilderX和vue工程下的区别。这里不多赘述 :环境部署开发环境和生产环境

继续阅读 »

最近用uniapp开发项目,作为一个后端还是遇到了不少坑,在此记录一下。开发环境,测试环境,发布环境不同环境下部署的参数和接口都是不一样,这是一个很基础的需求。uniapp的文档写的有点乱,很容易一头雾水,其实并不难就是要分清uniapp的HBuilderX和vue工程下的区别。这里不多赘述 :环境部署开发环境和生产环境

收起阅读 »

除了ACM、CCPC......这个大赛也来了!带着数十万奖金!

如何在短短一个暑假成为“荣耀王者”?

不仅成功加入“数智夏令营”

获得专家大咖1v1指导,

还能赢取数万元奖金,

拿到名企Offer?

同学们支棱起来!

2021 Datathon数智马拉松大赛

邀你参赛“开黑”!

只要你脑洞够大、创意够IN
都可报名参赛!
暑期初赛奖金丰厚
· 一等奖团队3万元
· 二等奖团队2万元
· 三等奖团队1万元
决赛更有
数十万元巨额奖励
跨次元大数据命题
顶流专家评审天团
最IN挑战已发起,就等你来战
www.getui.com/event/2021-…
更多大赛信息,立即进群交流!

继续阅读 »

如何在短短一个暑假成为“荣耀王者”?

不仅成功加入“数智夏令营”

获得专家大咖1v1指导,

还能赢取数万元奖金,

拿到名企Offer?

同学们支棱起来!

2021 Datathon数智马拉松大赛

邀你参赛“开黑”!

只要你脑洞够大、创意够IN
都可报名参赛!
暑期初赛奖金丰厚
· 一等奖团队3万元
· 二等奖团队2万元
· 三等奖团队1万元
决赛更有
数十万元巨额奖励
跨次元大数据命题
顶流专家评审天团
最IN挑战已发起,就等你来战
www.getui.com/event/2021-…
更多大赛信息,立即进群交流!

收起阅读 »

manifest.json 已经配置fullscreen:false 进入应用还是全屏

全屏

删除掉plus->statusbar的配置:

"statusbar" : {    
            "immersed" : true,    
            "background" : "#D74B28"    
        },
继续阅读 »

删除掉plus->statusbar的配置:

"statusbar" : {    
            "immersed" : true,    
            "background" : "#D74B28"    
        },
收起阅读 »

uniapp配置manifest.json首次进入弹窗呈现隐私权限,点击确定后再弹窗授权.md

隐私弹窗 uniapp

uniapp配置manifest.json首次进入弹窗呈现隐私权限,点击确定后再弹窗授权_残阳曦月-CSDN博客:https://blog.csdn.net/Jo_liver/article/details/119000375

uniapp配置manifest.json首次进入弹窗呈现隐私权限,点击确定后再弹窗授权_残阳曦月-CSDN博客:https://blog.csdn.net/Jo_liver/article/details/119000375