HBuilderX

HBuilderX

极客开发工具
uni-app

uni-app

开发一次,多端覆盖
uniCloud

uniCloud

云开发平台
HTML5+

HTML5+

增强HTML5的功能体验
MUI

MUI

上万Star的前端框架

uniapp-小程序支付DOME

支付

DOME已测试,后端代


码,调用,前端使用,数据样例都写在附件里了,测试没问题整理到有道云笔记后导出的pdf

DOME已测试,后端代


码,调用,前端使用,数据样例都写在附件里了,测试没问题整理到有道云笔记后导出的pdf

上一个app的MQTT例子

App

利用plus-websocket和修改后的mqttws31.js实现,看附件代码(代码已删)
官方App端已修复 websocket 问题,可以使用 MQTT.js,示例:https://ext.dcloud.net.cn/plugin?id=854

利用plus-websocket和修改后的mqttws31.js实现,看附件代码(代码已删)
官方App端已修复 websocket 问题,可以使用 MQTT.js,示例:https://ext.dcloud.net.cn/plugin?id=854

mui在线房屋出租租房平台app界面模板

mui

基于mui框架制作的一款在线房屋出租租房平台app界面模板,房屋租赁手机app模板,挺不错的,推荐给大家。

下载地址:https://www.sucaihuo.com/templates/6225.html

继续阅读 »

基于mui框架制作的一款在线房屋出租租房平台app界面模板,房屋租赁手机app模板,挺不错的,推荐给大家。

下载地址:https://www.sucaihuo.com/templates/6225.html

收起阅读 »

点击返回按钮出现提示框,确定的时候才返回

uniapp

有时候我们在编辑页面的时候有这样一个场景,当用户点击返回按钮,给一个弹框,提示是否确定返回,以下是代码实现

onBackPress(options) {  
      // 如果是返回按钮,才做执行  
      if (options.from === 'backbutton') {  
        uni.showModal({  
          title: '提示',  
          content: '确定退出编辑吗?',  
          success: (res) => {  
            if (res.confirm) {  
              uni.navigateBack()  
            }  
          }  
        })  
        // 禁止默认返回  
        return true  
      }  
    },
继续阅读 »

有时候我们在编辑页面的时候有这样一个场景,当用户点击返回按钮,给一个弹框,提示是否确定返回,以下是代码实现

onBackPress(options) {  
      // 如果是返回按钮,才做执行  
      if (options.from === 'backbutton') {  
        uni.showModal({  
          title: '提示',  
          content: '确定退出编辑吗?',  
          success: (res) => {  
            if (res.confirm) {  
              uni.navigateBack()  
            }  
          }  
        })  
        // 禁止默认返回  
        return true  
      }  
    },
收起阅读 »

iOS提交AppStore审核时:提示有其他支付并隐藏功能被拒的处理办法

提示有其他支付并隐藏功能被拒 iOS离线打包

背景提示:数字类产品(比如购买会员等不需要配送实物的商品),Apple规定必须使用苹果IAP应用内支付,给Apple分成30%。打包的时候不要勾选微信或支付宝等其他支付方式。如果你提交的包里包含了微信支付宝等支付的sdk,即使没使用,Appstore也会认为你有隐藏方式,以后会绕过iap,不给Apple分成,因此拒绝你的App上线

  • 应用中如果没有交易功能,不要包含任何支付相关模块和任何支付相关的js代码
  • 应用中如果只包含虚拟物品交易,只能使用苹果应用内支付(IAP),不能使用支付宝和微信支付
  • 应用中如果包含实物交易,可以包含支付宝和微信支付

使用HBuilderX提交云端打包

提交苹果商店审核时,提示“有其他支付并隐藏功能被拒”或者“报PGPay SDK不允许上架的问题”,请按以下方法处理:

  • 如果应用没有交易功能,在manifest.json的“(App)模块权限配置”页的“打包模块配置”项下不要勾选“Payment(支付)”,重新打包提交
  • 如果应用只包含虚拟物品交易,在manifest.json的“(App)SDK配置”页的“支付”项下勾选“Apple应用内支付”,不要勾选支付宝和微信支付。这时需要和苹果沟通,说明的大概意思是:PGPay SDK 的PGPay只是个名字而已,并不是什么支付SDK,并没有违反苹果支付相关的政策。
  • 如果应用包含实物交易,可以使用支付宝和微信支付。这时需要和苹果沟通,说明应用使用支付功能的场景。

