百度开放平台第三方代小程序开发,授权事件、消息与事件通知总结

大家好,我是小悟

关于百度开放平台第三方代小程序开发的两个事件接收推送通知,是开放平台代小程序实现业务的重要功能。

授权事件推送和消息与事件推送类型都以event的值判断。

授权事件推送通知

图片

授权事件推送包括:推送票据、授权成功、取消授权、授权更新、手机号权限取消。百度服务器会向第三方平台方的授权事件接收 URL 以 POST 的方式推送相关通知。

推送票据:在第三方平台创建审核通过后,百度服务器会向其“授权事件接收URL” 每隔10分钟以 POST 的方式推送票据。

event的值为push

{"Ticket" : "8c0da4968b0d1e28acbc1d738a56607d","FromUserName" : "SmartAPP","CreateTime" : 1413192605,"MsgType" : "ticket","Event" : "push"
}

授权成功:event的值为AUTHORIZED

{"appId": 小程序appid,"tpAppId": 第三方平台appid,"eventTime": "2019-01-14 12:45:10","event": "AUTHORIZED","authorizationCode":"授权码","authorizationCodeExpiresIn":60
}

取消授权:event的值为UNAUTHORIZED

{"appId": 小程序appid,"tpAppId": 第三方平台appid,"eventTime": "2019-01-14 12:45:10","event": "UNAUTHORIZED"
}

授权更新:
event的值为UPDATE_AUTHORIZED

{"appId": 小程序appid,"tpAppId": 第三方平台appid,"eventTime": "2019-01-14 12:45:10","event": "UPDATE_AUTHORIZED","authorizationCode":"授权码","authorizationCodeExpiresIn":60
}

手机号权限取消:当主体账号信息发生变更时.会取消当前账号下所有小程序的获取手机号权限。若想要恢复权限,需重新调用申请手机号权限API重新审核。
event的值为
APPLY_APP_MOBILE_AUTH_PASS

{"appId":15263713,"tpAppId": 14242323,"eventTime": "2019-01-14 12:45:10","event": "APPLY_APP_MOBILE_AUTH_PASS","reason":"主体信息变更"
}

接收post请求后,只需直接返回字符串success。为了加强安全性,post data中的数据将使用服务申请时的加解密key来进行加密,在收到推送后需进行解密。