使用5+ SDK本地离线打包

按照签名的规则确定应用包含的支付模块,按以下方法确认:

  • 确定工程中是否有微信和支付宝支付的功能,如果没有把不需要的微信和支付宝的相关库删除,删除时参考离线sdk包里的Feature-iOS.xls文件中Payment模块的配置。
    注意:微信SDK有2个,一个是带支付的(libWeChatSDK_pay.a),一个是不带支付的(libWeChatSDK.a),删除时,删除带支付的。但是工程中有用到微信其他的功能需要添加libWeChatSDK.a库以免编译报错
  • 如果工程中没有微信和支付宝的功能,但是有苹果支付的功能需要liblibPayment.a库和libIAPPay.a,只有libIAPPay.a库,工程编译会报错。
  • 如果工程中也没有苹果支付,那么把liblibPayment.a库和libIAPPay.a都删除,删除时参考离线sdk包里的Feature-iOS.xls文件中Payment模块的配置。
  • 如果工程中有libBaiduWalletSDK.a,libpingpppay.a和libpingpp.a这3个库,Pingpp.bundle和BaiduWalletSDKBundle.bundle这2个文件,把它们都删除。
  • 如果删除过程中编译报“_SKStoreProductViewController”这么一个错,需要在工程中添加系统库StoreKit.framework。
  • 如果工程中没有支付功能需把相关的支付的js代码删除。
  • 查看工程中PandoraApi.bundle中feature.plist文件,把Payment节点下的extend节点里的项,按自己的业务情况删除;比如,业务中没有支付宝支付,那就把“alix”这项删除,没有微信支付,就把“weixin”这项删除,如果没有支付功能,把Payment整个节点删除。
  • 如果还是提示“有其他支付并隐藏功能被拒”或者“报PGPay SDK不允许上架的问题”,需要和苹果沟通,说明的大概意思是:PGPay SDK 的PGPay只是个名字而已,并不是什么支付SDK,并没有违反苹果支付相关的政策。

提示这个“报PGPay SDK不允许上架的问题” 在2.3.3.20190924之后的版本会把名字改掉,以便不再报这个上架的问题。

继续阅读 »

背景提示:数字类产品(比如购买会员等不需要配送实物的商品),Apple规定必须使用苹果IAP应用内支付,给Apple分成30%。打包的时候不要勾选微信或支付宝等其他支付方式。如果你提交的包里包含了微信支付宝等支付的sdk,即使没使用,Appstore也会认为你有隐藏方式,以后会绕过iap,不给Apple分成,因此拒绝你的App上线

  • 应用中如果没有交易功能,不要包含任何支付相关模块和任何支付相关的js代码
  • 应用中如果只包含虚拟物品交易,只能使用苹果应用内支付(IAP),不能使用支付宝和微信支付
  • 应用中如果包含实物交易,可以包含支付宝和微信支付

使用HBuilderX提交云端打包

提交苹果商店审核时,提示“有其他支付并隐藏功能被拒”或者“报PGPay SDK不允许上架的问题”,请按以下方法处理:

  • 如果应用没有交易功能,在manifest.json的“(App)模块权限配置”页的“打包模块配置”项下不要勾选“Payment(支付)”,重新打包提交
  • 如果应用只包含虚拟物品交易,在manifest.json的“(App)SDK配置”页的“支付”项下勾选“Apple应用内支付”,不要勾选支付宝和微信支付。这时需要和苹果沟通,说明的大概意思是:PGPay SDK 的PGPay只是个名字而已,并不是什么支付SDK,并没有违反苹果支付相关的政策。
  • 如果应用包含实物交易,可以使用支付宝和微信支付。这时需要和苹果沟通,说明应用使用支付功能的场景。

使用5+ SDK本地离线打包

按照签名的规则确定应用包含的支付模块,按以下方法确认:

  • 确定工程中是否有微信和支付宝支付的功能,如果没有把不需要的微信和支付宝的相关库删除,删除时参考离线sdk包里的Feature-iOS.xls文件中Payment模块的配置。
    注意:微信SDK有2个,一个是带支付的(libWeChatSDK_pay.a),一个是不带支付的(libWeChatSDK.a),删除时,删除带支付的。但是工程中有用到微信其他的功能需要添加libWeChatSDK.a库以免编译报错
  • 如果工程中没有微信和支付宝的功能,但是有苹果支付的功能需要liblibPayment.a库和libIAPPay.a,只有libIAPPay.a库,工程编译会报错。
  • 如果工程中也没有苹果支付,那么把liblibPayment.a库和libIAPPay.a都删除,删除时参考离线sdk包里的Feature-iOS.xls文件中Payment模块的配置。
  • 如果工程中有libBaiduWalletSDK.a,libpingpppay.a和libpingpp.a这3个库,Pingpp.bundle和BaiduWalletSDKBundle.bundle这2个文件,把它们都删除。
  • 如果删除过程中编译报“_SKStoreProductViewController”这么一个错,需要在工程中添加系统库StoreKit.framework。
  • 如果工程中没有支付功能需把相关的支付的js代码删除。
  • 查看工程中PandoraApi.bundle中feature.plist文件,把Payment节点下的extend节点里的项,按自己的业务情况删除;比如,业务中没有支付宝支付,那就把“alix”这项删除,没有微信支付,就把“weixin”这项删除,如果没有支付功能,把Payment整个节点删除。
  • 如果还是提示“有其他支付并隐藏功能被拒”或者“报PGPay SDK不允许上架的问题”,需要和苹果沟通,说明的大概意思是:PGPay SDK 的PGPay只是个名字而已,并不是什么支付SDK,并没有违反苹果支付相关的政策。

提示这个“报PGPay SDK不允许上架的问题” 在2.3.3.20190924之后的版本会把名字改掉,以便不再报这个上架的问题。

收起阅读 »

自定义相机,拍照,拍题

相机权限 拍照 插件

https://ext.dcloud.net.cn/plugin?id=838

启用原生相机进行拍照或者选择相册中的照片,进行二次裁剪

如需5+ 离线打包请联系作者

继续阅读 »

https://ext.dcloud.net.cn/plugin?id=838

启用原生相机进行拍照或者选择相册中的照片,进行二次裁剪

如需5+ 离线打包请联系作者

收起阅读 »

iOS平台微信SDK更新需要配置通用链接(Universal Links)

iOS 通用链接

本文档已过期,适用于:本地离线打包或者由于某种原因你需要用传统的方式:私有化部署服务器来托管apple-app-site-association文件创建通用链接。

推荐使用:一键生成iOS通用链接

从HBuilderX 2.3.4版本开始,微信SDK(登录、分享、支付)更新到openSDK1.8.6。

由于苹果iOS 13系统版本安全升级,微信SDK1.8.6版本要求支持Universal Links方式跳转,以便进行合法性校验,提升安全性。更多详情请参考微信官方说明

如果不配置通用链接,使用新版本HX提交云端打包会失败,提示以下错误信息:

Error code = -5000  
Error message:   
Error: not set parameter 'UniversalLinks' @'oauth-weixin'

第一步:配置应用支持通用链接

参考:iOS平台配置通用链接(Universal Link)

以上配置完成可确定通用链接地址,如“https://demo.dcloud.net.cn/ulink/”(要求必须使用https协议,以"/"结尾,此链接仅为文档示例,实际应用请根据自己的配置填写

第二步:在微信开放平台配置通用链接

打开微信开发平台,在“管理中心”页面的“移动应用”下找到已经申请的应用(没有申请应用请点击“创建移动应用”新建应用),点击“查看”打开应用详情页面。
在“开发信息”栏后点击修改,在“iOS应用”下的“Universal Links”项中配置应用的通用链接,如下图所示:

第三步:在HBuilderX中配置通用链接提交云端打包

将上一步在微信开放平台配置的通用链接地址配置到应用manifest.json中,注意通用链接地址必须完全一致(本地离线打包忽略此操作)
打开项目的manifest.json文件,在“(App) SDK配置”项中的微信登录(微信分享、微信支付)下的“iOS平台通用链接(Universal Links)”中配置:

如果使用了微信分享和微信支付,也需要分别配置微信分享和微信支付下的“iOS平台通用链接(Universal Links)”,并且配置的值必须相同


保存后需提交云端打包生效。

本地离线打包配置微信通用链接

参考:https://ask.dcloud.net.cn/article/309#ulink

继续阅读 »

本文档已过期,适用于:本地离线打包或者由于某种原因你需要用传统的方式:私有化部署服务器来托管apple-app-site-association文件创建通用链接。