@PostMapping(value = "authPushMsg")
public void authPushMsg(PostDataModel postData) throws IOException {BufferedReader br = new BufferedReader(new InputStreamReader(request.getInputStream(),"UTF-8"));StringBuffer sb = new StringBuffer();String line;while ((line = br.readLine()) != null) {sb = sb.append(line);}String postStr = sb.toString();logger.warn("授权推送消息---->获得数据为postData={}", postStr);PostDataModel postData = JSON.parseObject(postStr, PostDataModel.class);try {logger.warn("授权推送消息,开始");String msgSignature = MsgSignatureUtil.getMsgSignature(thirdPlatConfig.getMsgCheckToken(), postData.getTimeStamp(), postData.getNonce(), postData.getEncrypt());if (StringUtils.equals(postData.getMsgSignature(), msgSignature)) {AesDecryptUtil aesDecryptUtil = new AesDecryptUtil(thirdPlatConfig.getMsgEncodingAesKey());String decrypt = aesDecryptUtil.decrypt(postData.getEncrypt());logger.warn("授权推送消息,解密结果={}", decrypt);if (decrypt.contains("Ticket") && decrypt.contains("push")) {logger.warn("推送ticket协议---->开始");// 推送ticket通知ComponentVerifyTicket componentVerifyTicket = JSON.parseObject(decrypt, ComponentVerifyTicket.class);componentVerifyTicket.setComponentVerifyTicket(componentVerifyTicket.getTicket());RedisService<ComponentVerifyTicket> redisService = RedisService.load();redisService.save(componentVerifyTicket, ComponentVerifyTicket.class);logger.warn("推送ticket协议---->成功,保存到缓存中的值为:{}", JSON.toJSONString(componentVerifyTicket));} else {// 进行授权、取消授权、更新授权AuthPushAuthorized authPushAuthorized = JSON.parseObject(decrypt, AuthPushAuthorized.class);String event = authPushAuthorized.getEvent();if (StringUtils.equals(EventEnum.AUTHORIZED.getCode(), event)) {logger.warn("推送授权成功通知---->成功,{}", JSON.toJSONString(authPushAuthorized));} else if (StringUtils.equals(EventEnum.UPDATE_AUTHORIZED.getCode(), event)) {logger.warn("推送授权更新通知---->成功,{}", JSON.toJSONString(authPushAuthorized));} else if (StringUtils.equals(EventEnum.UNAUTHORIZED.getCode(), event)) {logger.warn("推送取消授权通知---->成功,{}", JSON.toJSONString(authPushAuthorized));} else if (StringUtils.equals(EventEnum.APP_MOBILE_AUTH_CANCEL.getCode(), event)) {logger.warn("获取手机号权限取消---->通知,{}", JSON.toJSONString(authPushAuthorized));}}}} catch (Exception e) {logger.error("系统异常", e);} finally {// 响应消息PrintWriter out = response.getWriter();out.print("success");}
}

消息与事件推送通知

在这里插入图片描述
消息与事件推送包括:设置小程序名称、设置小程序头像、设置小程序描述、设置小程序行业类目、小程序强制下线、小程序暂停服务、小程序服务启用、小程序限时整改通知、小程序流量下线通知、申请手机号权限、获取手机号权限、代码包审核、真实性认证状态变更、创建支付账号、配置开发者设置、开通支付服务、创建单卡子链。审核结果会向消息与事件接收 URL 进行事件推送。

小程序名称审核通过:
event的值为APP_NAME_AUDIT_PASS

{"appId": 小程序appid,"appName": "小程序名称","tpAppId": 第三方平台appid,"eventTime": "2019-01-14 12:45:10","event": "APP_NAME_AUDIT_PASS"
}

小程序名称审核不通过:
event的值为APP_NAME_AUDIT_FAIL

{"appId": 小程序appid,"appName": "TP名称拒审改名0503_审核失败_1589544087240","tpAppId": 第三方平台appid,"eventTime": "2019-01-14 12:45:10","event": "APP_NAME_AUDIT_FAIL","reason": "名称过长(名称控制在10个字以内)。"
}

小程序头像审核通过:
event的值为APP_ICON_AUDIT_PASS

{"appId": 小程序appid,"appName": "小程序名称","tpAppId": 第三方平台appid,"eventTime": "2019-01-14 12:45:10","event": "APP_ICON_AUDIT_PASS"
}

小程序头像审核不通过:
event的值为APP_ICON_AUDIT_FAIL

{"appId": 小程序appid,"appName": "小程序名称","tpAppId": 第三方平台appid,"eventTime": "2019-01-14 12:45:10","event": "APP_ICON_AUDIT_FAIL","reason": "不通过原因。"
}

小程序描述审核通过:
event的值为APP_DESC_AUDIT_PASS

{"appId": 小程序appid,"appName": "小程序名称","tpAppId": 第三方平台appid,"eventTime": "2019-01-14 12:45:10","event": "APP_DESC_AUDIT_PASS"
}

小程序描述审核不通过:
event的值为APP_DESC_AUDIT_FAIL

{"appId": 小程序appid,"appName": "小程序名称","tpAppId": 第三方平台appid,"eventTime": "2019-01-14 12:45:10","event": "APP_DESC_AUDIT_FAIL","reason": "不通过原因。"
}

小程序行业审核通过:
event的值为APP_CATEGORY_AUDIT_PASS

{"appId": 小程序appid,"appName": "小程序名称","tpAppId": 第三方平台appid,"eventTime": "2019-01-14 12:45:10","event": "APP_CATEGORY_AUDIT_PASS"
}

小程序行业审核不通过:
event的值为APP_CATEGORY_AUDIT_FAIL

{"appId": 小程序appid,"appName": "小程序名称","tpAppId": 第三方平台appid,"eventTime": "2019-01-14 12:45:10","event": "APP_CATEGORY_AUDIT_FAIL","reason": "不通过原因。"
}

小程序强制下线:
event的值为APP_FORCE_OFFLINE

{"appId":小程序appid,"tpAppId": 第三方平台appid,"eventTime": "2019-01-14 12:45:10","event": "APP_FORCE_OFFLINE","reason":"强制下线原因","offlineReason":3,"illegalFields":"appName,photoAddr,appDesc"
}

小程序暂停服务:
event的值为APP_SERVER_PAUSE

{"appId":小程序appid,"tpAppId": 第三方平台appid,"eventTime": "2019-01-14 12:45:10","event": "APP_SERVER_PAUSE","reason":"强制下线原因","offlineReason":3,"illegalFields":"appName,photoAddr,appDesc"
}

小程序服务启用:
event的值为APP_SERVER_RESUME

{"appId":小程序appid,"tpAppId": 第三方平台appid,"eventTime": "2019-01-14 12:45:10","event": "APP_SERVER_RESUME"
}

小程序限时整改通知:
event的值为TIME_LIMIT_RECTIFY_NOTIFY

{"appId":小程序appid,"tpAppId": 第三方平台appid,"eventTime": "2019-01-14 12:45:10","event": "TIME_LIMIT_RECTIFY_NOTIFY"
}

小程序流量下线通知:
event的值为FLOW_CLOSE_NOTIFY

{"appId":小程序appid,"tpAppId": 第三方平台appid,"eventTime": "2019-01-14 12:45:10","event": "FLOW_CLOSE_NOTIFY"
}

小程序手机号权限审核通过:event的值为
APPLY_APP_MOBILE_AUTH_PASS

{"appId":15263713,"tpAppId": 14242323,"eventTime": "2019-01-14 12:45:10","event": "APPLY_APP_MOBILE_AUTH_PASS"
}

小程序手机号权限审核不通过:event的值为
APPLY_APP_MOBILE_AUTH_REJECT

{"appId":15263713,"tpAppId": 14242323,"eventTime": "2019-01-14 12:45:10","event": "APPLY_APP_MOBILE_AUTH_REJECT","reason":"审核失败原因"
}

代码包审核通过:
event的值为PACKAGE_AUDIT_PASS

{"appId": 1452365,"tpAppId": 17328232,"eventTime": "2019-01-14 12:45:10","event": "PACKAGE_AUDIT_PASS","packageId":529394,"packageVersion":"0.2.2"
}

代码包审核不通过:
event的值为PACKAGE_AUDIT_FAIL

{"appId": 1452365,"tpAppId": 17328232,"eventTime": "2019-01-14 12:45:10","event": "PACKAGE_AUDIT_FAIL","reason":"名称过长(名称控制在10个字以内)。名称与实际打开后的名称不符。","packageId":745815,"packageVersion":"1.3.46"
}

真实性认证结果推送:当客户的真实性认证状态发生变化后,第三方平台将可以通过开放平台上填写的消息与事件接受URL,获得变更内容。若客户账号下有多个小程序,会收到数量与客户小程序数量相等的推送。
event的值为ADVANCED_AUDIT_CHANGED

{"appId":1452365,"tpAppId": 17328232,"eventTime": "2019-01-14 12:45:10","event": "ADVANCED_AUDIT_CHANGED","adType":2,"adStatus":1
}

创建支付账号通过:event的值为
APP_PAYMENT_CREATE_ACCOUNT_PASS

{"appId": 小程序appid,"tpAppId": 第三方平台appid,"eventTime": "2019-01-14 12:45:10","event": "APP_PAYMENT_CREATE_ACCOUNT_PASS"
}

创建支付账号不通过:event的值为
APP_PAYMENT_CREATE_ACCOUNT_FAIL

{"appId": 小程序appid,"tpAppId": 第三方平台appid,"eventTime": "2019-01-14 12:45:10","event": "APP_PAYMENT_CREATE_ACCOUNT_FAIL","reason": "失败原因"
}

配置开发者设置通过:event的值为
APP_PAYMENT_UPDATE_DEVELOP_CONFIG_PASS

{"appId": 小程序appid,"tpAppId": 第三方平台appid,"eventTime": "2019-01-14 12:45:10","event": "APP_PAYMENT_UPDATE_DEVELOP_CONFIG_PASS"
}

配置开发者设置不通过:event的值为
APP_PAYMENT_UPDATE_DEVELOP_CONFIG_FAIL

{"appId": 小程序appid,"tpAppId": 第三方平台appid,"eventTime": "2019-01-14 12:45:10","event": "APP_PAYMENT_UPDATE_DEVELOP_CONFIG_FAIL","reason": "失败原因"
}

开通支付服务通过:event的值为
APP_PAYMENT_CREATE_PAYMENT_PASS

{"appId": 小程序appid,"tpAppId": 第三方平台appid,"eventTime": "2019-01-14 12:45:10","event": "APP_PAYMENT_CREATE_PAYMENT_PASS"
}

开通支付服务不通过:event的值为
APP_PAYMENT_CREATE_PAYMENT_FAIL

{"appId": 小程序appid,"tpAppId": 第三方平台appid,"eventTime": "2019-01-14 12:45:10","event": "APP_PAYMENT_CREATE_PAYMENT_FAIL","reason": "失败原因"
}

创建单卡子链审核通过:小程序单卡是面向开发者的流量权益,是符合准入要求的小程序开发者向百度用户提供相关产品及服务的搜索特型卡片。第三方平台(TP)可代替小程序开发者提交2-15个小程序的核心功能或子频道,作为小程序单卡的外露子链,被用户直接访问触达。
event的值为AUDIT_SUB_CHAIN_PASS

{"appId":小程序appid,"tpAppId":第三方平台appid,"eventTime":"2019-01-14 12:45:10","event":"AUDIT_SUB_CHAIN_PASS","subchainId":13234
}

创建单卡子链审核不通过:
event的值为AUDIT_SUB_CHAIN_FAILED

{"appId":小程序appid,"tpAppId":第三方平台appid,"eventTime":"2019-01-14 12:45:10","event":"AUDIT_SUB_CHAIN_FAILED","subchainId":13234,"reason":"失败原因"
}

接收post请求后,只需直接返回字符串success。为了加强安全性,post data中的数据将使用服务申请时的加解密key来进行加密,在收到推送后需进行解密。

@PostMapping(value = "eventPushMsg")
public void eventPushMsg(PostDataModel postData) throws IOException {BufferedReader br = new BufferedReader(new InputStreamReader(request.getInputStream(),"UTF-8"));StringBuffer sb = new StringBuffer();String line;while ((line = br.readLine()) != null) {sb = sb.append(line);}String postStr = sb.toString();logger.warn("事件推送消息---->获得数据为postData={}", postStr);PostDataModel postData = JSON.parseObject(postStr, PostDataModel.class);try {logger.warn("事件推送消息,开始");String msgSignature = MsgSignatureUtil.getMsgSignature(thirdPlatConfig.getMsgCheckToken(), postData.getTimeStamp(), postData.getNonce(), postData.getEncrypt());if (StringUtils.equals(postData.getMsgSignature(), msgSignature)) {AesDecryptUtil aesDecryptUtil = new AesDecryptUtil(thirdPlatConfig.getMsgEncodingAesKey());String decrypt = aesDecryptUtil.decrypt(postData.getEncrypt());logger.warn("事件推送消息,解密结果={}", decrypt);EventPushMsg eventPushMsg = JSON.parseObject(decrypt, EventPushMsg.class);String event = eventPushMsg.getEvent();if (StringUtils.equals(EventEnum.APP_NAME_AUDIT_PASS.getCode(), event)) {logger.warn("小程序名称审核成功---->通知,{}", JSON.toJSONString(eventPushMsg));} else if (StringUtils.equals(EventEnum.APP_NAME_AUDIT_FAIL.getCode(), event)) {logger.warn("小程序名称审核失败---->通知,{}", JSON.toJSONString(eventPushMsg));} else if (StringUtils.equals(EventEnum.APP_ICON_AUDIT_PASS.getCode(), event)) {logger.warn("小程序头像审核成功---->通知,{}", JSON.toJSONString(eventPushMsg));} else if (StringUtils.equals(EventEnum.APP_ICON_AUDIT_FAIL.getCode(), event)) {logger.warn("小程序头像审核失败---->通知,{}", JSON.toJSONString(eventPushMsg));} else if (StringUtils.equals(EventEnum.APP_DESC_AUDIT_PASS.getCode(), event)) {logger.warn("小程序描述审核成功---->通知,{}", JSON.toJSONString(eventPushMsg));} else if (StringUtils.equals(EventEnum.APP_DESC_AUDIT_FAIL.getCode(), event)) {logger.warn("小程序描述审核失败---->通知,{}", JSON.toJSONString(eventPushMsg));} else if (StringUtils.equals(EventEnum.APP_CATEGORY_AUDIT_PASS.getCode(), event)) {logger.warn("小程序行业类目审核成功---->通知,{}", JSON.toJSONString(eventPushMsg));} else if (StringUtils.equals(EventEnum.APP_CATEGORY_AUDIT_FAIL.getCode(), event)) {logger.warn("小程序行业类目审核失败---->通知,{}", JSON.toJSONString(eventPushMsg));} else if (StringUtils.equals(EventEnum.APP_FORCE_OFFLINE.getCode(), event)) {logger.warn("小程序强制下线---->通知,{}", JSON.toJSONString(eventPushMsg));} else if (StringUtils.equals(EventEnum.APP_SERVER_PAUSE.getCode(), event)) {logger.warn("小程序暂停服务---->通知,{}", JSON.toJSONString(eventPushMsg));} else if (StringUtils.equals(EventEnum.APP_SERVER_RESUME.getCode(), event)) {logger.warn("小程序服务启用---->通知,{}", JSON.toJSONString(eventPushMsg));} else if (StringUtils.equals(EventEnum.TIME_LIMIT_RECTIFY_NOTIFY.getCode(), event)) {logger.warn("小程序限时整改通知---->通知,{}", JSON.toJSONString(eventPushMsg));} else if (StringUtils.equals(EventEnum.FLOW_CLOSE_NOTIFY.getCode(), event)) {logger.warn("小程序流量下线通知---->通知,{}", JSON.toJSONString(eventPushMsg));} else if (StringUtils.equals(EventEnum.APPLY_APP_MOBILE_AUTH_PASS.getCode(), event)) {logger.warn("申请手机号权限审核通过---->通知,{}", JSON.toJSONString(eventPushMsg));} else if (StringUtils.equals(EventEnum.APPLY_APP_MOBILE_AUTH_REJECT.getCode(), event)) {logger.warn("申请手机号权限审核拒绝---->通知,{}", JSON.toJSONString(eventPushMsg));} else if (StringUtils.equals(EventEnum.PACKAGE_AUDIT_PASS.getCode(), event)) {logger.warn("代码包审核成功---->通知,{}", JSON.toJSONString(eventPushMsg));} else if (StringUtils.equals(EventEnum.PACKAGE_AUDIT_FAIL.getCode(), event)) {logger.warn("代码包审核失败---->通知,{}", JSON.toJSONString(eventPushMsg));} else if (StringUtils.equals(EventEnum.ADVANCED_AUDIT_CHANGED.getCode(), event)) {logger.warn("真实性认证状态变更---->通知,{}", JSON.toJSONString(eventPushMsg));} else if (StringUtils.equals(EventEnum.APP_PAYMENT_CREATE_ACCOUNT_PASS.getCode(), event)) {logger.warn("创建支付账号通过---->通知,{}", JSON.toJSONString(eventPushMsg));} else if (StringUtils.equals(EventEnum.APP_PAYMENT_CREATE_ACCOUNT_FAIL.getCode(), event)) {logger.warn("创建支付账号失败---->通知,{}", JSON.toJSONString(eventPushMsg));} else if (StringUtils.equals(EventEnum.APP_PAYMENT_UPDATE_DEVELOP_CONFIG_PASS.getCode(), event)) {logger.warn("配置开发者设置通过---->通知,{}", JSON.toJSONString(eventPushMsg));} else if (StringUtils.equals(EventEnum.APP_PAYMENT_UPDATE_DEVELOP_CONFIG_FAIL.getCode(), event)) {logger.warn("配置开发者设置失败---->通知,{}", JSON.toJSONString(eventPushMsg));} else if (StringUtils.equals(EventEnum.APP_PAYMENT_CREATE_PAYMENT_PASS.getCode(), event)) {logger.warn("开通支付服务通过---->通知,{}", JSON.toJSONString(eventPushMsg));} else if (StringUtils.equals(EventEnum.APP_PAYMENT_CREATE_PAYMENT_FAIL.getCode(), event)) {logger.warn("开发支付服务失败---->通知,{}", JSON.toJSONString(eventPushMsg));} else if (StringUtils.equals(EventEnum.AUDIT_SUB_CHAIN_PASS.getCode(), event)) {logger.warn("创建单卡子链审核通过---->通知,{}", JSON.toJSONString(eventPushMsg));} else if (StringUtils.equals(EventEnum.AUDIT_SUB_CHAIN_FAILED.getCode(), event)) {logger.warn("创建单卡子链审核失败---->通知,{}", JSON.toJSONString(eventPushMsg));}}}} catch (Exception e) {logger.error("系统异常", e);} finally {// 响应消息PrintWriter out = response.getWriter();out.print("success");}
}

您的一键三连,是我更新的最大动力,谢谢

山水有相逢,来日皆可期,谢谢阅读,我们再会

我手中的金箍棒,上能通天,下能探海

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/158830.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

排序算法-希尔排序法(ShellSort)

排序算法-希尔排序法&#xff08;ShellSort&#xff09; 1、说明 我们知道当原始记录的键值大部分已排好序的情况下插入排序法非常有效&#xff0c;因为它不需要执行太多的数据搬移操作。希尔排序法是D.L.Shell在1959年7月发明的一种排序法&#xff0c;可以减少插入排序法中数…

微信小程序入门

目录 一.微信小程序简介 二. 什么是小程序&#xff1f; 三.小程序商城项目案例 四.小程序之入门案例 json配置 wxml模板 wxss样式 js逻辑交互 测试结果 一.微信小程序简介 微信小程序是一种运行在微信客户端内的应用程序&#xff0c;它以小巧、轻量、便捷的特点受到广…

androidx.appcompat.widget.Toolbar最右边设置控件不能仅靠最右边

androidx.appcompat.widget.Toolbar最右边设置控件不能仅靠最右边 Android Toolbar左、中、右对齐-CSDN博客&#xfeff;&#xfeff;Android Toolbar左、中、右对齐默认的Android Toolbar中添加子元素view是从左到右依次添加。需要注意的是&#xff0c;Android Toolbar为自身的…

推荐几款简单易用的协作化项目管理工具

您是否正在寻找一种有效且简单的项目管理工具来帮助您与团队成员协作?项目管理工具在当今的商业世界中已经变得必不可少&#xff0c;因为它们帮助团队保持组织和生产力。找到合适的工具是困难的&#xff0c;因为有太多的选择。有些工具是为特定类型的项目设计的&#xff0c;而…

腾讯云国际站-阿里云OSS如何迁移到腾讯云COS?腾讯云cos迁移教程

下面小编将介绍当源对象存储部署在阿里云国际版OSS 时&#xff0c;如何配置全托管迁移任务和半托管迁移任务&#xff0c;实现顺利迁移数据至腾讯云国际版COS。 准备工作 阿里云对象存储 OSS 创建 RAM 子账号并授予相关权限&#xff1a; 登录 RAM 控制台。选择人员管理 > …

二分查找:如何用最省内存的方式实现快速查找功能?

文章来源于极客时间前google工程师−王争专栏。 有序数据集合的查找算法&#xff1a;二分查找(Binary Search)算法&#xff0c;也叫折半查找算法。二分查找的思想非常简单&#xff0c;但是难掌握好&#xff0c;灵活运用更加困难。 问题&#xff1a;假设有1000万个整数数据&…

S32K1xx的MBD工具箱加载及激活

1、安装Matlab&#xff0c;本次使用Matlab2022b 2、打开Matlab&#xff0c;加载含有MBD工具的目录&#xff0c;如下 3、双击第一个---安装&#xff0c;正常安装就可以 4、双击第二个---安装&#xff0c;正常安装就可以 5、找到MBD的安装位置如下 C:\Users\Administrator\App…

应用在汽车发动机温度检测中的高精度温度传感芯片

汽车发动机是为汽车提供动力的装置&#xff0c;是汽车的心脏&#xff0c;决定着汽车的动力性、经济性、稳定性和环保性。根据动力来源不同&#xff0c;汽车发动机可分为柴油发动机、汽油发动机、电动汽车电动机以及混合动力等。 常见的车用温度传感器有进气温度传感器、变速器…

C++智能指针(三)——unique_ptr初探

与共享指针shared_ptr用于共享对象的目的不同&#xff0c;unique_ptr是用于独享对象。 文章目录 1. unqiue_ptr的目的2. 使用 unique_ptr2.1 初始化 unique_ptr2.2 访问数据2.3 作为类的成员2.4 处理数组 3. 转移所有权3.1 简单语法3.2 函数间转移所有权3.2.1 转移至函数体内3.…

Puppeteer实现上下滚动、打开新Tab、用户数据保存(三)

Puppeteer实现上下滚动、打开新Tab、用户数据保存&#xff08;三&#xff09; Puppeteer实现上下滚动、打开新Tab、用户数据保存&#xff08;三&#xff09;一、实现上下滚动二、打开新Tab三、用户数据保存四、效果演示 一、实现上下滚动 在自动化测试中&#xff0c;我们需要能…

Blender:使用立方体制作动漫头像

好久没水文章 排名都掉到1w外了 ~_~ 学习一下blender&#xff0c;看能不能学习一点曲面变形的思路 一些快捷键 ctrl 空格&#xff1a;区域最大化&#xff0c;就是全屏 ctrl alt 空格&#xff1a;也是区域最大化 shift b&#xff1a;框选区域然后最大化显示该范围 shift 空…

XGBoost+LR融合

1、背景简介 xgboostlr模型融合方法用于分类或者回归的思想最早由facebook在广告ctr预测中提出&#xff0c;其论文Practical Lessons from Predicting Clicks on Ads at Facebook有对其进行阐述。在这篇论文中他们提出了一种将xgboost作为feature transform的方法。大概的思想…

函数栈帧的创建与销毁(保姆级讲解)

局部变量是怎么创建的? 在为main函数开辟栈帧空间时&#xff0c;在一定范围内初始化成0CCCCC&#xff0c;再把里面0CCCC的一些开辟空间给局部变量使用。 为什么局部变量的值是随机值? 因为我们在为main函数开辟栈帧空间时&#xff0c;会将一定范围内空间初始成0CCCCCC里面…

【云原生】都在说云原生?到底什么是云原生?

文章目录 一、云原生是什么云原生云原生 二、云原生四要素微服务容器化DevOps 三、具体的云原生技术有哪些容器(Containers)微服务(Microservices)服务网格(Service Meshes)不可变基础设施(Immutable Infrastructure)声明式API(Deciarative API) 四、云服务器相对传统物理服务器…

小程序的入门

目录 小程序的简介 好处 安装及使用 小程序的入门案列 小程序的简介 微信小程序是一种轻量级的应用程序&#xff0c;可以在微信平台上运行。它们具有快速、便捷和低成本等特点。通过微信小程序&#xff0c;用户可以在微信内直接使用各种功能&#xff0c;而无需下载和安装额外…

python pip安装超时使用国内镜像

网络环境差的时候需要我们独立的进行相对应的包下载离线安装&#xff0c;或者给pip 加上 国内的镜像源比如加上清华的镜像源&#xff1a; 参考网址&#xff1a;pypi | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror https://mirrors.tuna.tsinghua…

SpringCloud-Hystrix

一、介绍 &#xff08;1&#xff09;避免单个服务出现故障导致整个应用崩溃。 &#xff08;2&#xff09;服务降级&#xff1a;服务超时、服务异常、服务宕机时&#xff0c;执行定义好的方法。&#xff08;做别的&#xff09; &#xff08;3&#xff09;服务熔断&#xff1a;达…

浅析倾斜摄影三维模型(3D)几何坐标精度偏差的几个因素

浅析倾斜摄影三维模型&#xff08;3D&#xff09;几何坐标精度偏差的几个因素 倾斜摄影是一种通过倾斜角度较大的相机拍摄建筑物、地形等场景&#xff0c;从而生成高精度的三维模型的技术。然而&#xff0c;在进行倾斜摄影操作时&#xff0c;由于多种因素的影响&#xff0c;导致…

【算法学习】-【滑动窗口】-【长度最小的子数组】

LeetCode原题链接&#xff1a;209. 长度最小的子数组 下面是题目描述&#xff1a; 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其总和大于等于 target 的长度最小的连续子数组 [numsl, numsl1, …, numsr-1, numsr] &#xff0c;并返回其长度。如…

PCL点云处理之基于强度特征的SIFT关键点提取法 (二百一十五)

PCL点云处理之基于强度特征的SIFT关键点提取法 (二百一十五) 一、算法介绍二、具体实现1.代码2.效果一、算法介绍 继续SIFT关键点的提取介绍,之前已经基于高程和颜色分别提取了关键点,这里是基于强度信息,若遇到文件无法读取强度问题,请参考上一篇博文,下面是具体的实现…