推荐使用:一键生成iOS通用链接

从HBuilderX 2.3.4版本开始,微信SDK(登录、分享、支付)更新到openSDK1.8.6。

由于苹果iOS 13系统版本安全升级,微信SDK1.8.6版本要求支持Universal Links方式跳转,以便进行合法性校验,提升安全性。更多详情请参考微信官方说明

如果不配置通用链接,使用新版本HX提交云端打包会失败,提示以下错误信息:

Error code = -5000  
Error message:   
Error: not set parameter 'UniversalLinks' @'oauth-weixin'

第一步:配置应用支持通用链接

参考:iOS平台配置通用链接(Universal Link)

以上配置完成可确定通用链接地址,如“https://demo.dcloud.net.cn/ulink/”(要求必须使用https协议,以"/"结尾,此链接仅为文档示例,实际应用请根据自己的配置填写

第二步:在微信开放平台配置通用链接

打开微信开发平台,在“管理中心”页面的“移动应用”下找到已经申请的应用(没有申请应用请点击“创建移动应用”新建应用),点击“查看”打开应用详情页面。
在“开发信息”栏后点击修改,在“iOS应用”下的“Universal Links”项中配置应用的通用链接,如下图所示:

第三步:在HBuilderX中配置通用链接提交云端打包

将上一步在微信开放平台配置的通用链接地址配置到应用manifest.json中,注意通用链接地址必须完全一致(本地离线打包忽略此操作)
打开项目的manifest.json文件,在“(App) SDK配置”项中的微信登录(微信分享、微信支付)下的“iOS平台通用链接(Universal Links)”中配置:

如果使用了微信分享和微信支付,也需要分别配置微信分享和微信支付下的“iOS平台通用链接(Universal Links)”,并且配置的值必须相同


保存后需提交云端打包生效。

本地离线打包配置微信通用链接

参考:https://ask.dcloud.net.cn/article/309#ulink

收起阅读 »

Hello Hbuilder ,i'm coming.

Hello uni-app,i'm coming.Studing and testing……

Hello uni-app,i'm coming.Studing and testing……

直播定位,钉钉打卡,友圈改位都可用

游戏 后台定位 直播


首先要有一个硬壳芯片

插上手机后就可以随意改位置了,还可以边充电边使用的哦

操作简便谁都可以上手操作,想改哪里就改哪里。最主要的是安全,主要原理很简单,就是把手机的GPS定位给更换了,可以让手机随意定位全国的任何一个位置,这个不是挂,只是一个更换手机GPS定位的,整个手机的定位相当于都更换了,手机内的所有软件都生效,比如你朋友圈附近人都更换成定位的位置了!

功能之所以强大,就是装个X ,发个朋友圈,找个附近的人陌陌都可以的哦。身在农村的老屈,也终于可以找大城市附近的人聊聊感受了!真的是装X必备神器!更多功能还需要各位老铁去开发。

异地搞个直播,钉钉签个到打个卡都是这样的实现的,所以为什么那么多人可以在家轻松的打卡上班,正是因为他们有了一个这个!就连现在火热的一起来捉妖,靠虚拟定位才能抓妖的游戏,都能在家不出门捉妖了!真的是硬了那句话!

上有对策下有政策!好了我的世界你曾经来过,什么时候我上你的世界走走!笑看世间百态,乐观万里浮云!

继续阅读 »


首先要有一个硬壳芯片

插上手机后就可以随意改位置了,还可以边充电边使用的哦

操作简便谁都可以上手操作,想改哪里就改哪里。最主要的是安全,主要原理很简单,就是把手机的GPS定位给更换了,可以让手机随意定位全国的任何一个位置,这个不是挂,只是一个更换手机GPS定位的,整个手机的定位相当于都更换了,手机内的所有软件都生效,比如你朋友圈附近人都更换成定位的位置了!

功能之所以强大,就是装个X ,发个朋友圈,找个附近的人陌陌都可以的哦。身在农村的老屈,也终于可以找大城市附近的人聊聊感受了!真的是装X必备神器!更多功能还需要各位老铁去开发。

异地搞个直播,钉钉签个到打个卡都是这样的实现的,所以为什么那么多人可以在家轻松的打卡上班,正是因为他们有了一个这个!就连现在火热的一起来捉妖,靠虚拟定位才能抓妖的游戏,都能在家不出门捉妖了!真的是硬了那句话!

上有对策下有政策!好了我的世界你曾经来过,什么时候我上你的世界走走!笑看世间百态,乐观万里浮云!

收起阅读 »

深度解析移动应用安全的四大常见问题及解决方案

当前移动安全中恶意攻击的现状可以归结为四个主要方向:网络安全、数据安全、代码安全、设备安全。

网络安全

网络安全分为四个部分:数据防泄露、请求防重放、内容防篡改、身份防伪装。

解决数据防泄露的关键在于一定要对数据进行加密处理。请求防重放则可以通过请求时在参数中携带时间戳、随机数、流水号、“时间戳+流水号”这四种方式措施来予以防护。

内容防篡改需要我们对内容加盐哈希,再在服务端校验哈希值。身份防伪装有两种解决方案。方案一是Token身份认证:给Token一个有效期,防止Token泄露之后,攻击者其可以长期非法调用。

方案二是数字签名:通信过程中发送方对通信内容进行Hash生成摘要,然后用自己的私钥进行加密生成数字签名一起发送给接收方,接收方接收到后用自己的公钥进行解密来验证发送方的真实性,通过比对自己发送方的摘要信息与自己计算得出的摘要信息来验证内容是否被篡改。

数据安全

针对存储的安全防护,我们在数据落地的时候一定要进行加密处理,防止他人拿到重要的敏感数据。其次,我们要创建私有类型数据,尽量用private的创建方式,而不是全局的创建方式。

代码安全

常见逆向工程套路主要分为三种:反编译、脱壳、动态分析。以下方式可以防止代码反编译:代码混淆、签名验证、利用反编译工具漏洞进行防护、加固。防动态分析则可以从反调试、反Xposed、反root三个维度进行入手。

设备安全

开发者可以通过检查设备所处的环境来判断设备是否处于异常的状态。如果设备状态异常,则很可能处于黑产工具的控制下。常见的黑产工具包括“手机卡商与接码平台”、改机工具、打码平台以及群控系统。

黑产的攻击场景

黑产的攻击场景主要有以下四种:渠道推广、登录注册、营销活动、社区互动。在渠道推广环节,我们可能会遇到自动化批量刷量的黑产设备。它们会伪造虚假激活,让我们的钱白白浪费。

在登录注册之时,黑产方会对我们进行撞库攻击,并提供大量的垃圾账号进行注册。到了营销活动环节,攻击者可以针对APP优惠活动,提供大量的账号薅羊毛。社区互动过程中,直播刷榜、发送垃圾广告都是黑产攻击的常见形式。

防范黑产的措施

我们首先可以对手机上的设备信息进行全方面的检查。检查维度包括设备信息有无被篡改、手机上root环境是否处于root环境、有无安装一个Xposed的框架、系统是否被修改过、是否处于虚拟机的环境、部分地理位置异常是是否频繁。

检查后对这些风控数据予以记录,并把这些数据提交给风控引擎进行多维度的分析,比如可以对它进行IP风险评分、IP画像以及判断手机号是否在黑名单。我们通过多维度的模型标识高风险的用户、风险等级并告知客户端,以此进行一些防护。

防范黑产的案例

以渠道质量评估为例,渠道刷量分为机器刷量和人工刷量。机器刷量的特点是用群控系统配合一个改机工具,全自动化的下载和激活。其自动化程度比较高,但是我们可以通过识别设备信息、分析机器操作与人操作的差异化特征,从而标识出机器刷量的情况。

而人工刷量一般通过众包平台、IM群等下发任务的方式进行。其特点是人员分散、设备真实,但技术能力偏弱。人工刷量下设备会频繁地卸载和安装,应用的活跃程度跟以往不一样,处于异常状态。我们可以结合用户画像和这些特点标识这一类人工刷量的行为。

个验

为帮助开发者智能识别安全风险,个推在移动安全领域也推出了相应的解决方案-“个验”。个验是个推面向开发者推出的“一键认证”SDK,可以帮助APP开发者实现用户一键免密登录,简化APP登录流程,有效减少用户流失并提升转化。

作为新一代的验证解决方案,个推一键认证的功能特性更体现在能为APP开发者提供风险识别和风险防护的系列方案。

在风险识别方面,个验可以通过设备、网络、行为等多维度识别风险设备与黑产人群。准确识别出风险后,企业可提前对其加以防范,有效降低运营风险。在风险防护方面,个验在不影响正常用户使用的情况下,可以通过动画验证码阻止恶意自动化程序的进一步操作。

结语

如今,黑产攻击造成资产或声誉损失的现场此起彼伏,设备风险控制任重道远。个推将持续挖掘其丰富的数据资产,不断打磨自身技术,帮助APP开发者有效识别风险设备、保障业务安全。

继续阅读 »

当前移动安全中恶意攻击的现状可以归结为四个主要方向:网络安全、数据安全、代码安全、设备安全。

网络安全

网络安全分为四个部分:数据防泄露、请求防重放、内容防篡改、身份防伪装。

解决数据防泄露的关键在于一定要对数据进行加密处理。请求防重放则可以通过请求时在参数中携带时间戳、随机数、流水号、“时间戳+流水号”这四种方式措施来予以防护。

内容防篡改需要我们对内容加盐哈希,再在服务端校验哈希值。身份防伪装有两种解决方案。方案一是Token身份认证:给Token一个有效期,防止Token泄露之后,攻击者其可以长期非法调用。

方案二是数字签名:通信过程中发送方对通信内容进行Hash生成摘要,然后用自己的私钥进行加密生成数字签名一起发送给接收方,接收方接收到后用自己的公钥进行解密来验证发送方的真实性,通过比对自己发送方的摘要信息与自己计算得出的摘要信息来验证内容是否被篡改。

数据安全

针对存储的安全防护,我们在数据落地的时候一定要进行加密处理,防止他人拿到重要的敏感数据。其次,我们要创建私有类型数据,尽量用private的创建方式,而不是全局的创建方式。

代码安全

常见逆向工程套路主要分为三种:反编译、脱壳、动态分析。以下方式可以防止代码反编译:代码混淆、签名验证、利用反编译工具漏洞进行防护、加固。防动态分析则可以从反调试、反Xposed、反root三个维度进行入手。

设备安全

开发者可以通过检查设备所处的环境来判断设备是否处于异常的状态。如果设备状态异常,则很可能处于黑产工具的控制下。常见的黑产工具包括“手机卡商与接码平台”、改机工具、打码平台以及群控系统。

黑产的攻击场景

黑产的攻击场景主要有以下四种:渠道推广、登录注册、营销活动、社区互动。在渠道推广环节,我们可能会遇到自动化批量刷量的黑产设备。它们会伪造虚假激活,让我们的钱白白浪费。

在登录注册之时,黑产方会对我们进行撞库攻击,并提供大量的垃圾账号进行注册。到了营销活动环节,攻击者可以针对APP优惠活动,提供大量的账号薅羊毛。社区互动过程中,直播刷榜、发送垃圾广告都是黑产攻击的常见形式。

防范黑产的措施

我们首先可以对手机上的设备信息进行全方面的检查。检查维度包括设备信息有无被篡改、手机上root环境是否处于root环境、有无安装一个Xposed的框架、系统是否被修改过、是否处于虚拟机的环境、部分地理位置异常是是否频繁。

检查后对这些风控数据予以记录,并把这些数据提交给风控引擎进行多维度的分析,比如可以对它进行IP风险评分、IP画像以及判断手机号是否在黑名单。我们通过多维度的模型标识高风险的用户、风险等级并告知客户端,以此进行一些防护。

防范黑产的案例

以渠道质量评估为例,渠道刷量分为机器刷量和人工刷量。机器刷量的特点是用群控系统配合一个改机工具,全自动化的下载和激活。其自动化程度比较高,但是我们可以通过识别设备信息、分析机器操作与人操作的差异化特征,从而标识出机器刷量的情况。

而人工刷量一般通过众包平台、IM群等下发任务的方式进行。其特点是人员分散、设备真实,但技术能力偏弱。人工刷量下设备会频繁地卸载和安装,应用的活跃程度跟以往不一样,处于异常状态。我们可以结合用户画像和这些特点标识这一类人工刷量的行为。

个验

为帮助开发者智能识别安全风险,个推在移动安全领域也推出了相应的解决方案-“个验”。个验是个推面向开发者推出的“一键认证”SDK,可以帮助APP开发者实现用户一键免密登录,简化APP登录流程,有效减少用户流失并提升转化。

作为新一代的验证解决方案,个推一键认证的功能特性更体现在能为APP开发者提供风险识别和风险防护的系列方案。

在风险识别方面,个验可以通过设备、网络、行为等多维度识别风险设备与黑产人群。准确识别出风险后,企业可提前对其加以防范,有效降低运营风险。在风险防护方面,个验在不影响正常用户使用的情况下,可以通过动画验证码阻止恶意自动化程序的进一步操作。

结语

如今,黑产攻击造成资产或声誉损失的现场此起彼伏,设备风险控制任重道远。个推将持续挖掘其丰富的数据资产,不断打磨自身技术,帮助APP开发者有效识别风险设备、保障业务安全。

收起阅读 »

uni-app自定义模态对话框uniPop组件

uniapp插件 uniapp

基于UniApp自定义弹出框uniPop组件、实现了uniapp仿微信、android、ios弹窗效果

uniPop组件含有多种动画效果、皮肤类型ios/android、可以自定义弹窗样式/自定义多按钮及事件/弹窗显示位置、自动关闭秒数、遮罩层透明度及点击遮罩是否关闭

如下图:H5/小程序/App三端效果兼容性一致。(后续大图均展示App端)

uniPop组件引入方式
以下两种引入方式均可:

  • 在main.js里引入全局组件
    import uniPop from './components/uniPop/uniPop.vue'
    Vue.component('uni-pop', uniPop)
  • 在页面引入组件
<template>  
    <view class="container">  
        ...  

        <!-- 弹窗模板 -->  
        <uni-pop ref="uniPop"></uni-pop>  
    </view>  
</template>  

<script>  
    import uniPop from './components/uniPop/uniPop.vue'  
    export default {  
        data() {  
            return {  
                ...  
            }  
        },  
        components:{  
            uniPop  
        },  
        ...  
    }  
</script>

调用方式 this.$refs.uniPop.show({...})

this.$refs.uniPop.show({  
    content: 'msg消息提示框(5s后窗口关闭)',  
    shade: true,  
    shadeClose: false,  
    time: 5,  
    anim: 'fadeIn',  
})

uniPop.vue自定义弹窗模板

/**  
  * @tpl        uni-app自定义弹窗组件 - uniPop.vue  
  * @author     andy by 2019-09-20  
  * @about      Q:282310962  wx:xy190310  
  */  

<template>  
    <view v-if="opts.isVisible" class="uniPop" :class="opts.isCloseCls">  
        <view class="unipop__ui_panel">  
            <view v-if="opts.shade" class="unipop__ui_mask" @tap="shadeTaped"></view>  
            <view class="unipop__ui_main">  
                <view class="unipop__ui_child" :style="opts.style">  
                    <!-- 标题 -->  
                    <view v-if="opts.title" class="unipop__ui_tit">{{opts.title}}</view>  
                    <!-- 内容 -->  
                    <view v-if="opts.content" class="unipop__ui_cnt" :style="opts.contentStyle">  
                        {{opts.content}}  
                    </view>  
                    <view v-if="opts.btns" class="unipop__ui_btns">  
                        <text v-for="(item,index) in opts.btns" :key="index" class="btn" :style="item.style" @tap="btnTaped(item)">{{item.text}}</text>  
                    </view>  
                </view>  
                <!-- xclose -->  
                <view v-if="opts.xclose" class="unipop__xclose" @tap="close"></view>  
            </view>  
        </view>  
    </view>  
</template>
data() {  
    return {  
        defaultOptions: {  
            isVisible: false,       //是否显示弹窗  

            title: '',              //标题  
            content: '',            //内容  
            contentStyle: '',       //内容样式  
            style: null,            //自定义弹窗样式  
            skin: '',               //弹窗风格  
            icon: '',               //弹窗图标  
            xclose: false,          //自定义关闭按钮  

            shade: true,            //遮罩层  
            shadeClose: true,       //点击遮罩关闭  
            opacity: '',            //遮罩透明度  
            time: 0,                //自动关闭秒数  
            end: null,              //销毁弹窗回调函数  

            anim: 'scaleIn',        //弹窗动画  scaleIn(默认) | fadeIn | shake | top | right | bottom | left  
            position: '',           //弹窗位置  top | right | bottom | left  

            btns: null,             //弹窗按钮  
        },  
        opts: {},  
        timer: null  
    }  
},

作者:xiaoyan2015
链接: https://cloud.tencent.com/developer/column/3374
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

继续阅读 »

基于UniApp自定义弹出框uniPop组件、实现了uniapp仿微信、android、ios弹窗效果

uniPop组件含有多种动画效果、皮肤类型ios/android、可以自定义弹窗样式/自定义多按钮及事件/弹窗显示位置、自动关闭秒数、遮罩层透明度及点击遮罩是否关闭

如下图:H5/小程序/App三端效果兼容性一致。(后续大图均展示App端)

uniPop组件引入方式
以下两种引入方式均可:

  • 在main.js里引入全局组件
    import uniPop from './components/uniPop/uniPop.vue'
    Vue.component('uni-pop', uniPop)
  • 在页面引入组件
<template>  
    <view class="container">  
        ...  

        <!-- 弹窗模板 -->  
        <uni-pop ref="uniPop"></uni-pop>  
    </view>  
</template>  

<script>  
    import uniPop from './components/uniPop/uniPop.vue'  
    export default {  
        data() {  
            return {  
                ...  
            }  
        },  
        components:{  
            uniPop  
        },  
        ...  
    }  
</script>

调用方式 this.$refs.uniPop.show({...})

this.$refs.uniPop.show({  
    content: 'msg消息提示框(5s后窗口关闭)',  
    shade: true,  
    shadeClose: false,  
    time: 5,  
    anim: 'fadeIn',  
})

uniPop.vue自定义弹窗模板

/**  
  * @tpl        uni-app自定义弹窗组件 - uniPop.vue  
  * @author     andy by 2019-09-20  
  * @about      Q:282310962  wx:xy190310  
  */  

<template>  
    <view v-if="opts.isVisible" class="uniPop" :class="opts.isCloseCls">  
        <view class="unipop__ui_panel">  
            <view v-if="opts.shade" class="unipop__ui_mask" @tap="shadeTaped"></view>  
            <view class="unipop__ui_main">  
                <view class="unipop__ui_child" :style="opts.style">  
                    <!-- 标题 -->  
                    <view v-if="opts.title" class="unipop__ui_tit">{{opts.title}}</view>  
                    <!-- 内容 -->  
                    <view v-if="opts.content" class="unipop__ui_cnt" :style="opts.contentStyle">  
                        {{opts.content}}  
                    </view>  
                    <view v-if="opts.btns" class="unipop__ui_btns">  
                        <text v-for="(item,index) in opts.btns" :key="index" class="btn" :style="item.style" @tap="btnTaped(item)">{{item.text}}</text>  
                    </view>  
                </view>  
                <!-- xclose -->  
                <view v-if="opts.xclose" class="unipop__xclose" @tap="close"></view>  
            </view>  
        </view>  
    </view>  
</template>
data() {  
    return {  
        defaultOptions: {  
            isVisible: false,       //是否显示弹窗  

            title: '',              //标题  
            content: '',            //内容  
            contentStyle: '',       //内容样式  
            style: null,            //自定义弹窗样式  
            skin: '',               //弹窗风格  
            icon: '',               //弹窗图标  
            xclose: false,          //自定义关闭按钮  

            shade: true,            //遮罩层  
            shadeClose: true,       //点击遮罩关闭  
            opacity: '',            //遮罩透明度  
            time: 0,                //自动关闭秒数  
            end: null,              //销毁弹窗回调函数  

            anim: 'scaleIn',        //弹窗动画  scaleIn(默认) | fadeIn | shake | top | right | bottom | left  
            position: '',           //弹窗位置  top | right | bottom | left  

            btns: null,             //弹窗按钮  
        },  
        opts: {},  
        timer: null  
    }  
},

作者:xiaoyan2015
链接: https://cloud.tencent.com/developer/column/3374
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

收起阅读 »

真机调试无法连接到手机时解决

记录一下
根据真机运行常见问题:http://ask.dcloud.net.cn/article/97 各种排查都没有问题还是连接不上,
记录:清除之前hbuilderx的错误配置,重新来过.
执行hbuilderx安装目录下的 reset.bat命令.


后正常连接手机
注: 谨慎执行,之前的配置都会清空

继续阅读 »

记录一下
根据真机运行常见问题:http://ask.dcloud.net.cn/article/97 各种排查都没有问题还是连接不上,
记录:清除之前hbuilderx的错误配置,重新来过.
执行hbuilderx安装目录下的 reset.bat命令.


后正常连接手机
注: 谨慎执行,之前的配置都会清空

收起阅读 »