• 关于 自建函数 的搜索结果

问题

MaxCompute产品简介:基本概念:函数

行者武松 2019-12-01 22:01:07 1133 浏览量 回答数 0

问题

在一个MaxCompute select中只能有一个udtf,不可以再出现其它的列 其他都懂,就是这个有点没明白,这个函数属于UDTF?不算是内建函数吗?如果我的select语句使用了trans_array就不能再使用其他自定义函数了?

祁同伟 2019-12-01 20:23:57 3021 浏览量 回答数 1

问题

MaxCompute用户指南:常用命令:函数操作

行者武松 2019-12-01 22:01:48 1186 浏览量 回答数 0

海外云虚拟主机包年25元/月起

海外独享虚拟主机全面上线,助力构建海外网站,提升公司国际形象;全球有效覆盖,超高性价比;建站入门首选,助力出口,适合跨境贸易企业。

问题

MaxCompute用户指南:SQL:UDF:UDF概述

行者武松 2019-12-01 22:03:01 1250 浏览量 回答数 0

问题

Greenplum 的用户自定义函数,怎样适应MPP架构呢?

whatcat 2019-12-01 20:24:08 1312 浏览量 回答数 0

回答

前言 随着计算机技术和 Internet 的日新月异,视频点播技术因其良好的人机交互性和流媒体传输技术倍受教育、娱乐等行业青睐,而在当前, 云计算平台厂商的产品线不断成熟完善, 如果想要搭建视频点播类应用,告别刀耕火种, 直接上云会扫清硬件采购、 技术等各种障碍,以阿里云为例: image 这是一个非常典型的解决方案, 对象存储 OSS 可以支持海量视频存储,采集上传的视频被转码以适配各种终端,CDN 加速终端设备播放视频的速度。此外还有一些内容安全审查需求, 比如鉴黄、鉴恐等。 而在视频点播解决方案中, 视频转码是最消耗计算力的一个子系统,虽然您可以使用云上专门的转码服务,但在很多情况下,您会选择自己搭建转码服务。比如: 您已经在虚拟机/容器平台上基于 FFmpeg 部署了一套视频处理服务,能否在此基础上让它更弹性,更高的可用性? 您有并发处理大量视频的需求。 您有很多超大的视频需要批量快速处理完, 比如每周五定期产生几百个 4G 以上的 1080P 大视频, 但是希望当天几个小时后全部处理完。 您有更高级的自定义处理需求,比如视频转码完成后, 需要记录转码详情到数据库, 或者在转码完成后, 自动将热度很高的视频预热到 CDN 上, 从而缓解源站压力。 自定义视频处理流程中可能会有多种操作组合, 比如转码、加水印和生成视频首页 GIF。后续为视频处理系统增加新需求,比如调整转码参数,希望新功能发布上线对在线服务无影响。 您的需求只是简单的转码需求,或是一些极其轻量的需求,比如获取 OSS 上视频前几帧的 GIF、获取视频或者音频的时长,自己搭建成本更低。 各种格式的音频转换或者各种采样率自定义、音频降噪等功能 您的视频源文件存放在 NAS 或者 ECS 云盘上,自建服务可以直接读取源文件处理,而不需要将它们再迁移到 OSS 上。 如果您的视频处理系统有上述需求,或者您期望实现一个 弹性、高可用、低成本、免运维、灵活支持任意处理逻辑 的视频处理系统,那么本文则是您期待的最佳实践方案。 Serverless 自定义音视频处理 在介绍具体方案之前, 先介绍两款产品: 函数计算 :阿里云函数计算是事件驱动的全托管计算服务。通过函数计算,您无需管理服务器等基础设施,只需编写代码并上传。函数计算会为您准备好计算资源,以弹性、可靠的方式运行您的代码,并提供日志查询、性能监控、报警等功能。 函数工作流:函数工作流(Function Flow,以下简称 FnF)是一个用来协调多个分布式任务执行的全托管云服务。您可以用顺序,分支,并行等方式来编排分布式任务,FnF 会按照设定好的步骤可靠地协调任务执行,跟踪每个任务的状态转换,并在必要时执行用户定义的重试逻辑,以确保工作流顺利完成。 免费开通函数计算,按量付费,函数计算有很大的免费额度。 免费开通函数工作流,按量付费,函数工作流有很大的免费额度。 函数计算可靠的执行任意逻辑, 逻辑可以是利用 FFmpeg 对视频任何处理操作, 也可以更新视频 meta 数据到数据库等。函数工作流对相应的函数进行编排, 比如第一步的函数是转码, 第二步的函数是转码成功后,将相应 meta 数据库写入数据库等。 至此,您应该初步理解了函数计算的自定义处理能力 + 函数工作流编排能力几乎满足您任何自定义处理的需求,接下来,本文以一个具体的示例展示基于函数计算和函数工作流打造的一个弹性高可用的 Serverless 视频处理系统,并与传统方案进行性能、成本和工程效率的对比。 Simple 视频处理系统 假设您是对视频进行单纯的处理, 架构方案图如下: image 如上图所示, 用户上传一个视频到 OSS, OSS 触发器自动触发函数执行, 函数调用 FFmpeg 进行视频转码, 并且将转码后的视频保存回 OSS。 OSS 事件触发器, 阿里云对象存储和函数计算无缝集成。您可以为各种类型的事件设置处理函数,当 OSS 系统捕获到指定类型的事件后,会自动调用函数处理。例如,您可以设置函数来处理 PutObject 事件,当您调用 OSS PutObject API 上传视频到 OSS 后,相关联的函数会自动触发来处理该视频。 Simple 视频处理系统示例工程地址 强大的监控系统: 您可以直接基于示例工程部署您的 Simple 音视频处理系统服务, 但是当您想要处理超大视频(比如 test_huge.mov ) 或者对小视频进行多种组合操作的时候, 您会发现函数会执行失败,原因是函数计算的执行环境有最大执行时间为 10 分钟的限制,如果最大的 10 分钟不能满足您的需求, 您可以选择: 对视频进行分片 -> 转码 -> 合成处理, 详情参考:fc-fnf-video-processing, 下文会详细介绍; 联系函数计算团队(钉钉群号: 11721331) 或者提工单: 适当放宽执行时长限制; 申请使用更高的函数内存 12G(8vCPU) 为了突破函数计算执行环境的限制(或者说加快大视频的转码速度), 进行各种复杂的组合操作, 此时引入函数工作流 FnF 去编排函数实现一个功能强大的视频处理工作流系统是一个很好的方案。 视频处理工作流系统 image 如上图所示, 假设用户上传一个 mov 格式的视频到 OSS,OSS 触发器自动触发函数执行, 函数调用 FnF,会同时进行 1 种或者多种格式的转码(由您触发的函数环境变量DST_FORMATS 参数控制)。 所以您可以实现如下需求: 一个视频文件可以同时被转码成各种格式以及其他各种自定义处理,比如增加水印处理或者在 after-process 更新信息到数据库等。 当有多个文件同时上传到 OSS,函数计算会自动伸缩, 并行处理多个文件, 同时每次文件转码成多种格式也是并行。 结合 NAS + 视频切片, 可以解决超大视频(大于 3G )的转码, 对于每一个视频,先进行切片处理,然后并行转码切片,最后合成,通过设置合理的切片时间,可以大大加速较大视频的转码速度。 所谓的视频切片,是将视频流按指定的时间间隔,切分成一系列分片文件,并生成一个索引文件记录分片文件的信息 视频处理工作流系统示例工程地址 示例效果: gif 函数计算 + 函数工作流 Serverless 方案 VS 传统方案 卓越的工程效率 自建服务 函数计算 + 函数工作流 Serverless 基础设施 需要用户采购和管理 无 开发效率 除了必要的业务逻辑开发,需要自己建立相同线上运行环境, 包括相关软件的安装、服务配置、安全更新等一系列问题 只需要专注业务逻辑的开发, 配合 FUN 工具一键资源编排和部署 并行&分布式视频处理 需要很强的开发能力和完善的监控系统来保证稳定性 通过 FnF 资源编排即可实现多个视频的并行处理以及单个大视频的分布式处理,稳定性和监控交由云平台 学习上手成本 除了编程语言开发能力和熟悉 FFmpeg 以外,可能使用 K8S 或弹性伸缩( ESS ),需要了解更多的产品、名词和参数的意义 会编写对应的语言的函数代码和熟悉 FFmpeg 使用即可 项目上线周期 在具体业务逻辑外耗费大量的时间和人力成本,保守估计大约 30 人天,包括硬件采购、软件和环境配置、系统开发、测试、监控报警、灰度发布系统等 预计 3 人天, 开发调试(2人天)+ 压测观察(1 人天) 弹性伸缩免运维,性能优异 自建服务 函数计算 + 函数工作流 Serverless 弹性高可用 需要自建负载均衡 (SLB),弹性伸缩,扩容缩容速度较 FC 慢 FC系统固有毫秒级别弹性伸缩,快速实现底层扩容以应对峰值压力,免运维,视频处理工作流系统 (FnF + FC) 压测;性能优异, 详情见下面的转码性能表 监控报警查询 ECS 或者容器级别的 metrics 提供更细粒度的 FnF 流程执行以及函数执行情况, 同时可以查询每次函数执行的 latency 和日志等, 更加完善的报警监控机制 函数计算 + 函数工作流 Serverless 方案转码性能表 实验视频为是 89s 的 mov 文件 4K 视频: 4K.mov,云服务进行 mov -> mp4 普通转码需要消耗的时间为 188s, 将这个参考时间记为 T 视频切片时间 FC转码耗时 性能加速百分比 45s 160s 117.5% 25s 100s 188% 15s 70s 268.6% 10s 45s 417.8% 5s 35s 537.1% 性能加速百分比 = T / FC转码耗时 从上表可以看出,设置的视频切片时间越短, 视频转码时间越短, 函数计算可以自动瞬时调度出更多的计算资源来一起完成这个视频的转码, 转码性能优异。 更低的成本 具有明显波峰波谷的视频处理场景(比如只有部分时间段有视频处理请求,其他时间很少甚至没有视频处理请求),选择按需付费,只需为实际使用的计算资源付费。 没有明显波峰波谷的视频处理场景,可以使用预付费(包年包月),成本仍然具有竞争力。 函数计算成本优化最佳实践文档。 假设有一个基于 ECS 搭建的视频转码服务,由于是 CPU 密集型计算, 因此在这里将平均 CPU 利用率作为核心参考指标对评估成本,以一个月为周期,10 台 C5 ECS 的总计算力为例, 总的计算量约为 30% 场景下, 两个解决方案 CPU 资源利用率使用情况示意图大致如下: image 由上图预估出如下计费模型: 函数计算预付费 3CU 一个月: 246.27 元, 计算能力等价于 ECS 计算型 C5 ECS 计算型 C5 (2vCPU,4GB)+云盘: 包月219 元 函数计算按量付费占整个计算量的占比 <= 10%,费用约为 3×864×10% = 259.2 元,(3G 规格的函数满负载跑满一个月费用为:0.00011108×3×30×24×3600 = 863.8,详情查看计费) ITEM 平均CPU利用率 计算费用 总计 函数计算组合付费 >=80% 998(246.27×3+259.2) <= 998 按峰值预留ECS <=30% 2190(10*219) >=2190 在这个模型预估里面,可以看出 FC 方案具有很强的成本竞争力,在实际场景中, 基于 ECS 自建的视频转码服务 CPU 利用甚至很难达到 20%, 理由如下: 可能只有部分时间段有视频转码请求 为了用户体验,视频转码速度有一定的要求,可能一个视频转码就需要 10 台 ECS 并行处理来转码, 因此只能预备很多 ECS 因此,在实际场景中, FC 在视频处理上的成本竞争力远强于上述模型。 即使和云厂商视频转码服务单价 PK, 该方案仍有很强的成本竞争力 我们这边选用点播视频中最常用的两个格式(mp4、flv)之间进行相互转换,经实验验证, 函数内存设置为3G,基于该方案从 mp4 转码为 flv 的费用概览表: 实验视频为是 89s 的 mp4 和 flv 格式的文件视频, 测试视频地址: 480P.mp4 720P.mp4 1080P.mp4 4K.mp4 480P.flv 720P.flv 1080P.flv 4K.flv 测试命令: ffmpeg -i test.flv test.mp4 和 ffmpeg -i test.flv test.mp4 mp4 转 flv: 分辨率 bitrate 帧率 FC 转码耗费时间 FC 转码费用 某云视频处理费用 成本下降百分比 标清 640480 889 kb/s 24 11.2s 0.003732288 0.032 88.3% 高清 1280720 1963 kb/s 24 20.5s 0.00683142 0.065 89.5% 超清 19201080 3689 kb/s 24 40s 0.0133296 0.126 89.4% 4K 38402160 11185 kb/s 24 142s 0.04732008 0.556 91.5% flv 转 mp4: 分辨率 bitrate 帧率 FC 转码耗费时间 FC 转码费用 某云视频处理费用 成本下降百分比 标清 640480 712 kb/s 24 34.5s 0.01149678 0.032 64.1% 高清 1280720 1806 kb/s 24 100.3s 0.033424 0.065 48.6% 超清 19201080 3911 kb/s 24 226.4s 0.0754455 0.126 40.1% 4K 38402160 15109 kb/s 24 912s 0.30391488 0.556 45.3% 成本下降百分比 = (某云视频处理费用 - FC 转码费用)/ 云视频处理费用 某云视频处理,计费使用普通转码,转码时长不足一分钟,按照一分钟计算,这里计费采用的是 2 min,即使采用 1.5 min 计算, 成本下降百分比基本在10%以内浮动 从上表可以看出, 基于函数计算 + 函数工作流的方案在计算资源成本上对于计算复杂度较高的 flv 转 mp4 还是计算复杂度较低的 mp4 转 flv, 都具有很强的成本竞争力。 根据实际经验, 往往成本下降比上表列出来的更加明显, 理由如下: 测试视频的码率较高, 实际上很多场景绝大部分都是标清或者流畅视频的转码场景, 码率也比测试视频低,这个时候计算量变小, FC 执行时间短, 费用会降低, 但是通用的云转码服务计费是不变的. 很多视频分辨率在通用的云转码服务是计费是有很大损失的, 比如转码的视频是 856480 或者 1368768, 都会进入云转码服务的下一档计费单价, 比如856480 进入 1280720 高清转码计费档,1368768 进入 19201080 超清转码计费档, 单价基本是跨越式上升, 但是实际真正的计算量增加可能还不到30%, 而函数计算则是真正能做到按计算量付费. 操作部署 免费开通函数计算,按量付费,函数计算有很大的免费额度。 免费开通函数工作流,按量付费,函数工作流有很大的免费额度。 免费开通文件存储服务NAS, 按量付费 详情见各自示例工程的 README Simple 视频处理系统示例工程地址 视频处理工作流系统示例工程地址 总结 基于函数计算 FC 和函数工作流 FnF 的弹性高可用视频处理系统天然继承了这两个产品的优点: 无需采购和管理服务器等基础设施,只需专注视频处理业务逻辑的开发,大幅缩短项目交付时间和人力成本 提供日志查询、性能监控、报警等功能快速排查故障 以事件驱动的方式触发响应用户请求 免运维,毫秒级别弹性伸缩,快速实现底层扩容以应对峰值压力,性能优异 成本极具竞争力 相比于通用的转码处理服务: 超强自定义,对用户透明, 基于 FFmpeg 或者其他音视频处理工具命令快速开发相应的音视频处理逻辑 原有基于 FFmpeg 自建的音视频处理服务可以一键迁移 弹性更强, 可以保证有充足的计算资源为转码服务,比如每周五定期产生几百个 4G 以上的 1080P 大视频, 但是希望当天几个小时后全部处理完 各种格式的音频转换或者各种采样率自定义、音频降噪等功能, 比如专业音频处理工具 aacgain 和 mp3gain 可以和 serverless 工作流完成更加复杂、自定义的任务编排,比如视频转码完成后,记录转码详情到数据库,同时自动将热度很高的视频预热到 CDN 上, 从而缓解源站压力 更多的方式的事件驱动, 比如可以选择 OSS 自动触发(丰富的触发规则), 也可以根据业务选择 MNS 消息(支持 tag 过滤)触发 在大部分场景下具有很强的成本竞争力相比于其他自建服务: 毫秒级弹性伸缩,弹性能力超强,支持大规模资源调用,可弹性支持几万核.小时的计算力,比如 1 万节课半个小时完成转码 只需要专注业务逻辑代码即可,原生自带事件驱动模式,简化开发编程模型,同时可以达到消息(即音视频任务)处理的优先级,可大大提高开发运维效率 函数计算采用 3AZ 部署, 安全性高,计算资源也是多 AZ 获取, 能保证每个用户需要的算力峰值 开箱即用的监控系统, 如上面 gif 动图所示,可以多维度监控函数的执行情况,根据监控快速定位问题,同时给用户提供分析能力, 比如视频的格式分布, size 分布等 在大部分场景下具有很强的成本竞争力, 因为在函数计算是真正的按量付费(计费粒度在百毫秒), 可以理解为 CPU 的利用率为 100% 最后一一回答一下之前列出的问题: Q1: 您已经在虚拟机/容器平台上基于 FFmpeg 部署了一套视频处理服务,能否在此基础上让它更弹性,更高的可用性? A: 如工程示例所示,在虚拟机/容器平台上基于 FFmpeg 的服务可以轻松切换到函数计算, FFmpeg 相关命令可以直接移值到函数计算,改造成本较低, 同时天然继承了函数计算弹性高可用性特性。 Q2:您的需求只是简单的转码需求,或是一些极其轻量的需求,比如获取 OSS 上视频前几帧的 GIF 等。 自己搭建成本更低。 A: 函数计算天生就是解决这些自定义问题, 你的代码你做主, 代码中快速执行几个 FFmpeg 的命令即可完成需求。典型示例: fc-oss-ffmpeg Q3: 您有更高级的自定义处理需求,比如视频转码完成后, 需要记录转码详情到数据库, 或者在转码完成后, 自动将热度很高的视频预热到 CDN 上, 从而缓解源站压力。 A: 详情见视频处理工作流系统(函数计算 + 函数工作流方案),after-process 中可以做一些自定义的操作, 您还可以基于此流程再做一些额外处理等, 比如: 再增加后续流程 最开始增加 pre-process Q4: 您有并发同时处理大量视频的需求。 A: 详情见视频处理工作流系统(函数计算 + 函数工作流方案), 当有多个文件同时上传到 OSS, 函数计算会自动伸缩, 并行处理多个文件。详情可以参考 视频处理工作流系统 (FnF + FC) 压测 Q5:您有很多超大的视频需要批量快速处理完, 比如每周五定期产生几百个 4G 以上的 1080P 大视频, 但是希望当天几个小时后全部处理完。A: 详情可以参考视频处理工作流系统 (FnF + FC) 压测, 可以通过控制分片的大小, 可以使得每个大视频都有足够多的计算资源参与转码计算, 大大提高转码速度。 Q6: 自定义视频处理流程中可能会有多种操作组合, 比如转码、加水印和生成视频首页 GIF,后续为视频处理系统增加新需求,比如调整转码参数,希望新功能发布上线对在线服务无影响。 A: 详情见视频处理工作流系统(函数计算 + 函数工作流方案), FnF 只负责编排调用函数, 因此只需要更新相应的处理函数即可,同时函数有 version 和 alias 功能, 更好地控制灰度上线, 函数计算版本管理 Q7: 您的视频源文件存放在 NAS 或者 ECS 云盘上,自建服务可以直接读取源文件处理,而不需要将他们再迁移到 OSS 上。 A: 函数计算可以挂载 NAS, 直接对 NAS 中的文件进行处理

1934890530796658 2020-03-27 18:21:36 0 浏览量 回答数 0

回答

这是一个非常典型的解决方案, 对象存储 OSS 可以支持海量视频存储,采集上传的视频被转码以适配各种终端,CDN 加速终端设备播放视频的速度。此外还有一些内容安全审查需求, 比如鉴黄、鉴恐等。 而在视频点播解决方案中, 视频转码是最消耗计算力的一个子系统,虽然您可以使用云上专门的转码服务,但在很多情况下,您会选择自己搭建转码服务。比如: 您已经在虚拟机/容器平台上基于 FFmpeg 部署了一套视频处理服务,能否在此基础上让它更弹性,更高的可用性? 您的需求只是简单的转码需求,或是一些极其轻量的需求,比如获取 OSS 上视频前几帧的 GIF、获取视频或者音频的时长,自己搭建成本更低。 各种格式的音频转换或者各种采样率自定义、音频降噪等功能 您有更高级的自定义处理需求,比如视频转码完成后, 需要记录转码详情到数据库, 或者在转码完成后, 自动将热度很高的视频预热到 CDN 上, 从而缓解源站压力。 您有并发处理大量视频的需求。 自定义视频处理流程中可能会有多种操作组合, 比如转码、加水印和生成视频首页 GIF。后续为视频处理系统增加新需求,比如调整转码参数,希望新功能发布上线对在线服务无影响。 您的视频源文件存放在 NAS 或者 ECS 云盘上,自建服务可以直接读取源文件处理,而不需要将它们再迁移到 OSS 上。 如果您的视频处理系统有上述需求,或者您期望实现一个 弹性、高可用、低成本、免运维、灵活支持任意处理逻辑 的视频处理系统,那么本文则是您期待的最佳实践方案。 Serverless 自定义视频处理 在介绍具体方案之前, 先介绍两款产品: 函数计算 :阿里云函数计算是事件驱动的全托管计算服务。通过函数计算,您无需管理服务器等基础设施,只需编写代码并上传。函数计算会为您准备好计算资源,以弹性、可靠的方式运行您的代码,并提供日志查询、性能监控、报警等功能。 函数工作流:函数工作流(Function Flow,以下简称 FnF)是一个用来协调多个分布式任务执行的全托管云服务。您可以用顺序,分支,并行等方式来编排分布式任务,FnF 会按照设定好的步骤可靠地协调任务执行,跟踪每个任务的状态转换,并在必要时执行用户定义的重试逻辑,以确保工作流顺利完成。 免费开通函数计算,按量付费,函数计算有很大的免费额度。 免费开通函数工作流,按量付费,函数工作流有很大的免费额度。 函数计算可靠的执行任意逻辑, 逻辑可以是利用 FFmpeg 对视频任何处理操作, 也可以更新视频 meta 数据到数据库等。 函数工作流对相应的函数进行编排, 比如第一步的函数是转码, 第二步的函数是转码成功后,将相应 meta 数据库写入数据库等。 至此,您应该初步理解了函数计算的自定义处理能力 + 函数工作流编排能力几乎满足您任何自定义处理的需求,接下来,本文以一个具体的示例展示基于函数计算和函数工作流打造的一个弹性高可用的 Serverless 视频处理系统,并与传统方案进行性能、成本和工程效率的对比。 简单视频处理系统 假设您是对短视频进行简单的处理, 架构方案图如下: 如上图所示, 用户上传一个视频到 OSS, OSS 触发器自动触发函数执行, 函数调用 FFmpeg 进行视频转码, 并且将转码后的视频保存回 OSS。 OSS 事件触发器, 阿里云对象存储和函数计算无缝集成。您可以为各种类型的事件设置处理函数,当 OSS 系统捕获到指定类型的事件后,会自动调用函数处理。例如,您可以设置函数来处理 PutObject 事件,当您调用 OSS PutObject API 上传视频到 OSS 后,相关联的函数会自动触发来处理该视频。 简单视频处理系统示例工程地址 您可以直接基于示例工程部署您的简单视频处理系统服务, 但是当您想要处理大视频(比如 test_huge.mov ) 或者对小视频进行多种组合操作的时候, 您会发现函数很大概率会执行失败,原因是函数计算的执行环境存在一些限制, 比如最大执行时间为 10 分钟, 最大内存为 3G。 为了突破函数计算执行环境的限制,引入函数工作流 FnF 去编排函数实现一个功能强大的全功能视频处理系统。 全功能视频处理系统 如上图所示, 假设用户上传一个 mov 格式的视频到 OSS,OSS 触发器自动触发函数执行, 函数调用 FnF,并行进行提取音频文件,同时进行 avi,mp4,flv 格式的转码。 所以您可以实现如下需求: 一个视频文件可以同时被转码成各种格式以及其他各种自定义处理,比如增加水印处理或者在 after-process 更新信息到数据库等。 当有多个文件同时上传到 OSS,函数计算会自动伸缩, 并行处理多个文件。 对于每一个视频,先进行切片处理,然后并行转码切片,最后合成,通过设置合理的切片时间,可以大大加速较大视频的转码速度。 所谓的视频切片,是将视频流按指定的时间间隔,切分成一系列分片文件,并生成一个索引文件记录分片文件的信息 结合 NAS + 视频切片, 可以解决超大视频(大于 3G )的转码。 全功能视频处理系统示例工程地址

保持可爱mmm 2020-04-15 23:08:12 0 浏览量 回答数 0

问题

魔乐MLDN李兴华主讲Oracle视频教程

webssss 2019-12-01 20:58:21 13867 浏览量 回答数 5

回答

前言概述 本文介绍了使用函数计算部署深度学习 AI 推理的最佳实践, 其中包括使用 FUN 工具一键部署安装第三方依赖、一键部署、本地调试以及压测评估, 全方位展现函数计算的开发敏捷特性、自动弹性伸缩能力、免运维和完善的监控设施。 1.1 DEMO 概述 image 通过上传一个猫或者狗的照片, 识别出这个照片里面的动物是猫还是狗 DEMO 示例效果入口: http://sz.mofangdegisn.cn DEMO 示例工程地址: https://github.com/awesome-fc/cat-dog-classify 开通服务 免费开通函数计算, 按量付费,函数计算有很大的免费额度。 免费开通文件存储服务NAS, 按量付费 1.2 解决方案 image 如上图所示, 当多个用户通过对外提供的 url 访问推理服务时候,每秒的请求几百上千都没有关系, 函数计算平台会自动伸缩, 提供足够的执行实例来响应用户的请求, 同时函数计算提供了完善的监控设施来监控您的函数运行情况。 1.3. Serverless 方案与传统自建服务方案对比 1.3.1 卓越的工程效率 自建服务 函数计算 Serverless 基础设施 需要用户采购和管理 无 开发效率 除了必要的业务逻辑开发,需要自己建立相同线上运行环境, 包括相关软件的安装、服务配置、安全更新等一系列问题 只需要专注业务逻辑的开发, 配合 FUN 工具一键资源编排和部署 学习上手成本 可能使用 K8S 或弹性伸缩( ESS ),需要了解更多的产品、名词和参数的意义 会编写对应的语言的函数代码即可 1.3.2 弹性伸缩免运维 自建服务 函数计算 Serverless 弹性高可用 需要自建负载均衡 (SLB),弹性伸缩,扩容缩容速度较 FC 慢 FC系统固有毫秒级别弹性伸缩,快速实现底层扩容以应对峰值压力,免运维 监控报警查询 ECS 级别的 metrics 提供更细粒度的函数执行情况,每次访问函数执行的 latency 和日志等, 更加完善的报警监控机制 1.3.3 更低的成本 函数计算 (FC) 固有自动伸缩和负载均衡功能,用户不需要购买负载均衡 (SLB) 和弹性伸缩。 具有明显波峰波谷的用户访问场景(比如只有部分时间段有请求,其他时间甚至没有请求),选择按需付费,只需为实际使用的计算资源付费。 对于明显波峰波谷或者稀疏调用具有低成本优势, 同时还保持了弹性能力,以后业务规模做大以后并没有技术切换成本,同时财务成本增长配合预付费也能保持平滑。 部分请求持续平稳的场景下,可以配合预付费解决按需付费较高单价问题。函数计算成本优化最佳实践文档。 假设有一个在线计算服务,由于是CPU 密集型计算, 因此在这里我们将平均 CPU 利用率作为核心参考指标对成本,以一个月为周期,10台 C5 ECS 的总计算力为例,总的计算量约为 30% 场景下, 各解决方案 CPU 资源利用率使用情况示意图大致如下: image 由上图预估出如下计费模型: 函数计算预付费 3CU 一个月: 246.27 元, 计算能力等价于 ECS 计算型 C5 ECS 计算型 C5 (2vCPU,4GB)+云盘: 包月219 元,按量: 446.4 元 包月10 Mbps 的 SLB: 526.52 元(这里做了一定的流量假设), 弹性伸缩免费 饱和使用下,函数计算按量付费的一台机器成本约为按量付费 C5 ECS 的2 倍 平均CPU使用率 计算费用 SLB 总计 函数计算组合付费 >=80% 738+X(246.273+X) 无 <= 738+X 按峰值预留ECS <=30% 2190(10219) 526.52 >=2716.52 弹性伸缩延迟敏感 <=50% 1314(102193/5) 526.52 >= 1840.52 弹性伸缩成本敏感 <=70% 938.57 (102193/7) 526.52 >= 1465.09 注: 这里假设函数逻辑没有公网下行流量费用, 即使有也是一致的, 这里成本比较暂不参与 延时敏感,当 CPU 利用率大于等于 50% 就需要开始进行扩容,不然更来不及应对峰值 成本敏感,当 CPU 利用率大约 80% 即开始进行扩容, 能容受一定几率的超时或者5XX 上表中, 其中函数计算组合付费中的 X 为按需付费的成本价,假设按需付费的计算量占整个计算量的 10%,假设 CPU 利用率为100%, 对应上表,那么需要 3 台 ECS 的计算能力即可。因此 FC 按量付费的成本 X = 3 ️ 446.4 ️ 10% ️ 2 = 267.84 ( FC 按量付费是按量 ECS 的2倍),这个时候函数计算组合付费总计 1005.8 元。 在这个模型预估里面, 只要 FC 按量付费占整个计算量小于 20%, 即使不考虑 SLB, 单纯考虑计算成本, 都是有一定优势的。 1.3.4. 小结 基于函数计算进行 AI 推理等 CPU 密集型的主要优势: 上手简单, 只专注业务逻辑开发, 极大提高工程开发效率。 自建方案有太多学习和配置成本,如针对不同场景,ESS 需要做各种不同的参数配置 系统环境的维护升级等 免运维,函数执行级别粒度的监控和告警。 毫秒级弹性扩容,保证弹性高可用,同时能覆盖延迟敏感和成本敏感类型。 在 CPU 密集型的计算场景下, 通过设置合理的组合计费模式, 在如下场景中具有成本优势: 请求访问具有明显波峰波谷, 其他时间甚至没有请求 有一定稳定的负载请求, 但是有部分时间段请求量突变剧烈 打包代码ZIP包和部署函数 FUN 操作简明视频教程 开通服务 免费开通函数计算, 按量付费,函数计算有很大的免费额度。 免费开通文件存储服务NAS, 按量付费 2.1 安装第三方包到本地并上传到NAS 2.1.1 安装最新的Fun 安装版本为8.x 最新版或者10.x 、12.x nodejs 安装 funcraf 2.1.2 Clone 工程 & Fun 一键安装第三方库到本地 git clone https://github.com/awesome-fc/cat-dog-classify.git 复制 .env_example 文件为 .env, 并且修改 .env 中的信息为自己的信息 执行 fun install -v, fun 会根据 Funfile 中定义的逻辑安装相关的依赖包 image root@66fb3ad27a4c: ls .fun/nas/auto-default/classify model python root@66fb3ad27a4c: du -sm .fun 697 .fun 根据 Funfile 的定义: 将第三方库下载到 .fun/nas/auto-default/classify/python 目录下 本地 model 目录移到 .fun/nas/auto-default/model 目录下 安装完成后,从这里我们看出, 函数计算引用的代码包解压之后已经达到了 670 M, 远超过 50M 代码包限制, 解决方案是 NAS 详情可以参考: 挂载NAS访问,幸运的是 FUN 工具一键解决了 nas 的配置和文件上传问题。 2.1.3. 将下载的依赖的第三方代码包上传到 NAS fun nas init fun nas info fun nas sync fun nas ls nas://classify:/mnt/auto/ 依次执行这些命令,就将本地中的 .fun/nas/auto-default 中的第三方代码包和模型文件传到 NAS 中, 依次看下这几个命令的做了什么事情: fun nas init: 初始化 NAS, 基于您的 .env 中的信息获取(已有满足条件的nas)或创建一个同region可用的nas fun nas info: 可以查看本地 NAS 的目录位置, 对于此工程是 $(pwd)/.fun/nas/auto-default/classify fun nas sync: 将本地 NAS 中的内容(.fun/nas/auto-default/classify)上传到 NAS 中的 classify 目录 fun nas ls nas:///mnt/auto/: 查看我们是否已经正确将文件上传到了 NAS 登录 NAS 控制台 https://nas.console.aliyun.com 和 VPC 控制台 https://vpc.console.aliyun.com可以观察到在指定的 region 上有 NAS 和相应的 vpc 创建成功 2.2 本地调试函数 在 template.yml 中, 指定了这个函数是 http 类型的函数, 所以根据 fun 的提示: Tips for next step Invoke Event Function: fun local invokeInvoke Http Function: fun local startBuild Http Function: fun buildDeploy Resources: fun deploy 执行 fun local start, 本地就会启动一个 http server 来模拟函数的执行, 然后我们 client 端可以使用 postman, curl 或者浏览器, 比如对于本例: image image 2.3 部署函数到FC平台 本地调试OK 后,我们接下来将函数部署到云平台: 修改 template.yml LogConfig 中的 Project, 任意取一个不会重复的名字即可,有两处地方需要更改,然后执行 fun deploy 注意: template.yml 注释的部分为自定义域名的配置, 如果想在 fun deploy 中完成这个部署工作: 先去域名解析, 比如在示例中, 将域名 sz.mofangdegisn.cn 解析到 123456.cn-hangzhou.fc.aliyuncs.com, 对应的域名、accountId 和 region 修改成自己的 去掉 template.yml 中的注释, 修改成自己的域名 执行 fun deploy 这个时候如果没有自定义域名, 直接通过浏览器访问http trigger 的url, 比如 https://123456.cn-shenzhen.fc.aliyuncs.com/2016-08-15/proxy/classify/cat-dog/ 会被强制下载. 原因:https://help.aliyun.com/knowledge_detail/56103.html#HTTP-Trigger-compulsory-header image 登录控制台https://fc.console.aliyun.com,可以看到service 和函数已经创建成功,并且 service 也已经正确配置。 image 在这里,我们发现第一次打开页面访问函数的时候,执行环境实例冷启动时间非常长, 如果是一个在线AI推理服务,对响应时间非常敏感,冷启动引起的毛刺对于这种类型的服务是不可接受的,接下来,本文讲解如何利用函数计算的预留模式来消除冷启动带来的负面影响。 使用预留模式消除冷启动毛刺 函数计算具有动态伸缩的特性, 根据并发请求量,自动弹性扩容出执行环境来执行环境,在这个典型的深度学习示例中,import keras 消耗的时间很长 , 在我们设置的 1 G 规格的函数中, 并发访问的时候耗时10s左右, 有时甚至20s+ start = time.time() from keras.models import model_from_json print("import keras time = ", time.time()-start) 3.1 函数计算设置预留 预留操作简明视频教程 在 FC 控制台,发布版本,并且基于该版本创建别名 prod,并且基于别名 prod 设置预留, 操作过程请参考:https://help.aliyun.com/document_detail/138103.html 将该函数的 http trigger 和自定义域名的设置执行 prod 版本 image image 一次压测结果 imageimage 从上面图中我们可以看出,当函数执行的请求到来时,优先被调度到预留的实例中被执行, 这个时候是没有冷启动的,所以请求是没有毛刺的, 后面随着测试的压力不断增大(峰值TPS 达到 1184), 预留的实例不能满足调用函数的请求, 这个时候函数计算就自动进行按需扩容实例供函数执行,此时的调用就有冷启动的过程, 从上面我们可以看出,函数的最大 latency 时间甚至达到了 32s,如果这个web AP是延时敏感的,这个 latency 是不可接受的。 总结 函数计算具有快速自动伸缩扩容能力 预留模式很好地解决了冷启动中的毛刺问题 开发简单易上手,只需要关注具体的代码逻辑, Fun 工具助您一键式部署运用 函数计算具有很好监控设施, 您可以可视化观察您函数运行情况, 执行时间、内存等信息

1934890530796658 2020-03-27 18:21:48 0 浏览量 回答数 0

回答

内建函数直接调用 xxx() 自定义,def关键字。

游客aasf2nc2ujisi 2019-12-02 03:21:04 0 浏览量 回答数 0

回答

python 所有版本的源代码可以在这里下载到:https://www.python.org/downloads/source/python没有像matlab那样的函数可以直接查看某个函数的源代码,只有去下载整个源代码查看了,不过找起来应该也不难,另外你也可以写一个小程序来查看对应函数的源代码。Python的函数调用方式是通过import来调用的对应的py文件。库函数有内建函数build_in(会写python的时候已经可以不用看了,不会写的时候看也看不懂),和通过pip直接下载或者github上下载再安装的函数。本质上都是py文件。后者有时候由于环境的不同需要自行修改(这种情况较少),一般在安装路径下"Libsite-packages"文件夹中存在。学习库函数最好的方法是看网上官方的帮助文档,此外还可以通过python自带的dir()方法查看所有的属性和方法,或者用help()方法查看帮助文档(部分别人造的轮子不一定有)。另外推荐使用ipython,Python创始人之一的成员编写的交互式系统

xuning715 2019-12-02 01:10:13 0 浏览量 回答数 0

回答

本文介绍如何使用数据传输服务DTS(Data Transmission Service),将自建MySQL迁移至RDS MySQL实例。DTS支持结构迁移、全量数据迁移以及增量数据迁移,同时使用这三种迁移类型可以实现在自建应用不停服的情况下,平滑地完成自建MySQL数据库的迁移上云。 前提条件 创建RDS MySQL实例。 自建MySQL数据库版本为5.1、5.5、5.6、5.7、8.0版本。 RDS MySQL实例的存储空间须大于自建MySQL数据库占用的存储空间。 注意事项 DTS在执行全量数据迁移时将占用源库和目标库一定的读写资源,可能会导致数据库的负载上升,在数据库性能较差、规格较低或业务量较大的情况下(例如源库有大量慢SQL、存在无主键表或目标库存在死锁等),可能会加重数据库压力,甚至导致数据库服务不可用。因此您需要在执行数据迁移前评估源库和目标库的性能,同时建议您在业务低峰期执行数据迁移(例如源库和目标库的CPU负载在30%以下)。 如果源数据库没有主键或唯一约束,且所有字段没有唯一性,可能会导致目标数据库中出现重复数据。 对于数据类型为FLOAT或DOUBLE的列,DTS会通过ROUND(COLUMN,PRECISION)来读取该列的值。如果没有明确定义其精度,DTS对FLOAT的迁移精度为38位,对DOUBLE的迁移精度为308位,请确认迁移精度是否符合业务预期。 DTS自动在阿里云RDS MySQL中创建数据库,如果待迁移的数据库名称不符合阿里云RDS的定义规范,将导致创建数据库失败,所以您需要在配置迁移任务之前在阿里云RDS MySQL中创建数据库。 说明 关于阿里云RDS的定义规范和创建数据库的操作方法,请参见创建数据库。 对于迁移失败的任务,DTS会触发自动恢复。在您将业务切换至目标实例前,请务必先结束或释放该任务,避免该任务被自动恢复后,导致源端数据覆盖目标实例的数据。 费用说明 迁移类型 链路配置费用 公网流量费用 结构迁移/全量数据迁移 不收费。 通过公网将数据迁移出阿里云时将收费,详情请参见产品定价。 增量数据迁移 收费,详情请参见产品定价。 迁移类型说明 结构迁移 DTS将迁移对象的结构定义迁移到目标实例,目前DTS支持结构迁移的对象为表、视图、触发器、存储过程、存储函数,不支持event的结构迁移。 说明 在结构迁移时,DTS会将视图、存储过程和函数中的DEFINER转换为INVOKER。 由于DTS不迁移user信息,因此在调用目标库的视图、存储过程和函数时需要对调用者授予读写权限。 全量数据迁移 DTS会将自建MySQL数据库迁移对象的存量数据,全部迁移到目标RDS MySQL实例数据库中。 说明 由于全量数据迁移会并发INSERT导致目标实例的表存在碎片,全量迁移完成后目标实例的表空间会比源实例大。 为保障数据一致性,全量数据迁移期间请勿在自建MySQL数据库中写入新的数据。 增量数据迁移 在全量迁移的基础上,DTS会读取自建MySQL数据库的binlog信息,将自建MySQL数据库的增量更新数据同步到目标RDS MySQL实例中。通过增量数据迁移可以实现在自建应用不停服的情况下,平滑地完成MySQL数据库的迁移上云。 增量数据迁移支持同步的SQL操作 INSERT、UPDATE、DELETE、REPLACE CREATE TABLE、ALTER TABLE、RENAME TABLE、TRUNCATE TABLE、DROP TABLE 数据库账号的权限要求 数据库 结构迁移 全量迁移 增量迁移 自建MySQL数据库 select权限 select权限 select、replication slave和replication client权限 RDS MySQL实例 读写权限 读写权限 读写权限 数据库账号创建及授权方法: 自建MySQL数据库请参见为自建MySQL创建账号并设置binlog。 RDS MySQL实例请参见创建账号和修改账号权限。 准备工作 为自建MySQL创建账号并设置binlog 操作步骤 登录数据传输控制台。 在左侧导航栏,单击数据迁移。 在迁移任务列表页面顶部,选择迁移的目标实例所属地域。选择地域 单击页面右上角的创建迁移任务。 配置迁移任务的源库及目标库信息。 源库和目标库连接配置 类别 配置 说明 任务名称 - DTS会自动生成一个任务名称,建议配置具有业务意义的名称(无唯一性要求),便于后续识别。 源库信息 实例类型 您可以根据源库部署位置,选择有公网IP的自建数据库、ECS上的自建数据库或通过专线/VPN网关/智能网关接入的自建数据库。 本文以有公网IP的自建数据库为例介绍配置流程,当自建MySQL数据库为其他实例类型时,配置流程与该案例类似。 实例地区 当实例类型选择为有公网IP的自建数据库时,实例地区无需设置。 说明 如果您的自建MySQL数据库具备白名单安全设置,您需要在实例地区配置项后,单击获取DTS IP段来获取到DTS服务器的IP地址,并将获取到的IP地址加入自建MySQL数据库的白名单安全设置中。 数据库类型 选择MySQL。 主机名或IP地址 填入自建MySQL数据库的访问地址,本案例中填入公网地址。 端口 填入自建MySQL数据库的服务端口(需开放至公网),默认为3306。 数据库账号 填入自建MySQL的数据库账号,权限要求请参见数据库账号的权限要求。 数据库密码 填入该数据库账号对应的密码。 说明 源库信息填写完毕后,您可以单击数据库密码后的测试连接来验证填入的源库信息是否正确。源库信息填写正确则提示测试通过;如果提示测试失败,单击测试失败后的诊断,根据提示调整填写的源库信息。 目标库信息 实例类型 选择RDS实例。 实例地区 选择目标RDS实例所属地域。 RDS实例ID 选择目标RDS实例ID。 数据库账号 填入目标RDS实例的数据库账号,权限要求请参见数据库账号的权限要求。 数据库密码 填入该数据库账号对应的密码。 说明 目标库信息填写完毕后,您可以单击数据库密码后的测试连接来验证填入的目标库信息是否正确。目标库信息填写正确则提示测试通过;如果提示测试失败,单击测试失败后的诊断,根据提示调整填写的目标库信息。 连接方式 根据需求选择非加密连接或SSL安全连接。如果设置为SSL安全连接,您需要提前开启RDS实例的SSL加密功能,详情请参见设置SSL加密。 配置完成后,单击页面右下角的授权白名单并进入下一步。 说明 此步骤会将DTS服务器的IP地址自动添加到目标RDS实例的白名单中,用于保障DTS服务器能够正常连接目标RDS实例。 选择迁移对象及迁移类型。 选择迁移类型和迁移对象 配置 说明 迁移类型 如果只需要进行全量迁移,则同时勾选结构迁移和全量数据迁移。 说明 为保障数据一致性,全量数据迁移期间请勿在自建MySQL数据库中写入新的数据。 如果需要进行不停机迁移,则同时勾选结构迁移、全量数据迁移和增量数据迁移。 迁移对象 在迁移对象框中单击待迁移的对象,然后单击向右小箭头将其移动至已选择对象框。 说明 迁移对象选择的粒度可以为库、表、列三个粒度。 默认情况下,迁移完成后,迁移对象名跟自建MySQL数据库一致。如果您需要迁移对象在目标RDS实例上名称不同,那么需要使用DTS提供的对象名映射功能。使用方法请参见库表列映射。 如果使用了对象名映射功能,可能会导致依赖这个对象的其他对象迁移失败。 单击页面右下角的预检查并启动。 说明 在迁移任务正式启动之前,会先进行预检查。只有预检查通过后,才能成功启动迁移任务。 如果预检查失败,单击具体检查项后的提示,查看失败详情。根据提示修复问题后,重新进行预检查。 预检查通过后,单击下一步。 在购买配置确认页面,选择链路规格并勾选数据传输(按量付费)服务条款。 单击购买并启动,迁移任务正式开始。 结束迁移任务 警告 为尽可能地减少数据迁移对业务的影响,建议参考业务切换流程文档中介绍的流程执行业务切换并建立回退方案(将目标库的增量数据实时迁移回源库中)。如果无需切换业务,则可按照下述步骤结束迁移任务。 全量数据迁移 请勿手动结束迁移任务,否则可能导致数据不完整。您只需等待迁移任务完成即可,迁移任务会自动结束。 增量数据迁移 迁移任务不会自动结束,您需要手动结束迁移任务。 观察迁移任务的进度变更为增量迁移,并显示为无延迟状态时,将源库停写几分钟,此时增量迁移的状态可能会显示延迟的时间。 等待迁移任务的增量迁移再次进入无延迟状态后,手动结束迁移任务。结束增量迁移任务 后续操作 用于数据迁移的数据库账号拥有读写权限,为保障数据库安全性,请在数据迁移完成后,删除自建MySQL数据库和RDS MySQL实例中的数据库账号。 常见问题 Q:预检查失败如何处理? A:详情请参见源库连接性检查。 Q:迁移失败的任务如何处理? A:详情请参见修复迁移失败的任务。

游客yl2rjx5yxwcam 2020-03-08 14:03:52 0 浏览量 回答数 0

回答

本文介绍如何使用数据传输服务DTS(Data Transmission Service),将自建Oracle数据迁移至RDS MySQL实例。DTS支持结构迁移、全量数据迁移以及增量数据迁移,同时使用这三种迁移类型可以实现在本地应用不停服的情况下,平滑地完成Oracle数据库的数据迁移。 源库支持的实例类型 进行数据迁移操作的Oracle数据库支持以下实例类型: 有公网IP的自建数据库 ECS上的自建数据库 通过专线/VPN网关/智能网关接入的自建数据库 本文以有公网IP的自建数据库为例介绍配置流程,其他实例类型的自建Oracle数据库配置流程与该案例类似。 前提条件 自建Oracle数据库的版本为9i、10g或11g版本。 自建Oracle数据库已开启Supplemental Logging,且要求supplemental_log_data_pk,supplemental_log_data_ui已开启,详情请参见Supplemental Logging。 自建Oracle数据库已开启ARCHIVELOG(归档模式),设置合理的归档日志保持周期且归档日志能够被访问,详情请参见ARCHIVELOG。 自建Oracle数据库的服务端口已开放至公网。 RDS MySQL实例的存储空间须大于自建Oracle数据库占用的存储空间。 注意事项 DTS在执行全量数据迁移时将占用源库和目标库一定的读写资源,可能会导致数据库的负载上升,在数据库性能较差、规格较低或业务量较大的情况下(例如源库有大量慢SQL、存在无主键表或目标库存在死锁等),可能会加重数据库压力,甚至导致数据库服务不可用。因此您需要在执行数据迁移前评估源库和目标库的性能,同时建议您在业务低峰期执行数据迁移(例如源库和目标库的CPU负载在30%以下)。 如果源数据库没有主键或唯一约束,且所有字段没有唯一性,可能会导致目标数据库中出现重复数据。 RDS MySQL实例对表名的英文大小写不敏感,如果使用大写英文建表,RDS MySQL会先把表名转为小写再执行建表操作。 如果源Oracle数据库中存在表名相同仅大小写不同的表,可能会导致迁移对象重名并在结构迁移中提示“对象已经存在”。如果出现这种情况,请在配置迁移对象的时候,使用DTS提供的对象名映射功能对重名的对象进行重命名,详情请参见库表列映射。 如果待迁移的数据库在目标RDS MySQL实例中不存在,DTS会自动创建。但是对于如下两种情况,您需要在配置迁移任务之前在目标RDS MySQL实例中创建数据库。 数据库名称不符合RDS定义规范,详细规范请参见创建数据库。 待迁移数据库在源Oracle数据库与目标RDS MySQL实例中的名称不同。 费用说明 迁移类型 链路配置费用 公网流量费用 结构迁移/全量数据迁移 不收费。 通过公网将数据迁移出阿里云时将收费,详情请参见产品定价。 增量数据迁移 收费,详情请参见产品定价。 迁移类型说明 结构迁移 DTS支持结构迁移的对象为表和索引,暂不支持视图、同义词、触发器、存储过程、存储函数、包、自定义类型等。表和索引的结构迁移存在以下限制: 表:不支持嵌套表;对于聚簇表和索引组织表,会在目标端转换成普通的表。 索引:不支持Function-Based Index、Domain Index、Bitmap Index和ReverseIndex。 全量数据迁移 DTS会将自建Oracle数据库迁移对象的存量数据,全部迁移到目标RDS MySQL实例数据库中 。 说明 为保障数据一致性,全量数据迁移期间请勿在自建Oracle数据库中写入新的数据。 增量数据迁移 在全量迁移的基础上,DTS会轮询并捕获自建Oracle数据库产生的redolog,将自建Oracle数据库的增量更新数据同步到目标RDS MySQL实例数据库中。通过增量数据迁移可以实现在本地应用不停服的情况下,平滑地完成Oracle数据库的数据迁移工作。 增量数据迁移支持同步的SQL操作 INSERT、DELETE、UPDATE CREATE TABLE 说明 表内定义不能包含函数。 ALTER TABLE、ADD COLUMN、DROP COLUMN、RENAME COLUMN、ADD INDEX DROP TABLE RENAME TABLE、TRUNCATE TABLE、CREATE INDEX 数据库账号权限要求 数据库 结构迁移 全量迁移 增量数据迁移 自建Oracle数据库 schema的owner权限 schema的owner权限 SYSDBA RDS MySQL实例 待迁入数据库的写权限 待迁入数据库的写权限 待迁入数据库的写权限 数据库账号创建及授权方法: 自建Oracle数据库请参见CREATE USER和GRANT。 RDS MySQL实例请参见创建账号和修改账号权限。 数据类型映射关系 详情请参见异构数据库间的数据类型映射关系。 操作步骤 登录数据传输控制台。 在左侧导航栏,单击数据迁移。 在迁移任务列表页面顶部,选择迁移的目标实例所属地域。选择地域 单击页面右上角的创建迁移任务。 配置迁移任务的源库及目标库信息。 源库和目标库连接配置 类别 配置 说明 任务名称 - DTS会自动生成一个任务名称,建议配置具有业务意义的名称(无唯一性要求),便于后续识别。 源库信息 实例类型 选择有公网IP的自建数据库。 实例地区 当实例类型选择为有公网IP的自建数据库时,实例地区无需设置。 说明 如果您的自建Oracle数据库进行了白名单安全设置,您需要在实例地区配置项后,单击获取DTS IP段来获取到DTS服务器的IP地址,并将获取到的IP地址加入自建Oracle数据库的白名单安全设置中。 数据库类型 选择Oracle。 主机名或IP地址 填入自建Oracle数据库的访问地址,本案例填入公网地址。 端口 填入自建Oracle数据库的服务端口,默认为1521。 实例类型 非RAC实例:选择该项后,您还需要填写SID信息。 RAC实例:选择该项后,您还需要填写ServiceName信息。 数据库账号 填入自建Oracle的数据库账号,权限要求请参见迁移账号权限要求。 数据库密码 填入该数据库账号对应的密码。 说明 源库信息填写完毕后,您可以单击数据库密码后的测试连接来验证填入的源库信息是否正确。源库信息填写正确则提示测试通过;如果提示测试失败,单击测试失败后的诊断,根据提示调整填写的源库信息。 目标库信息 实例类型 选择RDS实例。 实例地区 选择目标RDS实例所属地域。 RDS实例ID 选择目标RDS实例ID。 数据库账号 填入目标RDS实例的数据库账号,权限要求请参见迁移账号权限要求。 数据库密码 填入该数据库账号对应的密码。 说明 目标库信息填写完毕后,您可以单击数据库密码后的测试连接来验证填入的目标库信息是否正确。目标库信息填写正确则提示测试通过;如果提示测试失败,单击测试失败后的诊断,根据提示调整填写的目标库信息。 配置完成后,单击页面右下角的授权白名单并进入下一步。 说明 此步骤会将DTS服务器的IP地址自动添加到目标RDS实例的白名单中,用于保障DTS服务器能够正常连接目标RDS实例。 选择迁移对象及迁移类型。 选择迁移类型和迁移对象 配置 说明 迁移类型 如果只需要进行全量迁移,同时勾选结构迁移和全量数据迁移。 说明 为保障数据一致性,全量数据迁移期间请勿在自建Oracle数据库中写入新的数据。 如果需要进行不停机迁移,同时勾选结构迁移、全量数据迁移和增量数据迁移。 迁移对象 在迁移对象框中选中待迁移的对象,单击向右小箭头将其移动到已选择对象框。 说明 迁移对象选择的粒度可以为库、表、列三个粒度。 默认情况下,迁移完成后,迁移对象名跟自建Oracle数据库一致。如果您需要迁移对象在目标RDS实例上名称不同,那么需要使用DTS提供的对象名映射功能。使用方法请参见库表列映射。 单击页面右下角的预检查并启动。 说明 在迁移任务正式启动之前,会先进行预检查。只有预检查通过后,才能成功启动迁移任务。 如果预检查失败,单击具体检查项后的提示,查看失败详情。根据提示修复问题后,重新进行预检查。 预检查通过后,单击下一步。 在购买配置确认页面,选择链路规格并勾选数据传输(按量付费)服务条款。 单击购买并启动,迁移任务正式开始。 全量数据迁移 请勿手动结束迁移任务,否则可能导致数据不完整。您只需等待迁移任务完成即可,迁移任务会自动结束。 增量数据迁移 迁移任务不会自动结束,您需要手动结束迁移任务。 说明 请选择合适的时间手动结束迁移任务,例如业务低峰期或准备将业务切换至目标实例时。 观察迁移任务的进度变更为增量迁移,并显示为无延迟状态时,将源库停写几分钟,此时增量迁移的状态可能会显示延迟的时间。 等待迁移任务的增量迁移再次进入无延迟状态后,手动结束迁移任务。无延迟 将业务切换至RDS实例。 后续操作 用于数据迁移的数据库帐号拥有读写权限,为保障数据库安全性,请在数据迁移完成后,删除自建Oracle数据库和RDS MySQL实例中的数据库帐号。 更多信息 DTS支持在自建Oracle数据迁移至RDS MySQL实例时的数据反向回流,您可以使用该功能将RDS MySQL实例中产生的数据变化同步回自建Oracle数据库。如您有相关需求,请提交工单申请开通。

游客yl2rjx5yxwcam 2020-03-08 14:04:46 0 浏览量 回答数 0

回答

Re迁移出现这个错误怎么解决grantreloadontordsperf 授权下就可以了,我也遇到这个问题了,阿里云官方文档有解决办法,执行完这些命令就好了 数据迁移至RDS-MySQL之利用RDS管理控制台 该方法是一种MySQL的在线迁移方法,可以不停服务就能够完成数据库的迁移工作,支持MySQL 5.1、5.5、5.6(5.0版本只支持全量迁移)的迁移。更多迁移信息可参考:如何快速平稳的迁入RDS>> 迁移注意事项 1)MySQL的系统库将不允许迁移至RDS,不允许迁移的数据库包括:mysql,information_schema,perfermance_schema。这些数据库将不会显示在迁移列表中; 2)不支持迁移存储过程和函数,如果待迁移的库中存在存储过程和函数,将忽略掉不迁移; 3)自建数据库必须与RDS实例中的数据库同名。否则,自建数据库为“暂不可迁移”状态; 4)自建库迁移账号密码不允许含有%¥#!等特殊字符; 5)迁移中禁止使用DDL操作例如:创建表、删除表、修改索引等操作; 6) 自建数据库的视图(view)无法迁移到RDS,需要您重新创建的。 迁移步骤 1)在自建数据库中创建迁移账号 命令格式: grant all privileges on DB.* to 'userName'@'%' identified by 'password'; MySQL数据迁移 说明:a) userName:MySQL数据库账号;b) password: MySQL数据库账号的密码。 2)设置迁移账号权限 命令格式: grant super,process,select,reload,lock tables,replication slave,replication client ON *.* TO 'userName'@'%'; MySQL数据迁移 说明:该命令对数据库账号userName赋予super、process、select、reload、lock tables、replication slave、replication client权限。 3)确认自建数据库中配置文件正确 确认MySQL配置文件my.cnf有如下设置项: MySQL数据迁移 说明: a) 开启二进制日志,log_bin=mysql-bin; b) 设置binlog格式为“ROW”模式,binlog_format=ROW; c) server_id要大于1,如server_id=2; d)修改完成后,重启MySQL进程。 4)登录自建数据库,通过命令查看是否为“ROW”模式 执行命令: show variables like ‘binlog_format%’; MySQL数据迁移 5)将数据迁移至RDS 在RDS管理控制台对应的实例页面,点击“将数据迁移至RDS”按钮,在弹出框中填写待迁移的数据库连接地址、数据库连接端口、数据库账号、数据库密码,如下图所示: 注意下:如果您的表是myisam引擎,无论下图是否选择锁表,迁移过程中都会锁表,下个版本我们会提供myisam不锁表的支持。 MySQL数据迁移

macroyan 2019-12-02 01:52:24 0 浏览量 回答数 0

回答

递归=传递+回归,即任务的下放和结果的回收。 这个需要自己慢慢体会,其实所有递归算法实质上都是一样的,理解了就万变不离其宗了。 create(node *root) { root=new node; 写上关于root的信息//初始化root节点 if(root满足自定义的条件)//自定义一个递归的条件,即传递和回归的界限,这是必须的。 { create(root->lchild);//建左子树 create(root->rchild);//建右子树 } } 总体上来看,建一颗树,每一次调用creat()都是只创建一个节点,把剩下的任务下放给create(root->lchild)和create(root->rchild) ,而这两个也会重复第一个create(root)的做法,实质体现的是任务的不断下放,当达到最后的回归的界限的,结果又将不断回收,对应的是函数的不断返回,实质是退栈的过程。这个过程其实经历了一个不断进栈和不断出栈的过程,对应的是任务的不断下放和不断提交,最后栈空,即告全部任务完成。

游客886 2019-12-02 01:24:38 0 浏览量 回答数 0

问题

MaxCompute快速入门:编写UDF

行者武松 2019-12-01 22:01:39 1163 浏览量 回答数 0

回答

mousewheel.js其实也没有多少行代码,没有几个函数就是封装了一下,功能还是比scroll强大, .scroll()你看API里说必须是overflow CSS property set to scroll (or auto when the element's explicit height or width is less than the height or width of its contents).如果把overflow设成hidden,那样的话scroll就没有神魔作用了 自定义滚动条是还是用得着的!`你建两个div试一下!一个overflow:hidden,一个设成:auto试试

小旋风柴进 2019-12-02 02:18:44 0 浏览量 回答数 0

问题

JS新建构造器实现内建String()的方法和属性

小旋风柴进 2019-12-01 19:37:37 1366 浏览量 回答数 1

回答

本方案通过 Serverless 架构搭建前后端分离架构下的前端静态资源部署服务。 传统架构下的静态资源发布 企业一般的做法是使用Gitlab托管前端代码,搭建Jenkins监听webhook消息,再发布至OSS。 此方案虽然比较灵活,但存在如下的劣势: 需要购买服务器自建Jenkins,涉及计算存储费用 需要专业的运维人员保障服务器稳定运行 集成OSS的SDK实现比较重 使用 Serverless 架构进行静态资源发布 本方案功能是函数计算监听前端代码库提交的分支变更,上传分支文件至 OSS,通过CDN 进行前端资源加速。方案优势如下: structure 面向serverless:无需购买服务器 免运维:无需部署配置Jenkins 提供日志查询、性能监控和报警等功能 一站式:事件驱动方式触发响应 费用极低:按需付费 http://tb.cn/2TUtK4w 方案详情: 函数计算搭建前端CICD系统

1934890530796658 2020-03-27 16:32:30 0 浏览量 回答数 0

回答

前言 本文旨在通过 快速部署一个 wordpress 网站到阿里云 函数计算 平台 这个示例来展示 serverless web 新的开发模式, 包括 FUN 工具一键初始化 NAS, 同步网站到 NAS, 一键部署等能力, 展现函数计算的开发敏捷特性、自动弹性伸缩能力、免运维和完善的监控设施。 相关参考文档: https://yq.aliyun.com/articles/640912 1.1 DEMO 概述 DEMO 示例效果入口: http://hz.mofangdegisn.cn 账号: fc-test-user 密码: fc-test-pwd DEMO 示例工程地址: fc-wordpress 开通服务 免费开通函数计算, 按量付费,函数计算有很大的免费额度。 免费开通文件存储服务NAS, 按量付费 1.2 解决方案 image 如上图所示, 当多个用户通过对外提供的 url 访问web服务的时候,每秒的请求几百上千都没有关系, 函数计算平台会自动伸缩, 提供足够的执行实例来响应用户的请求, 同时函数计算提供了完善的监控设施来监控您的函数运行情况。 1.3 Serverless 方案与传统自建 web 方案对比 ITEM 成本 稳定性 基于 VM 方案 使用 ecs.t5-lc1m1.small, 22.8元/月 服务器和数据库在同一台VM, 均无主备容灾,同时该规格的主机本身性能弱 轻量应用服务器 60元/月(1vCPU 1GB 1Mbps 20GB[ssd]) 服务器和数据库在同一台VM, 均无主备容灾,同时该规格的主机本身性能弱 函数计算 sqlite3 版本约为 1元/月 mysql 版本大约 26元/月 高 函数计算完整费用详情: 每月前 100 万次函数调用免费, 每月前 400000(GB*秒) 费用免费, 函数的内存可以设置为 128M 或者 256M, 因此对于一个一个月访问量低于 100 万次的网站, 该项是免费的 对于低成本的网站, 假设一个月的产生的公网流量为 1GB, 0.8元 NAS, US$0.06/GB/Month, 网站大小为 50M, 即使按 1G 计算, 0.42元 RDS mysql 最基本的单机版本, 25元/月 函数计算计费 | NAS 定价 如上所述, 在低成本网站领域, 函数计算具有十分明显的成本优势,同时还保持了弹性能力,以后业务规模做大以后并没有技术切换成本(可能需要做的只是更换一个更强的关系型数据库), 同时财务成本增长配合预付费也能保持平滑。低成本网站变成高可用高性能网站如丝般顺滑, 高性能网站详情可以参考文末 FAQ 中的 Q1 问题。 函数计算运行 PHP 框架原理 在具体操作部署之前, 先简单梳理一遍函数计算运行 PHP 框架原理 2.1 传统服务器 PHP 运行原理 原理示意图image.png A simple nginx confimage.png 从上面原理示意图我们可以看出,Web 服务器根据 conf 中 location将 PHP 脚本交给 php-fpm 去解析,然后将解析后的结果返回给 client 端 2.2 FC 驱动 PHP 工程原理 image 函数计算的执行环境实例相当于传统 web 服务的 Apache/Nginx 用户函数相当于实现 Apache/Nginx 的 conf 中 location 用户将 Web 网站部署在 NAS,然后挂载 NAS 到函数的执行环境, 比如下面代码中 /mnt/auto 目录 对于 WordPress 入口函数代码就是这么简单: index.php 其中函数计算为用户提供了一个 $GLOBALS['fcPhpCgiProxy'] 对象用来和 php-fpm 进行交互,对PHP 工程中的 php 文件进行解析,该对象提供了两个重要的接口: requestPhpCgi requestPhpCgi($request, $docRoot, $phpFile = "index.php", $fastCgiParams = [], $options = []) $request: 跟 php http invoke 入口的参数一致 $docRoot: Web 工程的根目录 $phpFile: 用于拼接 cgi 参数中的 SCRIPT_FILENAME 的默认参数 $fastCgiParams: 函数计算内部尽量根据 $request给您构造 default cgi params, 但是如果您不是想要的,可以使用$fastCgiParams覆盖一些参数 (reference: cgi) $options: array类型,可选参数, debug_show_cgi_params 设为 true ,会打印每次请求 php 解析时候的 cgi 参数, 默认为 false ;readWriteTimeout 设置解析的时间, 默认为 5 秒 如果您有兴趣, 可以了解下函数计算 PHP Runtime: PHP 入口函数 PHP 执行环境 案例操作步骤 准备条件 免费开通函数计算, 按量付费,函数计算有很大的免费额度。 免费开通文件存储服务NAS, 按量付费 有一个域名, 比如 abc.com, 并将域名 CNAME 解析到函数计算(FC) 对应的 region 如您想在杭州的 region 部署 wordpres 网站, 则将 abc.com CNAME 解析到 12345.cn-hangzhou.fc.aliyuncs.com, 其中 12345 是您的 accountId 3.1 安装最新的 Fun 工具 安装版本为8.x 最新版或者10.x 、12.x nodejs 安装 funcraf 3.2 Clone 工程 git clone https://github.com/awesome-fc/fc-wordpress.git 3.3 根据需要使用的数据库进入不同的目录 复制 .env_example 文件为 .env, 并且修改 .env 中的信息为自己的信息 如果使用 mysql 数据库, 参考章节 3.3.1 如果使用 sqlite3 数据库, 参考章节 3.3.2 3.3.1 使用 mysql 数据库 进入目录 fc-wp-mysql fun nas init fun nas info fun nas init: 初始化 NAS, 基于您的 .env 中的信息获取(已有满足条件的nas)或创建一个同region可用的nas 如果你没有修改 templata.yml 中的配置 service名字, 那么则可以进入下一步; 如果有修改, 会在当前目录生成新的目录 .fun/nas/auto-default/{serviceName} (fun nas info 可以列出新的目录), 将默认目录下的 .fun/nas/auto-default/fc-wp-mysql/wordpress 的wordpress目录拷贝到 .fun/nas/auto-default/{serviceName} 下, 同时可以删除目录 .fun/nas/auto-default/fc-wp-mysql/wordpress 上传 wordpress 网站到 NAS fun nas sync fun nas ls nas:///mnt/auto/ fun nas sync: 将本地 NAS 中的内容(.fun/nas/auto-default/fc-wp-mysql)上传到 NAS 中的 fc-wp-mysql 目录 fun nas ls nas:///mnt/auto/: 查看我们是否已经正确将文件上传到了 NAS 3.3.2 使用 sqlite3 数据库 进入目录 fc-wp-sqlite fun nas init fun nas info fun nas init: 初始化 NAS, 基于您的 .env 中的信息获取(已有满足条件的nas)或创建一个同region可用的nas 如果你没有修改 templata.yml 中的配置 service名字, 那么则可以进入下一步; 如果有修改, 会在当前目录生成新的目录 .fun/nas/auto-default/{serviceName} (fun nas info 可以列出新的目录), 将默认目录下的 .fun/nas/auto-default/fc-wp-sqlite/wordpress 的wordpress目录拷贝到 .fun/nas/auto-default/{serviceName} 下, 同时可以删除目录 .fun/nas/auto-default/fc-wp-sqlite/wordpress 本地完成安装过程, 初始化 sqlite3 数据库 在目录 .fun/nas/auto-default/fc-wp-sqlite/wordpress 中输入命令: php -S 0.0.0.0:80 修改 host 文件,添加 127.0.0.1 hz.mofangdegisn.cn linux/mac : vim /etc/hosts windows7: C:\Windows\System32\drivers\etc 其中 hz.mofangdegisn.cn 是您预先准备的域名 通过浏览器输入 hz.mofangdegisn.cn, 这个时候没有mysql数据库设置页面,完成 wordpress 安装过程 成功安装以后, 这个时候, .fun/nas/auto-default/fc-wp-sqlite/wordpress/wp-content 下面应该有一个 database 的目录, ls -a 查看, 应该有 .ht.sqlite 这个 sqlite3 数据库文件 回退 host 文件的修改 注: 中间修改 host 的目的是初始化 sqlite3 数据库的时候, base site url 是提前准备的域名, 而不是 127.0.0.1 上传 wordpress 网站到 NAS fun nas sync fun nas ls nas:///mnt/auto/ fun nas sync: 将本地 NAS 中的内容(.fun/nas/auto-default/fc-wp-sqlite)上传到 NAS 中的 fc-wp-sqlite 目录 fun nas ls nas:///mnt/auto/: 查看我们是否已经正确将文件上传到了 NAS 3.4 部署函数到FC平台 接下来将函数部署到云平台: 修改 index.php 中的 $host 中的值 修改 template.yml LogConfig 中的 Project, 任意取一个不会重复的名字即可 修改 template.yml 自定义域名为自己提前准备好的域名 执行 fun deploy 登录控制台 https://fc.console.aliyun.com,可以看到service 和函数已经创建成功, 并且 service 也已经正确配置。 通过浏览器打开自己之前配置的域名, 比如本例中的 hz.mofangdegisn.cn mysql 版本数据库, 可以直接跟传统的 wordpress 一样,直接进入安装过程 sqlite3 版本数据库, 由于之前已经完成初始化,可以直接进入网站首页或网站后台 FAQ Q1: 函数计算能开发高性能高可用网站吗? A: 可以, 使用函数计算的单实例多并发功能和高性能数据库 单实例多并发 选择高性能关系型数据库,比如高可用的云数据库PolarDB 有必要再加上这些优化: 预留实例消除冷启动 + 预付费优化成本 极速型 NAS OSS 对象存储 + CDN 来存储和分发静态资源 目前 PHP Runtime 并不支持单实例多并发, 使用 Custom Runtime,可以将基于传统模式 nginx + php-fpm + mysql 开发的网站直接简单无缝迁移到函数计算平台,示例工程 customruntime-php 使用OSS对Wordpress进行图片动静分离 Q2: 使用低成本 sqlite3 版本的网站, 冷启动第一次打开很慢怎么办? A: 用一个 timer trigger 的函数 keep warm Q3: 使用低成本 sqlite3 版本的网站, 能支持多大的qps? A: 由 sqlite3 数据库性能决定, 这边有一些压测结果: image image 每次压力增大时候, 都有些冷启动,时间慢点,但是支持从压测结果来看支持 50 QPS 是没有疑问的, 是足够支持一些中小网站的。 Q4: 使用其他语言基于函数计算开发 serverless 网站可以吗? A: 可以, 比如 python: https://yq.aliyun.com/articles/603249 , 或者直接使用 custom runtime, 内置了 java、python 和 node, Custom Runtime 用户手册 , Custom Runtime 使用集锦

1934890530796658 2020-03-27 17:54:50 0 浏览量 回答数 0

回答

将json字符串转换为json对象的方法。在数据传输过程中,json是以文本,即字符串的形式传递的,而JS操作的是JSON对象,所以,JSON对象和JSON字符串之间的相互转换是关键.特别注意:如果obj本来就是一个JSON对象,那么使用eval()函数转换后(哪怕是多次转换)还是JSON对象,但是使用parseJSON()函数处理后会有问题(抛出语法异常)。二、可以使用toJSONString()或者全局方法JSON.stringify()将JSON对象转化为JSON字符串。注意:上面的几个方法中,除了eval()函数是js自带的之外,其他的几个方法都来自json.js包。新版本的 JSON 修改了 API,将 JSON.stringify() 和 JSON.parse() 两个方法都注入到了 Javascript 的内建对象里面,前者变成了 Object.toJSONString(),而后者变成了 String.parseJSON()。如果提示找不到toJSONString()和parseJSON()方法,则说明您的json包版本太低。

杨冬芳 2019-12-02 03:05:00 0 浏览量 回答数 0

回答

python使用对象模型来存储数据。构造任何类型的值都是一个对象。  所有python对象都拥有三个特性:身份、类型、值    身份:每个对象都有一个唯一的身份标识自己,任何对象的身份可以使用内建函数 id() 来得到。    类型:对象的类型决定了该对象可以保存什么类型的值,可以进行什么样的操作,以及遵循什么样的规则。可以使用 type() 函数查看python对象的类型。type()返回的是对象而不是简单的字符串。    值:对象表示的数据。这是我所知道的,希望对你有帮助,大家一起交流、补正!

小编发现 2019-12-02 01:10:49 0 浏览量 回答数 0

回答

字面值 Python在2008年引入二进制字面值。现在C++14也有了。【更新:Thiago Macieira在评论中指出,GCC实际上早在2007年就已经支持了。】`1 static const int primes = 0b10100000100010100010100010101100;`Python早在1998年引入了 原始字符串字面值。在硬编码正则表达式或Windows路径时很方便。 C++11也添加了同样的特性,只是语法上略有不同:`1 const char* path = R"(c:thisstringhasbackslashes)";`基于范围的For循环(Range-Based For Loops)在Python中,for循环总是迭代遍历一个Python对象: 1for x in myList: 2 print(x) 与此同时,在近30年里。C++仅支持C风格for循环。最后,在C++11中, 基于范围的for循环被添加进去。C++ 1for (int x : myList) 2 std::cout << x; 与Python迭代协议不同,你可以迭代一个 std::vector 或任何实现了begin和end成员函数的类。有了基于范围的for循环后,我经常发现自己希望C++能内建像Python的xrange函数一样的函数。自动化Python一直以来都是一个动态类型语言。你不需要声明变量类型,因为类型是对象本身的属性。`1x = "Hello world!"print(x)`从另一方面来说,C++不是动态类型语言。是静态类型。不过在C++11中将 auto 关键字 改作他用以用于类型推导,你能够写 看起来很像动态类型的代码:C++ 1 auto x = "Hello world!"; 2 std::cout << x; 当你调用重载几个类型的函数时,比如 std::ostream::operator<< 或者一个模板函数,C++更像一个动态类型语言。C++14进一步充实以支持auto关键字,为auto添加了 返回值支持和lambda函数 参数支持。元组 Python从一开始就很好的定义了元组类型。当你需要把几个值整合在一起的时候,元组就非常适合,这样就再不需要命名类来实现同样的功能了。 triple = (5, 6, 7) print(triple[0]) C++在C++11标准库中添加了对元组的支持。C++11的建议书 甚至还提到了这么做是受Python启发的:C++ auto triple = std::make_tuple(5, 6, 7); std::cout << std::get<0>(triple); Pyton允许你把一个元组解析为多个独立的变量:`x, y, z = triple`在C++里,你可以使用std::tie实现同样的功能:C++`std::tie(x, y, z) = triple;`统一的初始化 在Python里,列表是内置类型。因此,你可以只使用一个表达式来创建Python列表: myList = [6, 3, 7, 8] myList.append(5); C++的向量(std::vector)与Python的列表最为相似。如今,C++11里新增的 统一的初始化可以让我们只使用一个表达式来创建向量和列表了:C++ auto myList = std::vector<int>{ 6, 3, 7, 8 }; myList.push_back(5); 在Python里,你还可以只使用一个表达式来创建一个 字典: myDict = {5: "foo", 6: "bar"} print(myDict[5]) 与此类似,统一的初始化也适用于有序映射(std::map)和无序映射(unordered_map):C++ auto myDict = std::unordered_map<int, const char*>{ { 5, "foo" }, { 6, "bar" } }; std::cout << myDict[5]; Lambda表达式 Python从1994年开始支持lambda函数。`1 myList.sort(key = lambda x: abs(x))`Lambda表达式是在C++11中被添加进去。`1std::sort(myList.begin(), myList.end(), [](int x, int y){ return std::abs(x) < std::abs(y); });`2001年,Python添加了 静态嵌套作用域,可以让lambda函数抓取定义在封闭函数内的变量。 1def adder(amount): return lambda x: x + amount 2print(adder(5)(5)) 同样,C++ lambda表达式支持一堆灵活的 抓取规则,可以让你做相似的事情: auto adder(int amount) { return [=](int x){ return x + amount; }; } std::cout << adder(5)(5); 标准算法Python内建 filter 函数可以让你有选择的从一个列表中拷贝项(虽然列表解析是首先):`1result = filter(lambda x: x >= 0, myList)`C++11中 引入了 std::copy_if ,让你可以使用一个类似的、相当功能的类型: auto result = std::vector<int>{}; std::copy_if(myList.begin(), myList.end(), std::back_inserter(result), [](int x){ return x >= 0; }); 其他的C++ 算法模仿了Python的内建函数包括 transform、 any_of、 all_of, min 以及 max。即将到来的 范围提案有潜力进一步简化这些表达式。 参数打包Python 从 1988 年就开始支持任意长度的参数列表. 你可以定义一个函数接受任意数量的实参,Python 会将他们放到一个元组(tuple)中, 你还可以将这个元组重新展开为一个实参列表,并把他们传递进另一个函数: def foo(*args): return tuple(*args) ... triple = foo(5, 6, 7) C++11 引入了对 参数包(parameter packs) 的支持. 它类似于 Python 的任意长度参数列表,而不同于 C 风格的可变参数列表, 这个参数包有自己的标识符来表示整个实参序列。关键区别在于:在 C++ 中,这个参数包不能在运行时做为一个单独的对象来操作。你只能通过模板元编程技术在编译时来操纵他们。 template <typename... T> auto foo(T&&... args) { return std::make_tuple(args...); } ...auto triple = foo(5, 6, 7); 并非所有的 C++ 11 和 14 中的特性都借鉴于 Python。只是其中很大一部分特性看似如此。 Python 被认为是一种对使用者亲近友好的编程语言。随着时间的推移以及这些特性逐渐被其他语言借鉴,它其中一些特质也逐渐暗淡下来。

a123456678 2019-12-02 01:56:27 0 浏览量 回答数 0

回答

1.字符串转义序列转义字符 描述(在行尾时) 续行符\ 反斜杠符号' 单引号" 双引号a 响铃b 退格(Backspace)e 转义000 空n 换行v 纵向制表符t 横向制表符r 回车f 换页oyy 八进制数yy代表的字符,例如:o12代表换行xyy 十进制数yy代表的字符,例如:x0a代表换行other 其它的字符以普通格式输出 2.字符串格式化 3.操作符 一、算术运算符 注意: 双斜杠 // 除法总是向下取整。 从符点数到整数的转换可能会舍入也可能截断,建议使用math.floor()和math.ceil()明确定义的转换。 Python定义pow(0, 0)和0 ** 0等于1。 二、比较运算符 运算符 描述< 小于<= 小于或等于 大于= 大于或等于== 等于 != 不等于is 判断两个标识符是不是引用自一个对象is not 判断两个标识符是不是引用自不同对象注意: 八个比较运算符优先级相同。 Python允许x < y <= z这样的链式比较,它相当于x < y and y <= z。 复数不能进行大小比较,只能比较是否相等。 三、逻辑运算符 运算符 描述 备注x or y if x is false, then y, elsex x andy if x is false, then x, elsey not x if x is false, then True,elseFalse 注意: or是个短路运算符,它只有在第一个运算数为False时才会计算第二个运算数的值。 and也是个短路运算符,它只有在第一个运算数为True时才会计算第二个运算数的值。 not的优先级比其他类型的运算符低,所以not a == b相当于not (a == b),而 a == not b是错误的。 四、位运算符 运算符 描述 备注x | y 按位或运算符 x ^ y 按位异或运算符 x & y 按位与运算符 x << n 左移动运算符 x >> n 右移动运算符 ~x 按位取反运算符 五、赋值运算符 复合赋值运算符与算术运算符是一一对应的: 六、成员运算符 Python提供了成员运算符,测试一个元素是否在一个序列(Sequence)中。 运算符 描述in 如果在指定的序列中找到值返回True,否则返回False。not in 如果在指定的序列中没有找到值返回True,否则返回False。 4.关键字总结 Python中的关键字包括如下: and del from not while as elif global or with assert else if pass yield break except import print class exec in raise continue finally is return def for lambda try你想看看有哪些关键字?OK,打开一个终端,就像这样~ long@zhouyl:~$ pythonPython 2.7.3 (default, Jan 2 2013, 16:53:07) [GCC 4.7.2] on linux2Type "help", "copyright", "credits" or "license" for more information. import keywordkeyword.kwlist ['and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'exec', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'not', 'or', 'pass', 'print', 'raise', 'return', 'try', 'while', 'with', 'yield'] ============================== 华丽的 正文分隔符 ======================================== 看到这些关键字你还能记得多少?你不妨自己一个一个对照想想它的用法,下面是我总结的,我根据前面的学习笔记将上述关键字分为以下几类: 1.判断、循环 对于Python的循环及判断主要包括这些关键字: if elif else for while break continue and or is not in 这几个关键字在前面介绍 if 语法、while语法、for语法以及and...or语法中已有介绍,下面再一笔带过: 1.1 if 语法 if语法与C语言、shell脚本之下的非常类似,最大的区别就是冒号以及严格的缩进,当然这两点也是Python区别于其他语言的地方: if condition1: do something elif condition2: do another thing else: also do something 1.2 while 语法 Python的while语法区别于C、shell下的while除了冒号及缩进之外,还有一点就是while可以携带一个可选的else语句: while condition: do something else: do something 注:else语句是可选的,但是使用while语句时一定要注意判断语句可以跳出! 1.3 for 语法 与while类似,Python的for循环也包括一个可选的else语句(跳出for循环时执行,但是如果是从break语句跳出则不执行else语句块中的代码!),而且for 加上 关键字in就组成了最常见的列表解析用法(以后会写个专门的博客)。 下面是for的一般用法: for i in range(1,10,2): do something if condition: break else: do something for的列表解析用法: for items in list: print items 1.4 and...or 语法 Python的and/or操作与其他语言不同的是它的返回值是参与判断的两个值之一,所以我们可以通过这个特性来实现Python下的 a ? b : c ! 有C语言基础的知道 “ a ? b : c ! ” 语法是判断 a,如果正确则执行b,否则执行 c! 而Python下我们可以这么用:“ a and b or c ”(此方法中必须保证b必须是True值),python自左向右执行此句,先判断a and b :如果a是True值,a and b语句仍需要执行b,而此时b是True值!所以a and b的值是b,而此时a and b or c就变成了b or c,因b是True值,所以b or c的结果也是b;如果a是False值,a and b语句的结果就是a,此时 a and b or c就转化为a or c,因为此时a是 False值,所以不管c是True 还是Flase,a or c的结果就是c!!!捋通逻辑的话,a and b or c 是不是就是Python下的a ? b : c ! 用法? 1.5 is ,not is 和 is not 是Python下判断同一性的关键字,通常用来判断 是 True 、False或者None(Python下的NULL)! 比如 if alue is True : ... (不记得本节的童鞋罚复习:python 学习笔记 2 -- 判断语句) 2.函数、模块、类 对于Python的函数及模块主要包括这些关键字: from import as def pass lambda return class 那么你还能记得它们么?下面简单介绍一下: 2.1 模块 Python的编程通常大量使用标准库中的模块,使用方法就是使用import 、from以及as 关键字。 比如: import sys # 导入sys模块 from sys import argv # 从sys模块中导入argv ,这个在前面介绍脚本传参数时使用到 import cPickle as p # 将cPickle模块导入并在此将它简单命名为p,此后直接可以使用p替代cPickle模块原名,这个在介绍文件输入输出时的存储器中使用到 2.2 函数 Python中定义函数时使用到def关键字,如果你当前不想写入真实的函数操作,可以使用pass关键字指代不做任何操作: def JustAFunction: pass 当然,在需要给函数返回值时就用到了return关键字,这里简单提一下Python下的函数返回值可以是多个(接收返回值时用相应数量的变量接收!)! 此外Python下有个神奇的Lambda函数,它允许你定义单行的最小函数,这是从Lisp中借用来的,可以用在任何需要函数的地方。比如: g = lambda x : x*2 # 定义一个Lambda函数用来计算参数的2倍并返回! print g(2) # 使用时使用lambda函数返回的变量作为这个函数的函数名,括号中带入相应参数即可! (不记得本节的童鞋罚复习:python 学习笔记 4 -- 函数篇) 3.异常 对于Python的异常主要包括这些关键字: try except finally raise 异常这一节还是比较简单的,将可能出现的异常放在 try: 后面的语句块中,使用except关键字捕获一定的异常并在接下来的语句块中做相应操作,而finally中接的是无论出现什么异常总在执行最后做finally: 后面的语句块(比如关闭文件等必要的操作!) raise关键字是在一定的情况下引发异常,通常结合自定义的异常类型使用。 (不记得本节的童鞋罚复习:python 学习笔记 6 -- 异常处理) 4.其他 上面的三类过后,还剩下这些关键字: print del global with assert yield exec 首先print 在前面的笔记或者任何地方你都能见到,所以还是比较熟悉的,此处就不多介绍了!del 关键字在前面的笔记中已有所涉及,比如删除列表中的某项,我们使用 “ del mylist[0] ” 可能这些剩下来的关键字你比较陌生,所以下面来介绍一下: 4.1.global 关键字 当你在函数定义内声明变量的时候,它们与函数外具有相同名称的其他变量没有任何关系,即变量名称对于函数来说是 局部 的。这称为变量的 作用域 。所有变量的作用域是它们被定义的块,从它们的名称被定义的那点开始。 eg. ? 1 2 3 4 5 6 7 8 9 10 11 !/usr/bin/python Filename: func_local.py def func(x): print'x is', x x = 2 print'Changed local x to', x x = 50 func(x) print'x is still', x 运行的结果是这样的:? 1 2 3 4 $ python func_local.py x is 50 # 运行func函数时,先打印x的值,此时带的值是作为参数带入的外部定义的50,所以能正常打印 x=50 Changed local x to 2 # 在func函数中将x赋2,并打印 x is still 50 # 运行完func函数,打印x的值,此时x的值仍然是之前赋给的50,而不是func函数中修改过的2,因为在函数中修改的只是函数内的局部变量 那么为什么我们要在这提到局部变量呢?bingo,聪明的你一下就猜到这个global就是用来定义全局变量的。也就是说如果你想要为一个在函数外定义的变量赋值,那么你就得告诉Python这个变量名不是局部的,而是 全局 的。我们使用global语句完成这一功能。没有global语句,是不可能为定义在函数外的变量赋值的。eg.? 1 2 3 4 5 6 7 8 9 10 11 12 !/usr/bin/python Filename: func_global.py def func(): global x print'x is', x x = 2 print'Changed local x to', x x = 50 func() print'Value of x is', x 运行的结果是这样的:? 1 2 3 4 $ python func_global.py x is 50 Changed global x to 2 Value of x is 2 # global语句被用来声明x是全局的——因此,当我们在函数内把值赋给x的时候,这个变化也反映在我们在主块中使用x的值的时候。 你可以使用同一个global语句指定多个全局变量。例如global x, y, z。 4.2.with 关键字 有一些任务,可能事先需要设置,事后做清理工作。对于这种场景,Python的with语句提供了一种非常方便的处理方式。一个很好的例子是文件处理,你需要获取一个文件句柄,从文件中读取数据,然后关闭文件句柄。如果不用with语句,打开一个文件并读文件的代码如下:? 1 2 3 file = open("/tmp/foo.txt") data = file.read() file.close() 当然这样直接打开有两个问题:一是可能忘记关闭文件句柄;二是文件读取数据发生异常,没有进行任何处理。下面是添加上异常处理的版本:? 1 2 3 4 5 file = open("/tmp/foo.txt") try: data = file.read() finally: file.close() 虽然这段代码运行良好,但是太冗余了。这时候就是with一展身手的时候了。除了有更优雅的语法,with还可以很好的处理上下文环境产生的异常。下面是with版本的代码:? 1 2 with open("/tmp/foo.txt") as file: data = file.read() 这看起来充满魔法,但不仅仅是魔法,Python对with的处理还很聪明。基本思想是with所求值的对象必须有一个__enter__()方法,一个__exit__()方法。with语句的执行逻辑如下:紧跟with后面的语句被求值后,返回对象的__enter__()方法被调用,这个方法的返回值将被赋值给as后面的变量。当with后面的代码块全部被执行完之后,将调用前面返回对象的__exit__()方法。 下面例子可以具体说明with如何工作:? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 !/usr/bin/python with_example01.py classSample: def __enter__(self): print"In __enter__()" return"Foo" def __exit__(self, type, value, trace): print"In __exit__()" def get_sample(): returnSample() with get_sample() as sample: print"sample:", sample 运行代码,输出如下? 1 2 3 4 $python with_example01.py In __enter__() # __enter__()方法被执行 sample: Foo # __enter__()方法返回的值 - 这个例子中是"Foo",赋值给变量'sample',执行代码块,打印变量"sample"的值为"Foo" In __exit__() # __exit__()方法被调用 4.3.assert 关键字 assert语句是一种插入调试断点到程序的一种便捷的方式。assert语句用来声明某个条件是真的,当assert语句失败的时候,会引发一AssertionError,所以结合try...except我们就可以处理这样的异常。 mylist # 此时mylist是有三个元素的列表['a', 'b', 'c']assert len(mylist) is not None # 用assert判断列表不为空,正确无返回assert len(mylist) is None # 用assert判断列表为空 Traceback (most recent call last): File "", line 1, in AssertionError # 引发AssertionError异常 4.4.yield 关键字 我们先看一个示例:? 1 2 3 4 5 6 7 8 def fab(max): n, a, b = 0,0,1 whilen < max: yield b # print b a, b = b, a + b n = n + 1 ''' 使用这个函数:? 1 2 3 4 5 6 7 8 forn in fab(5): ... print n ... 1 1 2 3 5 简单地讲,yield 的作用就是把一个函数变成一个 generator(生成器),带有 yield 的函数不再是一个普通函数,Python 解释器会将其视为一个 generator,调用 fab(5) 不会执行 fab 函数,而是返回一个 iterable(可迭代的)对象!在 for 循环执行时,每次循环都会执行 fab 函数内部的代码,执行到 yield b 时,fab 函数就返回一个迭代值,下次迭代时,代码从 yield b 的下一条语句继续执行,而函数的本地变量看起来和上次中断执行前是完全一样的,于是函数继续执行,直到再次遇到 yield。也可以手动调用 fab(5) 的 next() 方法(因为 fab(5) 是一个 generator 对象,该对象具有 next() 方法),这样我们就可以更清楚地看到 fab 的执行流程:? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 f = fab(5) f.next() 1 f.next() 1 f.next() 2 f.next() 3 f.next() 5 f.next() Traceback (most recent call last): File"", line 1, in StopIteration 当函数执行结束时,generator 自动抛出 StopIteration 异常,表示迭代完成。在 for 循环里,无需处理 StopIteration 异常,循环会正常结束。 我们可以得出以下结论:一个带有 yield 的函数就是一个 generator,它和普通函数不同,生成一个 generator 看起来像函数调用,但不会执行任何函数代码,直到对其调用 next()(在 for 循环中会自动调用 next())才开始执行。虽然执行流程仍按函数的流程执行,但每执行到一个 yield 语句就会中断,并返回一个迭代值,下次执行时从 yield 的下一个语句继续执行。看起来就好像一个函数在正常执行的过程中被 yield 中断了数次,每次中断都会通过 yield 返回当前的迭代值。 yield 的好处是显而易见的,把一个函数改写为一个 generator 就获得了迭代能力,比起用类的实例保存状态来计算下一个 next() 的值,不仅代码简洁,而且执行流程异常清晰。 注:如果看完此段你还未明白yield,没问题,因为yield是初学者的一个难点,那么你下一步需要做的就是……看一看下面参考资料中给的关于yield的博文! 4.5.exec 关键字 官方文档对于exec的解释: "This statement supports dynamic execution of Python code."也就是说使用exec可以动态执行Python代码(也可以是文件)。? 1 2 3 4 5 6 7 8 9 10 11 12 13 longer = "print "Hello World ,my name is longer"" # 比如说我们定义了一个字符串 longer 'print "Hello World ,my name is longer"' exec(longer) # 使用exec 动态执行字符串中的代码 Hello World ,my name is longer exec(sayhi) # 使用exec直接打开文件名(指定sayhi,sayhi.py以及"sayhi.py"都会报一定的错,但是我觉得直接带sayhi报错非常典型) Traceback (most recent call last): File"", line 1, in TypeError: exec: arg 1must be a string, file, or code object # python IDE报错,提示exec的第一个参 数必须是一个字符串、文件或者一个代码对象 f = file("sayhi.py") # 使用file打开sayhi.py并创建f实例 exec(f) # 使用exec直接运行文件描述符f,运行正常!! Hi,thisis [''] script 上述给的例子比较简单,注意例子中exec语句的用法和eval_r(), execfile()是不一样的. exec是一个关键字(要不然我怎么会在这里介绍呢~~~), 而eval_r()和execfile()则是内建函数。更多关于exec的使用请详看引用资料或者Google之 在需要在字符中使用特殊字符时,python用反斜杠()转义字符。 原始字符串 有时我们并不想让转义字符生效,我们只想显示字符串原来的意思,这就要用r和R来定义原始字符串。如: print r’tr’ 实际输出为“tr”。 转义字符 描述 (在行尾时) 续行符 反斜杠符号 ’ 单引号 ” 双引号 a 响铃 b 退格(Backspace) e 转义 000 空 n 换行 v 纵向制表符 t 横向制表符 r 回车 f 换页 oyy 八进制数yy代表的字符,例如:o12代表换行 xyy 十进制数yy代表的字符,例如:x0a代表换行 other 其它的字符以普通格式输出

xuning715 2019-12-02 01:10:21 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 使用数据传输服务 (DTS) 将本地数据库迁移到 RDS for SQL Server,可以实现应用不停服务的情况下,平滑完成数据库的迁移工作。 背景信息 DTS 支持 SQL Server 数据结构迁移和全量迁移。 结构迁移 DTS 会将本地数据库的结构定义迁移到目标实例。目前DTS支持结构迁移的对象有:表、视图、表触发器、同义词、SQL 存储过程、SQL 函数、自定义类型、plan guid、rule、default。 全量迁移 DTS 会将本地数据库迁移对象的数据全部迁移到目标实例。如果在迁移过程中有增量更新的话,这些增量不会被迁移到目标库。所以建议在业务无写入时,使用 DTS 进行全量数据迁移。 迁移限制 将本地数据库迁移到 RDS 上有以下限制: 迁移过程中,不支持 DDL 操作。 结构迁移不支持 assemblies、库级存储过程、service broker、全文索引、全文目录、分布式 schema、分布式函数、CLR 标量函数、CLR 标值函数、内部表、聚合函数和系统的迁移。 如果使用了对象名映射功能后,依赖这个对象的其他对象可能迁移失败。 前提条件 已完成 RDS 实例数据库的准备,可参见设置内外网地址 和 创建数据库和账号SQL Server 2008 R2版。 操作步骤 本例以有公网 IP 的本地数据库迁移到 RDS 上为例。 准备本地数据 在正式迁移之前,需要先在本地数据库和RDS实例中创建迁移账号,并在RDS实例中创建要迁移的数据库,并将要迁移的数据库的读写权限授权给迁移账号。不同的迁移类型需要不同的权限,如下表所示。 迁移类型 结构迁移 全量迁移 本地数据库 select select RDS 实例 读写权限 读写权限 在本地数据库中创建迁移账号。create login username with password='password', default_database=mydb; go create user username for login username with default_schema=dbo; go参数说明: username:要创建的账号 password:该账号的登录密码 mydb:默认连接的数据库 dbo:默认的数据表 例:要创建账号为 William,密码为 Changme123 的账号访问数据 mydb 的数据表 dbo,命令如下: create login William with password='Changme123', default_database=mydb; go create user William for login William with default_schema=dbo; go 在本地数据库中给迁移账号授权,本地数据库中迁移账号的权限要求请参见上表。GRANT privileges ON tablename TO username WITH GRANT OPTION;参数说明: privileges:该账号的操作权限,如 SELECT、INSERT、UPDATE 等。如果要授权该账号所有权限,则使用 ALL tablename:表名。如果要授权该账号所有的表权限,则使用通配符 * username:要授权的账号名 WITH GRANT OPTION:授权该账号能使用GRANT命令,该参数为可选 例:授权账号 William 对所有数据库和表的所有权限,命令如下: GRANT ALL ON* TO William; 正式迁移操作 在 RDS 管理控制台 上单击迁移数据库,进入DTS,如下图所示。 单击创建在线迁移任务,进入创建迁移任务页面,如下图所示。 输入任务名称、本地数据库信息和目标数据库信息,单击授权白名单并进入下一步,如下图所示。 任务名称:自定义任务名称,可以保持默认值 源库信息 实例类型:本地数据库的实例类型,可以选择 有公网 IP 的自建数据库、ECS 上的自建数据库、RDS 实例、云数据库 MongoDB。 数据库类型:本地数据库的类型,可以选择 Oracle、MySQL、SQLServer、PostgreSQL、MongoDB。 主机名或IP地址:本地数据库的公网地址。 端口:本地数据库的公网端口。 账号:本地数据库的迁移账号。 密码:本地数据库迁移账号对应的密码。 目标库信息 实例类型:默认为 RDS 实例。 RDS实例ID:目标 RDS 实例的 ID。单击下拉菜单将自动联想当前登录管理控制台的账号的 RDS 实例,点击选择所需要的实例。 数据库名称:要迁移到目标数据库的名称。 账号:目标 RDS 数据库的迁移账号。 密码:目标 RDS 数据库迁移账号对应的密码。 择迁移类型,并在迁移对象中选择要迁移的对象,单击>将要迁移的对象放入已选择中,单击预检查并启动,如下图所示。 说明 数据迁移只会将本地数据库的数据(结构)复制一份到目标数据库,并不会对本地数据库数据(结构)造成影响 数据迁移过程中,不支持DDL操作,如进行DDL操作可能导致迁移失败 DTS增量迁移的时间最长支持15天,如果超过15天不停止任务,系统资源可能被回收 如果要修改迁移对象在目标数据库上的名字,可以在已选择列表右侧单击编辑 ,修改已选择的对象名称,如上图中4所示。 说明 以下以预检查不通过为例进行描述,如果预检查通过,请直接参见步骤 8。 系统显示预检查结果,如下图所示。 单击检测结果为失败的检测项后的!,查看失败详细信息,根据失败详细信息完成错误排查。 错误排查完毕后,在迁移任务列表页面,选择当前迁移任务,单击启动,如下图所示。 系统预检查通过后,单击确定,自动进行迁移任务,如下图所示。 后续操作 为了保证本地数据库安全,请在数据迁移完成后,删除本地数据库和 RDS 实例中的迁移账号。

2019-12-01 22:57:13 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档Android API Android SDK最新版本v3.0.11。 Android参考Demo。 API索引: 1. CloudPushSDK接口 1.1 基本设置 SDK注册SDK动态注册启动信息统计获取设备标识设置日志等级动态设置appKey动态设置appSecret打开推送通道关闭推送通道查询推送通道状态设置接收消息IntentService 1.2 账号API 绑定账号解绑账号 1.3 标签API 绑定标签解绑标签查询标签 1.4 别名API 添加别名删除别名查询别名 1.5 通知设置API 设置通知声音设置通知栏图标设置状态栏图标设置免打扰时段关闭免打扰功能删除所有通知接口 1.6 自建通知统计上报API 自建通知点击上报接口自建通知删除上报接口 1.7 电话API 绑定电话解绑电话 2. MessageReceiver/AliyunMessageIntentService相关接口 2.1 消息接收回调2.2 通知接收回调2.3 通知打开回调2.4 无跳转逻辑通知打开回调2.5 通知在应用内到达回调 3. 自定义样式通知相关接口 3.1 客户端设置通知样式3.2 后端推送消息时添加自定义样式id3.3 Example BasicCustomNotification ExampleAdvancedCustomNotification ExampleOpenAPI Example 3.4 BacisCustomNotificaiton API 默认构造函数构造函数获取状态栏图标设置状态栏图标获取提醒方式设置提醒方式获取Notification Flags参数设置Notificaiton Flags参数获取是否服务端设置优先设置是否服务端优先获取推送前台到达否创建通知参数设置推送前台到达否创建通知参数 3.5 AdvancedCustomNotification API 构造函数设置通知图标获取通知图标 3.6 CustomNotificationBuilder API 获取CustomNotificationBuilder实例注册自定义样式通知 1. CloudPushService接口 以下接口调用时,如有回调,均为异步执行,且回调不能为空。 1.1基本设置 SDK注册 初始化推送SDK,关联到云通道。 参数 context 应用上下文(需要ApplicationContext)callback 回调 void register(Context context, CommonCallback callback); SDK动态注册接口 支持动态设置appKey,appSecret的注册接口 参数 context 应用上下文(需要ApplicationContext)appKey appSecretcallback 回调 void register(Context context, String appKey, String appSecret, CommonCallback callback); 启动信息统计 统计App启动信息。 void onAppStart(); 获取设备标识 获取设备唯一标识。 返回 设备唯一标识。 String getDeviceId(); 设置日志等级 需要在通道初始化之前设置;默认日志等级为CloudPushService.ERROR; 参数 logLevel 支持设置:CloudPushService.ERROR | CloudPushService.INFO | CloudPushService.DEBUG | CloudPushService.OFF(关闭Log) void setLogLevel(int logLevel); V2.3.6及以上版本支持)" class="reference-link">动态设置appKey(V2.3.6及以上版本支持) 动态设置appKey无需在manifest配置appKey务必在调用register注册接口之前调用该接口,否则动态设置失效 参数 appKey 需要设置的appKey void setAppKey(String appKey); V2.3.6及以上版本支持)" class="reference-link">动态设置appSecret(V2.3.6及以上版本支持) 动态设置appSecret无需在manifest配置appSecret务必在调用register注册接口之前调用该接口,否则动态设置失效 参数 appSecret 需要设置的appSecret void setAppSecret(String appSecret); V3.0.3及以上版本支持)" class="reference-link">打开推送通道(V3.0.3及以上版本支持) 用于在程序运行时动态打开推送通道全量推送场景下,打开推送通道存在2-3小时延迟。其他场景实时生效 参数 callback 回调 void turnOnPushChannel(CommonCallback callback); V3.0.3及以上版本支持)" class="reference-link">关闭推送通道(V3.0.3及以上版本支持) 用于在程序运行时动态关闭推送通道全量推送场景下,关闭推送通道存在2-3小时延迟。其他场景实时生效 参数 callback 回调 void turnOffPushChannel(CommonCallback callback); V3.0.3及以上版本支持)" class="reference-link">查询推送通道状态(V3.0.3及以上版本支持) app运行时查询当前推送通道状态如果当前为打开状态,则通过callback.success(String response)回调传入’on’;反之则传入’off’ 参数 callback 回调 void checkPushChannelStatus(CommonCallback callback); V3.0.10及以上版本支持)" class="reference-link">设置消息接收IntentService(V3.0.10及以上版本支持) 通过IntentService组件接收消息回调设置后消息将通过该组件透出,不再通过MessageReceiver设置的IntentService需继承com.alibaba.sdk.android.push.AliyunMessageIntentService,并覆写相关回调方法 参数 messageIntentService 自定义接收消息IntentService的class void setPushIntentService(Class messageIntentService); 1.2 账号API 绑定账号 将应用内账号和推送通道相关联,可以实现按账号的定点消息推送;设备只能绑定一个账号,同一账号可以绑定到多个设备;同一设备更换绑定账号时无需进行解绑,重新调用绑定账号接口即可生效;若业务场景需要先解绑后绑定,在解绑账号成功回调中进行绑定绑定操作,以此保证执行的顺序性;账户名设置支持64字节。 参数 account 绑定账号名callback 回调 void bindAccount(String account, CommonCallback callback); 解绑账号 将应用内账号和推送通道取消关联。 参数 callback 回调 void unbindAccount(CommonCallback callback); 1.3 标签API 绑定标签 绑定标签到指定目标;支持向设备、账号和别名绑定标签,绑定类型由参数target指定;绑定标签在10分钟内生效;App最多支持绑定1万个标签,单个标签最大支持128字符。 参数 target 目标类型,1:本设备; 2:本设备绑定账号; 3:别名target(V2.3.5及以上版本) 目标类型,CloudPushService.DEVICE_TARGET:本设备; CloudPushService.ACCOUNT_TARGET:本账号; CloudPushService.ALIAS_TARGET:别名tags 标签(数组输入)alias 别名(仅当target = 3时生效)callback 回调 void bindTag(int target, String[] tags, String alias, CommonCallback callback); 解绑标签 解绑指定目标标签;支持解绑设备、账号和别名标签,解绑类型由参数target指定;解绑标签在10分钟内生效;解绑标签只是解除设备和标签的绑定关系,不等同于删除标签,即该APP下标签仍然存在,系统目前不支持标签的删除。 参数 target 目标类型,1:本设备; 2:本设备绑定账号; 3:别名。target(V2.3.5及以上版本) 目标类型,CloudPushService.DEVICE_TARGET:本设备; CloudPushService.ACCOUNT_TARGET:本账号; CloudPushService.ALIAS_TARGET:别名tags 标签(数组输入)alias 别名(仅当target = 3时生效)callback 回调 void unbindTag(int target, String[] tags, String alias, CommonCallback callback); 查询标签 查询目标绑定标签,当前仅支持查询设备标签;查询结果可从回调onSuccess(response)的response获取;标签绑定成功且生效(10分钟内)后即可查询。 参数 target 目标类型,1: 本设备target(V2.3.5及以上版本) 目标类型,CloudPushService.DEVICE_TARGET:本设备;callback 回调 void listTags(int target, CommonCallback callback); 1.4 别名API 添加别名 设备添加别名;单个设备最多添加128个别名,且同一别名最多添加到128个设备;别名支持128字节。 参数 alias 别名callback 回调 void addAlias(String alias, CommonCallback callback); 删除别名 删除设备别名;支持删除指定别名和删除全部别名(alias = null || alias.length = 0)。 参数 alias 别名(alias = null or alias.length = 0时,删除设备全部别名)callback 回调 void removeAlias(String alias, CommonCallback callback); 查询别名 查询设备别名;查询结果可从回调onSuccess(response)的response中获取;从V3.0.9及以上版本开始,接口内部有5s短缓存,5s内多次调用只会请求服务端一次。 参数 callback 回调 void listAliases(CommonCallback callback); 1.5 通知设置API 设置通知声音 设置推送通知声音文件路径;若不调用本接口,默认获取资源id为R.raw.alicloud_notification_sound的资源文件;若没有获取到指定声音文件,取设备设置的消息声音。 参数 filePath 通知声音文件路径 void setNotificationSoundFilePath(String filePath); 设置通知栏图标 设置推送通知栏图标资源Bitmap。若不调用本接口,默认获取id为R.drawable.alicloud_notification_largeIcon的资源文件;若没有获取到指定图标文件,取App启动图标。 参数 icon 图标资源Bitmap void setNotificationLargeIcon(Bitmap icon); 设置状态栏图标 设置推送状态栏图标资源Id;若不调用本接口,默认获取id为R.drawable.alicloud_notification_smallIcon的资源文件;若没有获取到指定资源文件Id,取App启动图标。 参数 iconId 图标资源Id void setNotificationSmallIcon(int iconId); 设置免打扰时段 设置免打扰时间段,过滤所有通知与消息;免打扰时段仅支持设置一次,多次调用以最后一次调用设置时段为准;设置免打扰时段为00:00 - 00:00,可取消免打扰功能;(以下功能支持该用法,V2.3.5及以上版本使用关闭免打扰功能接口)全天免打扰可以设置为”0:0-23:59”免打扰时段设置对小米辅助弹窗通知无效。 参数 startHour 免打扰的起始时间(小时),24小时制,取值范围:0-23startMinute 免打扰起始时间(分钟),取值范围:0-59endHour 免打扰的结束时间(小时),24小时制,取值范围:0-23endMinute 免打扰结束时间(分钟),取值范围:0-59 void setDoNotDisturb(int startHour, int startMinute, int endHour, int endMinute, CommonCallback callback); V2.3.5及以上版本支持)" class="reference-link">关闭免打扰功能(V2.3.5及以上版本支持) 关闭后,先前设置的免打扰时段失效免打扰功能默认是关闭的没有对应的开发免打扰功能接口,调用设置免打扰功能时段功能后自动打开免打扰功能 void closeDoNotDisturbMode(); V2.3.7及以上版本支持)" class="reference-link">删除所有通知接口(V2.3.7及以上版本支持) 删除推送SDK创建的所有通知若需要实现精准删除特定通知可以在onNotification回调中获取通知id,自行删除 void clearNotifications(); V3.0.6及以上版本支持)" class="reference-link">1.6 自建通知统计上报API(V3.0.6及以上版本支持) 本接口主要针对统计用户自建通知(通过阿里云推送发送透传消息,并在onMessage回调中自行创建通知)的删除/点击事件上报,其相关实现可以参考移动推送Android SDK:透传消息+用户自建通知最佳实践,如果您直接通过阿里云推送通知,无需使用相关接口。 自建通知点击上报接口 上报自建通知的点击事件请确保同一消息仅上报一次 参数 message 要上报点击事件的消息实例 void clickMessage(CPushMessage message); 自建通知删除上报接口 上报自建通知的删除事件请确保同一消息仅上报一次 参数 message 要上报删除事件的消息实例 void dismissMessage(CPushMessage message); V3.0.11及以上版本支持)" class="reference-link">1.7 电话API(V3.0.11及以上版本支持) 为提高信息的到达率和实效性,扩展推送的使用场景,我们推出了推送与短信的融合通知模式。开发者可以设置在一定时间内,如果用户未收到或未点击推送,通过短信补发通知用户。具体方案可参考:推送短信融合。 为实现推送短信融合方案,需要在终端接入绑定/解绑电话号接口,接口详情如下。 绑定电话号将设备与电话号绑定 参数 phoneNumber 要绑定的手机号callback 回调 void bindPhoneNumber(String phoneNumber, CommonCallback callback); 解绑电话号解除当前设备与电话号的绑定关系 参数 callback 回调 void unbindPhoneNumber(CommonCallback callback); 2. MessageReceiver/AliyunMessageIntentService 通过继承MessageReciever,可以拦截通知,接收消息,获取推送中的扩展字段。或者在通知打开或删除的时候,切入进行后续处理。如果调用了setPushIntentService,则需继承com.alibaba.sdk.android.push.AliyunMessageIntentService,并覆写相关方法,AliyunMessageIntentService所有消息回调同MessageReceiver一致。 使用方法: MessageReceiver 继承com.alibaba.sdk.android.push.MessageReceiver;在Manifest中找到原来MessageReceiver的配置,将上边的class替换成你自己的receiver[不要配置多个]。 <!--消息接收监听器--><receiver android:name="com.alibaba.sdk.android.push.MessageReceiver <-- 把这里替换成你自己的receiver"> <intent-filter> <action android:name="com.alibaba.push2.action.NOTIFICATION_OPENED"/> </intent-filter> ... ...</receiver> AliyunMessageIntentService 继承com.alibaba.sdk.android.push.AliyunMessageIntentService并覆写相关方法在Manifest中注册该service <service android:name="MyPushIntentService" > <intent-filter> <action android:name="com.alibaba.push2.action.NOTIFICATION_OPENED" /> </intent-filter> <intent-filter> <action android:name="com.alibaba.push2.action.NOTIFICATION_REMOVED" /> </intent-filter> <intent-filter> <action android:name="com.alibaba.sdk.android.push.RECEIVE" /> </intent-filter> </service> 消息接收回调 用于接收服务端推送的消息。消息不会弹窗,而是回调该方法。 参数 context 上下文环境message CPushMessage类型,可以获取消息Id、消息标题和内容。 void onMessage(Context context, CPushMessage message); 通知接收回调 客户端接收到通知后,回调该方法。可获取到并处理通知相关的参数。 参数 context 上下文环境title 通知标题summary 通知内容extraMap 通知额外参数,包括部分系统自带参数: _ALIYUN_NOTIFICATION_ID_(V2.3.5及以上):创建通知对应id_ALIYUN_NOTIFICATION_PRIORITY_(V2.3.5及以上):创建通知对应id。默认不带,需要通过OpenApi设置 void onNotification(Context context, String title, String summary, Map<String, String> extraMap) 通知打开回调 打开通知时会回调该方法,通知打开上报由SDK自动完成。 参数 context 上下文环境title 通知标题summary 通知内容extraMap 通知额外参数,包括部分系统自带参数: _ALIYUN_NOTIFICATION_ID_(V2.3.5及以上):创建通知对应id_ALIYUN_NOTIFICATION_PRIORITY_(V2.3.5及以上):创建通知对应id。默认不带,需要通过OpenApi设置 void onNotificationOpened(Context context, String title, String summary, String extraMap); 无跳转逻辑通知打开回调 打开无跳转逻辑(open=4)通知时回调该方法(v2.3.2及以上版本支持),通知打开上报由SDK自动完成。 参数 context 上下文环境title 通知标题summary 通知内容extraMap 通知额外参数,包括部分系统自带参数: _ALIYUN_NOTIFICATION_ID_(V2.3.5及以上):创建通知对应id_ALIYUN_NOTIFICATION_PRIORITY_(V2.3.5及以上):创建通知对应id。默认不带,需要通过OpenApi设置 void onNotificationClickedWithNoAction(Context context, String title, String summary, String extraMap); 通知删除回调 删除通知时回调该方法,通知删除上报由SDK自动完成。 参数 context 上下文环境messageId 删除通知的Id void onNotificationRemoved(Context context, String messageId); 通知在应用内到达回调 当用户创建自定义通知样式,并且设置推送应用内到达不创建通知弹窗时调用该回调,且此时不调用onNotification回调(v2.3.3及以上版本支持) 参数 context 上下文环境title 通知标题summary 通知内容extraMap 通知额外参数openType 原本通知打开方式,1:打开APP;2:打开activity;3:打开URL;4:无跳转逻辑openActivity 所要打开的activity的名称,仅当openType=2时有效,其余情况为nullopenUrl 所要打开的URL,仅当openType=3时有效,其余情况为null void onNotificationReceivedInApp(Context context, String title, String summary, Map<String, String> extraMap, int openType, String openActivity, String openUrl); V2.3.3及以上版本开始支持)" class="reference-link">3. 自定义样式通知(V2.3.3及以上版本开始支持)Android Push SDK支持用户自定义通知样式,用户可以设定自己的通知样式,涉及的内容包括通知的提醒方式(声音、震动、静默),通知在状态栏的显示图标,推送消息应用内到达时是否创建通知以及自定义通知布局文件等。自定义样式通知的设置包括两部分: 3.1 客户端设置通知样式 用户利用SDK提供的自定义通知样式接口创建自定义样式通知。SDK中有两个自定义样式通知类:1)BasicCustomPushNotification;2)AdvancedCustomPushNotification。其中BasicCustomPushNotification用户设置基础样式,包括提醒方式、状态栏图标以及当推送消息到达时应用正处于前台情况下是否创建该通知等。AdvancedCustomPushNotification是BasicCustomPushNotification的子类,继承了BasicCustomPushNotification的所有方法,同时还可以设置通知样式布局文件每个样式都需要对应一个特定的整数类型id,如果多个样式设置为同一个id,则最后设置的样式有效。如果SDK没有找到对应id的样式则会创建默认样式的通知样式只需设置一次,SDK会记住这个设置,在需要使用时加载对应样式具体使用例子请参考Demo 3.2 后端推送消息时添加自定义样式id 用户利用OpenApi推送消息时设定特定样式的id服务端不能设置样式,只能指定需要展现的样式id指定id的样式必须在客户端已经进行设置,否则SDK会创建默认样式的通知 3.3 Example BasicCustomPushNotification" class="reference-link">Example-BasicCustomPushNotificationBasicCustomPushNotification notification = new BasicCustomPushNotification();notification.setRemindType(BasicCustomPushNotification.REMIND_TYPE_SOUND);notification.setStatusBarDrawable(R.drawable.logo_yuanjiao_120);boolean res = CustomNotificationBuilder.getInstance().setCustomNotification(1, notification); AdvancedCustomPushNotification" class="reference-link">Example-AdvancedCustomPushNotificationAdvancedCustomPushNotification notification = new AdvancedCustomPushNotification(R.layout.notitfication_layout, R.id.m_icon, R.id.m_title, R.id.m_text);notification.setServerOptionFirst(true);notification.setBuildWhenAppInForeground(false);boolean res = CustomNotificationBuilder.getInstance().setCustomNotification(2, notification); OpenApi" class="reference-link">Example-OpenApi客户端设置完成后,服务端在推送通知时需要利用OpenApi指明对应的自定义样式ID final SimpleDateFormat dateFormat = new SimpleDateFormat("MM-dd HH:mm:ss");final String date = dateFormat.format(new Date());PushRequest pushRequest = new PushRequest();// 推送目标pushRequest.setAppKey(appKey);pushRequest.setTarget("device"); //推送目标: device:推送给设备; account:推送给指定帐号,tag:推送给自定义标签; all: 推送给全部pushRequest.setTargetValue("deviceId"); // 推送配置pushRequest.setType(1); // 0:表示消息(默认为0), 1:表示通知pushRequest.setTitle(date); // 消息的标题pushRequest.setBody("PushRequest body"); // 消息的内容pushRequest.setSummary("PushRequest summary"); // 通知的摘要pushRequest.setAndroidNotificationBarType(2);//设置的通知样式ID,通知栏自定义样式范围0-100// 推送配置: AndroidpushRequest.setAndroidOpenType("1"); // 点击通知后动作,1:打开应用 2: 打开应用Activity 3:打开 urlpushRequest.setAndroidExtParameters("{\"_NOTIFICATION_BAR_STYLE_\":\"2\"}"); 3.4 BasicCustomPushNotification API 默认构造函数 BasicCustomPushNotification的默认构造函数,所有配置采用默认设置:通知方式采用震动+通知;NotificationFlag采用Notification.FLAG_AUTO_CANCEL,状态栏图标用的是android.R.drawable.stat_notify_chat。 public BasicCustomPushNotification(); 构造函数参数 drawable 状态栏图标flags NotificationFlags,支持系统Notification下的Flag参数remindType 提醒类型,有BasicCustomPushNotification.REMIND_TYPE_SILENT:静默;BasicCustomPushNotification.REMIND_TYPE_VIBRATE:震动;BasicCustomPushNotification.REMIND_TYPE_SOUND:声音;BasicCustomPushNotification.REMIND_TYPE_VIBRATE_AND_SOUND:声音+震动 public BasicCustomPushNotification(int drawable, int flags, int remindType); 获取状态栏图标 获取已设置的状态栏图标 public int getStatusBarDrawable() 设置状态栏图标 更改状态栏图标设置 参数 statusBarDrawable 状态栏图标资源id public void setStatusBarDrawable(int statusBarDrawable); 获取提醒方式 获取已经设置的提醒方式 public int getRemindType(); 设置提醒方式 更改自定义通知的提醒方式 参数 remindType 提醒方式,提供的参数有:BasicCustomPushNotification.REMIND_TYPE_SILENT:静默;BasicCustomPushNotification.REMIND_TYPE_VIBRATE:震动;BasicCustomPushNotification.REMIND_TYPE_SOUND:声音;BasicCustomPushNotification.REMIND_TYPE_VIBRATE_AND_SOUND:声音+震动 public void setRemindType(int remindType); 获取Notification Flags参数 获取已经设置的notification flag参数 public int getNotificationFlags(); 设置Notification Flags参数 更改自定义通知的flags参数 参数 notificationFlags 支持系统自带的Notification Flag参数 public void setNotificationFlags(int notificationFlags); 获取是否服务端设置优先 利用OpenApi或者阿里云推送控制台推送消息都可以设置提醒方式,当后端设置的提醒方式和自定义样式提醒方式冲突时,SDK根据serverOptionFirst参数来判断提醒方式策略。如果该参数为true,则采用后端设定的提醒方式;如果该参数为false,则采用自定义样式指定的提醒方式。默认为false public boolean isServerOptionFirst(); 设置是否服务端优先 更改自定义通知的serverOptionFirst参数 参数 serverOptionFirst 是否服务器配置优先 public void setServerOptionFirst(boolean serverOptionFirst); 获取推送前台到达否创建通知参数 当推送到达时,如果应用处在前台,用户可以通过自定义样式决定是否创建通知。默认是创建通知 public boolean isBuildWhenAppInForeground(); 设置推送前台到达否创建通知参数 更改当推送到达时应用处在前台情况下是否创建通知的设置 参数 buildWhenAppInForeground 是否创建通知 public void setBuildWhenAppInForeground(boolean buildWhenAppInForeground); 3.5 AdvancedCustomPushNotification API AdvancedCustomPushNotification是BasicCustomPushNotification的子类,继承了上文中BasicCustomPushNotification的所有方法。 AdvancedCustomPushNotification构造函数 AdvancedCustomPushNotification类的构造函数,AdvancedCustomPushNotification没有默认构造函数 参数 view 自定义通知布局文件id。注:Notification的自定义布局是RemoteViews,和其他RemoteViews一样,在自定义视图布局文件中,仅支持FrameLayout、LinearLayout、RelativeLayout三种布局。iconViewId 自定义布局文件中icon的viewIdtitleViewId 自定义布局文件中title的viewIdcontentViewId 自定义布局文件中显示通知正文的viewId public AdvancedCustomPushNotification( int view, int iconViewId, int titleViewId, int contentViewId); 设置通知图标 设置通知栏中显示的图标,该图标显示在iconViewId所指定的控件中。 参数 icon icon图标资源id public void setIcon(int icon); 获取通知图标 获取设置的通知图标 public int getIcon(); 3.6 CustomNotificationBuilder API CustomNotificationBuilder用于注册用户设定好的自定义样式通知 获取CustomNotificationBuilder实例 CustomNotificationBuilder是单例类,必须通过指定接口来获取实例 public static CustomNotificationBuilder getInstance(); 注册自定义样式通知 用户创建好自定义样式通知后需要将其注册,并赋予其一个特定的id 参数 customNotificationId 所注册的自定义样式通知的id,id必须大于0。如果将多个不同的自定义样式通知赋予同一个id,则最后注册的通知有效,其他的通知将会被覆盖notification 创建的通知,该通知可以是BasicCustomPushNotification对象也可以是AdvancedCustomPushNotification对象,但是不能为null 返回 该方法会返回一个boolean类型的结果,如果返回true,则注册成功;反之则失败。 public boolean setCustomNotification(int customNotificationId, BasicCustomPushNotification notification);

2019-12-01 23:11:49 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档Android API Android SDK最新版本v3.0.11。 Android参考Demo。 API索引: 1. CloudPushSDK接口 1.1 基本设置 SDK注册SDK动态注册启动信息统计获取设备标识设置日志等级动态设置appKey动态设置appSecret打开推送通道关闭推送通道查询推送通道状态设置接收消息IntentService 1.2 账号API 绑定账号解绑账号 1.3 标签API 绑定标签解绑标签查询标签 1.4 别名API 添加别名删除别名查询别名 1.5 通知设置API 设置通知声音设置通知栏图标设置状态栏图标设置免打扰时段关闭免打扰功能删除所有通知接口 1.6 自建通知统计上报API 自建通知点击上报接口自建通知删除上报接口 1.7 电话API 绑定电话解绑电话 2. MessageReceiver/AliyunMessageIntentService相关接口 2.1 消息接收回调2.2 通知接收回调2.3 通知打开回调2.4 无跳转逻辑通知打开回调2.5 通知在应用内到达回调 3. 自定义样式通知相关接口 3.1 客户端设置通知样式3.2 后端推送消息时添加自定义样式id3.3 Example BasicCustomNotification ExampleAdvancedCustomNotification ExampleOpenAPI Example 3.4 BacisCustomNotificaiton API 默认构造函数构造函数获取状态栏图标设置状态栏图标获取提醒方式设置提醒方式获取Notification Flags参数设置Notificaiton Flags参数获取是否服务端设置优先设置是否服务端优先获取推送前台到达否创建通知参数设置推送前台到达否创建通知参数 3.5 AdvancedCustomNotification API 构造函数设置通知图标获取通知图标 3.6 CustomNotificationBuilder API 获取CustomNotificationBuilder实例注册自定义样式通知 1. CloudPushService接口 以下接口调用时,如有回调,均为异步执行,且回调不能为空。 1.1基本设置 SDK注册 初始化推送SDK,关联到云通道。 参数 context 应用上下文(需要ApplicationContext)callback 回调 void register(Context context, CommonCallback callback); SDK动态注册接口 支持动态设置appKey,appSecret的注册接口 参数 context 应用上下文(需要ApplicationContext)appKey appSecretcallback 回调 void register(Context context, String appKey, String appSecret, CommonCallback callback); 启动信息统计 统计App启动信息。 void onAppStart(); 获取设备标识 获取设备唯一标识。 返回 设备唯一标识。 String getDeviceId(); 设置日志等级 需要在通道初始化之前设置;默认日志等级为CloudPushService.ERROR; 参数 logLevel 支持设置:CloudPushService.ERROR | CloudPushService.INFO | CloudPushService.DEBUG | CloudPushService.OFF(关闭Log) void setLogLevel(int logLevel); V2.3.6及以上版本支持)" class="reference-link">动态设置appKey(V2.3.6及以上版本支持) 动态设置appKey无需在manifest配置appKey务必在调用register注册接口之前调用该接口,否则动态设置失效 参数 appKey 需要设置的appKey void setAppKey(String appKey); V2.3.6及以上版本支持)" class="reference-link">动态设置appSecret(V2.3.6及以上版本支持) 动态设置appSecret无需在manifest配置appSecret务必在调用register注册接口之前调用该接口,否则动态设置失效 参数 appSecret 需要设置的appSecret void setAppSecret(String appSecret); V3.0.3及以上版本支持)" class="reference-link">打开推送通道(V3.0.3及以上版本支持) 用于在程序运行时动态打开推送通道全量推送场景下,打开推送通道存在2-3小时延迟。其他场景实时生效 参数 callback 回调 void turnOnPushChannel(CommonCallback callback); V3.0.3及以上版本支持)" class="reference-link">关闭推送通道(V3.0.3及以上版本支持) 用于在程序运行时动态关闭推送通道全量推送场景下,关闭推送通道存在2-3小时延迟。其他场景实时生效 参数 callback 回调 void turnOffPushChannel(CommonCallback callback); V3.0.3及以上版本支持)" class="reference-link">查询推送通道状态(V3.0.3及以上版本支持) app运行时查询当前推送通道状态如果当前为打开状态,则通过callback.success(String response)回调传入’on’;反之则传入’off’ 参数 callback 回调 void checkPushChannelStatus(CommonCallback callback); V3.0.10及以上版本支持)" class="reference-link">设置消息接收IntentService(V3.0.10及以上版本支持) 通过IntentService组件接收消息回调设置后消息将通过该组件透出,不再通过MessageReceiver设置的IntentService需继承com.alibaba.sdk.android.push.AliyunMessageIntentService,并覆写相关回调方法 参数 messageIntentService 自定义接收消息IntentService的class void setPushIntentService(Class messageIntentService); 1.2 账号API 绑定账号 将应用内账号和推送通道相关联,可以实现按账号的定点消息推送;设备只能绑定一个账号,同一账号可以绑定到多个设备;同一设备更换绑定账号时无需进行解绑,重新调用绑定账号接口即可生效;若业务场景需要先解绑后绑定,在解绑账号成功回调中进行绑定绑定操作,以此保证执行的顺序性;账户名设置支持64字节。 参数 account 绑定账号名callback 回调 void bindAccount(String account, CommonCallback callback); 解绑账号 将应用内账号和推送通道取消关联。 参数 callback 回调 void unbindAccount(CommonCallback callback); 1.3 标签API 绑定标签 绑定标签到指定目标;支持向设备、账号和别名绑定标签,绑定类型由参数target指定;绑定标签在10分钟内生效;App最多支持绑定1万个标签,单个标签最大支持128字符。 参数 target 目标类型,1:本设备; 2:本设备绑定账号; 3:别名target(V2.3.5及以上版本) 目标类型,CloudPushService.DEVICE_TARGET:本设备; CloudPushService.ACCOUNT_TARGET:本账号; CloudPushService.ALIAS_TARGET:别名tags 标签(数组输入)alias 别名(仅当target = 3时生效)callback 回调 void bindTag(int target, String[] tags, String alias, CommonCallback callback); 解绑标签 解绑指定目标标签;支持解绑设备、账号和别名标签,解绑类型由参数target指定;解绑标签在10分钟内生效;解绑标签只是解除设备和标签的绑定关系,不等同于删除标签,即该APP下标签仍然存在,系统目前不支持标签的删除。 参数 target 目标类型,1:本设备; 2:本设备绑定账号; 3:别名。target(V2.3.5及以上版本) 目标类型,CloudPushService.DEVICE_TARGET:本设备; CloudPushService.ACCOUNT_TARGET:本账号; CloudPushService.ALIAS_TARGET:别名tags 标签(数组输入)alias 别名(仅当target = 3时生效)callback 回调 void unbindTag(int target, String[] tags, String alias, CommonCallback callback); 查询标签 查询目标绑定标签,当前仅支持查询设备标签;查询结果可从回调onSuccess(response)的response获取;标签绑定成功且生效(10分钟内)后即可查询。 参数 target 目标类型,1: 本设备target(V2.3.5及以上版本) 目标类型,CloudPushService.DEVICE_TARGET:本设备;callback 回调 void listTags(int target, CommonCallback callback); 1.4 别名API 添加别名 设备添加别名;单个设备最多添加128个别名,且同一别名最多添加到128个设备;别名支持128字节。 参数 alias 别名callback 回调 void addAlias(String alias, CommonCallback callback); 删除别名 删除设备别名;支持删除指定别名和删除全部别名(alias = null || alias.length = 0)。 参数 alias 别名(alias = null or alias.length = 0时,删除设备全部别名)callback 回调 void removeAlias(String alias, CommonCallback callback); 查询别名 查询设备别名;查询结果可从回调onSuccess(response)的response中获取;从V3.0.9及以上版本开始,接口内部有5s短缓存,5s内多次调用只会请求服务端一次。 参数 callback 回调 void listAliases(CommonCallback callback); 1.5 通知设置API 设置通知声音 设置推送通知声音文件路径;若不调用本接口,默认获取资源id为R.raw.alicloud_notification_sound的资源文件;若没有获取到指定声音文件,取设备设置的消息声音。 参数 filePath 通知声音文件路径 void setNotificationSoundFilePath(String filePath); 设置通知栏图标 设置推送通知栏图标资源Bitmap。若不调用本接口,默认获取id为R.drawable.alicloud_notification_largeIcon的资源文件;若没有获取到指定图标文件,取App启动图标。 参数 icon 图标资源Bitmap void setNotificationLargeIcon(Bitmap icon); 设置状态栏图标 设置推送状态栏图标资源Id;若不调用本接口,默认获取id为R.drawable.alicloud_notification_smallIcon的资源文件;若没有获取到指定资源文件Id,取App启动图标。 参数 iconId 图标资源Id void setNotificationSmallIcon(int iconId); 设置免打扰时段 设置免打扰时间段,过滤所有通知与消息;免打扰时段仅支持设置一次,多次调用以最后一次调用设置时段为准;设置免打扰时段为00:00 - 00:00,可取消免打扰功能;(以下功能支持该用法,V2.3.5及以上版本使用关闭免打扰功能接口)全天免打扰可以设置为”0:0-23:59”免打扰时段设置对小米辅助弹窗通知无效。 参数 startHour 免打扰的起始时间(小时),24小时制,取值范围:0-23startMinute 免打扰起始时间(分钟),取值范围:0-59endHour 免打扰的结束时间(小时),24小时制,取值范围:0-23endMinute 免打扰结束时间(分钟),取值范围:0-59 void setDoNotDisturb(int startHour, int startMinute, int endHour, int endMinute, CommonCallback callback); V2.3.5及以上版本支持)" class="reference-link">关闭免打扰功能(V2.3.5及以上版本支持) 关闭后,先前设置的免打扰时段失效免打扰功能默认是关闭的没有对应的开发免打扰功能接口,调用设置免打扰功能时段功能后自动打开免打扰功能 void closeDoNotDisturbMode(); V2.3.7及以上版本支持)" class="reference-link">删除所有通知接口(V2.3.7及以上版本支持) 删除推送SDK创建的所有通知若需要实现精准删除特定通知可以在onNotification回调中获取通知id,自行删除 void clearNotifications(); V3.0.6及以上版本支持)" class="reference-link">1.6 自建通知统计上报API(V3.0.6及以上版本支持) 本接口主要针对统计用户自建通知(通过阿里云推送发送透传消息,并在onMessage回调中自行创建通知)的删除/点击事件上报,其相关实现可以参考移动推送Android SDK:透传消息+用户自建通知最佳实践,如果您直接通过阿里云推送通知,无需使用相关接口。 自建通知点击上报接口 上报自建通知的点击事件请确保同一消息仅上报一次 参数 message 要上报点击事件的消息实例 void clickMessage(CPushMessage message); 自建通知删除上报接口 上报自建通知的删除事件请确保同一消息仅上报一次 参数 message 要上报删除事件的消息实例 void dismissMessage(CPushMessage message); V3.0.11及以上版本支持)" class="reference-link">1.7 电话API(V3.0.11及以上版本支持) 为提高信息的到达率和实效性,扩展推送的使用场景,我们推出了推送与短信的融合通知模式。开发者可以设置在一定时间内,如果用户未收到或未点击推送,通过短信补发通知用户。具体方案可参考:推送短信融合。 为实现推送短信融合方案,需要在终端接入绑定/解绑电话号接口,接口详情如下。 绑定电话号将设备与电话号绑定 参数 phoneNumber 要绑定的手机号callback 回调 void bindPhoneNumber(String phoneNumber, CommonCallback callback); 解绑电话号解除当前设备与电话号的绑定关系 参数 callback 回调 void unbindPhoneNumber(CommonCallback callback); 2. MessageReceiver/AliyunMessageIntentService 通过继承MessageReciever,可以拦截通知,接收消息,获取推送中的扩展字段。或者在通知打开或删除的时候,切入进行后续处理。如果调用了setPushIntentService,则需继承com.alibaba.sdk.android.push.AliyunMessageIntentService,并覆写相关方法,AliyunMessageIntentService所有消息回调同MessageReceiver一致。 使用方法: MessageReceiver 继承com.alibaba.sdk.android.push.MessageReceiver;在Manifest中找到原来MessageReceiver的配置,将上边的class替换成你自己的receiver[不要配置多个]。 <!--消息接收监听器--><receiver android:name="com.alibaba.sdk.android.push.MessageReceiver <-- 把这里替换成你自己的receiver"> <intent-filter> <action android:name="com.alibaba.push2.action.NOTIFICATION_OPENED"/> </intent-filter> ... ...</receiver> AliyunMessageIntentService 继承com.alibaba.sdk.android.push.AliyunMessageIntentService并覆写相关方法在Manifest中注册该service <service android:name="MyPushIntentService" > <intent-filter> <action android:name="com.alibaba.push2.action.NOTIFICATION_OPENED" /> </intent-filter> <intent-filter> <action android:name="com.alibaba.push2.action.NOTIFICATION_REMOVED" /> </intent-filter> <intent-filter> <action android:name="com.alibaba.sdk.android.push.RECEIVE" /> </intent-filter> </service> 消息接收回调 用于接收服务端推送的消息。消息不会弹窗,而是回调该方法。 参数 context 上下文环境message CPushMessage类型,可以获取消息Id、消息标题和内容。 void onMessage(Context context, CPushMessage message); 通知接收回调 客户端接收到通知后,回调该方法。可获取到并处理通知相关的参数。 参数 context 上下文环境title 通知标题summary 通知内容extraMap 通知额外参数,包括部分系统自带参数: _ALIYUN_NOTIFICATION_ID_(V2.3.5及以上):创建通知对应id_ALIYUN_NOTIFICATION_PRIORITY_(V2.3.5及以上):创建通知对应id。默认不带,需要通过OpenApi设置 void onNotification(Context context, String title, String summary, Map<String, String> extraMap) 通知打开回调 打开通知时会回调该方法,通知打开上报由SDK自动完成。 参数 context 上下文环境title 通知标题summary 通知内容extraMap 通知额外参数,包括部分系统自带参数: _ALIYUN_NOTIFICATION_ID_(V2.3.5及以上):创建通知对应id_ALIYUN_NOTIFICATION_PRIORITY_(V2.3.5及以上):创建通知对应id。默认不带,需要通过OpenApi设置 void onNotificationOpened(Context context, String title, String summary, String extraMap); 无跳转逻辑通知打开回调 打开无跳转逻辑(open=4)通知时回调该方法(v2.3.2及以上版本支持),通知打开上报由SDK自动完成。 参数 context 上下文环境title 通知标题summary 通知内容extraMap 通知额外参数,包括部分系统自带参数: _ALIYUN_NOTIFICATION_ID_(V2.3.5及以上):创建通知对应id_ALIYUN_NOTIFICATION_PRIORITY_(V2.3.5及以上):创建通知对应id。默认不带,需要通过OpenApi设置 void onNotificationClickedWithNoAction(Context context, String title, String summary, String extraMap); 通知删除回调 删除通知时回调该方法,通知删除上报由SDK自动完成。 参数 context 上下文环境messageId 删除通知的Id void onNotificationRemoved(Context context, String messageId); 通知在应用内到达回调 当用户创建自定义通知样式,并且设置推送应用内到达不创建通知弹窗时调用该回调,且此时不调用onNotification回调(v2.3.3及以上版本支持) 参数 context 上下文环境title 通知标题summary 通知内容extraMap 通知额外参数openType 原本通知打开方式,1:打开APP;2:打开activity;3:打开URL;4:无跳转逻辑openActivity 所要打开的activity的名称,仅当openType=2时有效,其余情况为nullopenUrl 所要打开的URL,仅当openType=3时有效,其余情况为null void onNotificationReceivedInApp(Context context, String title, String summary, Map<String, String> extraMap, int openType, String openActivity, String openUrl); V2.3.3及以上版本开始支持)" class="reference-link">3. 自定义样式通知(V2.3.3及以上版本开始支持)Android Push SDK支持用户自定义通知样式,用户可以设定自己的通知样式,涉及的内容包括通知的提醒方式(声音、震动、静默),通知在状态栏的显示图标,推送消息应用内到达时是否创建通知以及自定义通知布局文件等。自定义样式通知的设置包括两部分: 3.1 客户端设置通知样式 用户利用SDK提供的自定义通知样式接口创建自定义样式通知。SDK中有两个自定义样式通知类:1)BasicCustomPushNotification;2)AdvancedCustomPushNotification。其中BasicCustomPushNotification用户设置基础样式,包括提醒方式、状态栏图标以及当推送消息到达时应用正处于前台情况下是否创建该通知等。AdvancedCustomPushNotification是BasicCustomPushNotification的子类,继承了BasicCustomPushNotification的所有方法,同时还可以设置通知样式布局文件每个样式都需要对应一个特定的整数类型id,如果多个样式设置为同一个id,则最后设置的样式有效。如果SDK没有找到对应id的样式则会创建默认样式的通知样式只需设置一次,SDK会记住这个设置,在需要使用时加载对应样式具体使用例子请参考Demo 3.2 后端推送消息时添加自定义样式id 用户利用OpenApi推送消息时设定特定样式的id服务端不能设置样式,只能指定需要展现的样式id指定id的样式必须在客户端已经进行设置,否则SDK会创建默认样式的通知 3.3 Example BasicCustomPushNotification" class="reference-link">Example-BasicCustomPushNotificationBasicCustomPushNotification notification = new BasicCustomPushNotification();notification.setRemindType(BasicCustomPushNotification.REMIND_TYPE_SOUND);notification.setStatusBarDrawable(R.drawable.logo_yuanjiao_120);boolean res = CustomNotificationBuilder.getInstance().setCustomNotification(1, notification); AdvancedCustomPushNotification" class="reference-link">Example-AdvancedCustomPushNotificationAdvancedCustomPushNotification notification = new AdvancedCustomPushNotification(R.layout.notitfication_layout, R.id.m_icon, R.id.m_title, R.id.m_text);notification.setServerOptionFirst(true);notification.setBuildWhenAppInForeground(false);boolean res = CustomNotificationBuilder.getInstance().setCustomNotification(2, notification); OpenApi" class="reference-link">Example-OpenApi客户端设置完成后,服务端在推送通知时需要利用OpenApi指明对应的自定义样式ID final SimpleDateFormat dateFormat = new SimpleDateFormat("MM-dd HH:mm:ss");final String date = dateFormat.format(new Date());PushRequest pushRequest = new PushRequest();// 推送目标pushRequest.setAppKey(appKey);pushRequest.setTarget("device"); //推送目标: device:推送给设备; account:推送给指定帐号,tag:推送给自定义标签; all: 推送给全部pushRequest.setTargetValue("deviceId"); // 推送配置pushRequest.setType(1); // 0:表示消息(默认为0), 1:表示通知pushRequest.setTitle(date); // 消息的标题pushRequest.setBody("PushRequest body"); // 消息的内容pushRequest.setSummary("PushRequest summary"); // 通知的摘要pushRequest.setAndroidNotificationBarType(2);//设置的通知样式ID,通知栏自定义样式范围0-100// 推送配置: AndroidpushRequest.setAndroidOpenType("1"); // 点击通知后动作,1:打开应用 2: 打开应用Activity 3:打开 urlpushRequest.setAndroidExtParameters("{\"_NOTIFICATION_BAR_STYLE_\":\"2\"}"); 3.4 BasicCustomPushNotification API 默认构造函数 BasicCustomPushNotification的默认构造函数,所有配置采用默认设置:通知方式采用震动+通知;NotificationFlag采用Notification.FLAG_AUTO_CANCEL,状态栏图标用的是android.R.drawable.stat_notify_chat。 public BasicCustomPushNotification(); 构造函数参数 drawable 状态栏图标flags NotificationFlags,支持系统Notification下的Flag参数remindType 提醒类型,有BasicCustomPushNotification.REMIND_TYPE_SILENT:静默;BasicCustomPushNotification.REMIND_TYPE_VIBRATE:震动;BasicCustomPushNotification.REMIND_TYPE_SOUND:声音;BasicCustomPushNotification.REMIND_TYPE_VIBRATE_AND_SOUND:声音+震动 public BasicCustomPushNotification(int drawable, int flags, int remindType); 获取状态栏图标 获取已设置的状态栏图标 public int getStatusBarDrawable() 设置状态栏图标 更改状态栏图标设置 参数 statusBarDrawable 状态栏图标资源id public void setStatusBarDrawable(int statusBarDrawable); 获取提醒方式 获取已经设置的提醒方式 public int getRemindType(); 设置提醒方式 更改自定义通知的提醒方式 参数 remindType 提醒方式,提供的参数有:BasicCustomPushNotification.REMIND_TYPE_SILENT:静默;BasicCustomPushNotification.REMIND_TYPE_VIBRATE:震动;BasicCustomPushNotification.REMIND_TYPE_SOUND:声音;BasicCustomPushNotification.REMIND_TYPE_VIBRATE_AND_SOUND:声音+震动 public void setRemindType(int remindType); 获取Notification Flags参数 获取已经设置的notification flag参数 public int getNotificationFlags(); 设置Notification Flags参数 更改自定义通知的flags参数 参数 notificationFlags 支持系统自带的Notification Flag参数 public void setNotificationFlags(int notificationFlags); 获取是否服务端设置优先 利用OpenApi或者阿里云推送控制台推送消息都可以设置提醒方式,当后端设置的提醒方式和自定义样式提醒方式冲突时,SDK根据serverOptionFirst参数来判断提醒方式策略。如果该参数为true,则采用后端设定的提醒方式;如果该参数为false,则采用自定义样式指定的提醒方式。默认为false public boolean isServerOptionFirst(); 设置是否服务端优先 更改自定义通知的serverOptionFirst参数 参数 serverOptionFirst 是否服务器配置优先 public void setServerOptionFirst(boolean serverOptionFirst); 获取推送前台到达否创建通知参数 当推送到达时,如果应用处在前台,用户可以通过自定义样式决定是否创建通知。默认是创建通知 public boolean isBuildWhenAppInForeground(); 设置推送前台到达否创建通知参数 更改当推送到达时应用处在前台情况下是否创建通知的设置 参数 buildWhenAppInForeground 是否创建通知 public void setBuildWhenAppInForeground(boolean buildWhenAppInForeground); 3.5 AdvancedCustomPushNotification API AdvancedCustomPushNotification是BasicCustomPushNotification的子类,继承了上文中BasicCustomPushNotification的所有方法。 AdvancedCustomPushNotification构造函数 AdvancedCustomPushNotification类的构造函数,AdvancedCustomPushNotification没有默认构造函数 参数 view 自定义通知布局文件id。注:Notification的自定义布局是RemoteViews,和其他RemoteViews一样,在自定义视图布局文件中,仅支持FrameLayout、LinearLayout、RelativeLayout三种布局。iconViewId 自定义布局文件中icon的viewIdtitleViewId 自定义布局文件中title的viewIdcontentViewId 自定义布局文件中显示通知正文的viewId public AdvancedCustomPushNotification( int view, int iconViewId, int titleViewId, int contentViewId); 设置通知图标 设置通知栏中显示的图标,该图标显示在iconViewId所指定的控件中。 参数 icon icon图标资源id public void setIcon(int icon); 获取通知图标 获取设置的通知图标 public int getIcon(); 3.6 CustomNotificationBuilder API CustomNotificationBuilder用于注册用户设定好的自定义样式通知 获取CustomNotificationBuilder实例 CustomNotificationBuilder是单例类,必须通过指定接口来获取实例 public static CustomNotificationBuilder getInstance(); 注册自定义样式通知 用户创建好自定义样式通知后需要将其注册,并赋予其一个特定的id 参数 customNotificationId 所注册的自定义样式通知的id,id必须大于0。如果将多个不同的自定义样式通知赋予同一个id,则最后注册的通知有效,其他的通知将会被覆盖notification 创建的通知,该通知可以是BasicCustomPushNotification对象也可以是AdvancedCustomPushNotification对象,但是不能为null 返回 该方法会返回一个boolean类型的结果,如果返回true,则注册成功;反之则失败。 public boolean setCustomNotification(int customNotificationId, BasicCustomPushNotification notification);

2019-12-01 23:11:49 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档Android API Android SDK最新版本v3.0.11。 Android参考Demo。 API索引: 1. CloudPushSDK接口 1.1 基本设置 SDK注册SDK动态注册启动信息统计获取设备标识设置日志等级动态设置appKey动态设置appSecret打开推送通道关闭推送通道查询推送通道状态设置接收消息IntentService 1.2 账号API 绑定账号解绑账号 1.3 标签API 绑定标签解绑标签查询标签 1.4 别名API 添加别名删除别名查询别名 1.5 通知设置API 设置通知声音设置通知栏图标设置状态栏图标设置免打扰时段关闭免打扰功能删除所有通知接口 1.6 自建通知统计上报API 自建通知点击上报接口自建通知删除上报接口 1.7 电话API 绑定电话解绑电话 2. MessageReceiver/AliyunMessageIntentService相关接口 2.1 消息接收回调2.2 通知接收回调2.3 通知打开回调2.4 无跳转逻辑通知打开回调2.5 通知在应用内到达回调 3. 自定义样式通知相关接口 3.1 客户端设置通知样式3.2 后端推送消息时添加自定义样式id3.3 Example BasicCustomNotification ExampleAdvancedCustomNotification ExampleOpenAPI Example 3.4 BacisCustomNotificaiton API 默认构造函数构造函数获取状态栏图标设置状态栏图标获取提醒方式设置提醒方式获取Notification Flags参数设置Notificaiton Flags参数获取是否服务端设置优先设置是否服务端优先获取推送前台到达否创建通知参数设置推送前台到达否创建通知参数 3.5 AdvancedCustomNotification API 构造函数设置通知图标获取通知图标 3.6 CustomNotificationBuilder API 获取CustomNotificationBuilder实例注册自定义样式通知 1. CloudPushService接口 以下接口调用时,如有回调,均为异步执行,且回调不能为空。 1.1基本设置 SDK注册 初始化推送SDK,关联到云通道。 参数 context 应用上下文(需要ApplicationContext)callback 回调 void register(Context context, CommonCallback callback); SDK动态注册接口 支持动态设置appKey,appSecret的注册接口 参数 context 应用上下文(需要ApplicationContext)appKey appSecretcallback 回调 void register(Context context, String appKey, String appSecret, CommonCallback callback); 启动信息统计 统计App启动信息。 void onAppStart(); 获取设备标识 获取设备唯一标识。 返回 设备唯一标识。 String getDeviceId(); 设置日志等级 需要在通道初始化之前设置;默认日志等级为CloudPushService.ERROR; 参数 logLevel 支持设置:CloudPushService.ERROR | CloudPushService.INFO | CloudPushService.DEBUG | CloudPushService.OFF(关闭Log) void setLogLevel(int logLevel); V2.3.6及以上版本支持)" class="reference-link">动态设置appKey(V2.3.6及以上版本支持) 动态设置appKey无需在manifest配置appKey务必在调用register注册接口之前调用该接口,否则动态设置失效 参数 appKey 需要设置的appKey void setAppKey(String appKey); V2.3.6及以上版本支持)" class="reference-link">动态设置appSecret(V2.3.6及以上版本支持) 动态设置appSecret无需在manifest配置appSecret务必在调用register注册接口之前调用该接口,否则动态设置失效 参数 appSecret 需要设置的appSecret void setAppSecret(String appSecret); V3.0.3及以上版本支持)" class="reference-link">打开推送通道(V3.0.3及以上版本支持) 用于在程序运行时动态打开推送通道全量推送场景下,打开推送通道存在2-3小时延迟。其他场景实时生效 参数 callback 回调 void turnOnPushChannel(CommonCallback callback); V3.0.3及以上版本支持)" class="reference-link">关闭推送通道(V3.0.3及以上版本支持) 用于在程序运行时动态关闭推送通道全量推送场景下,关闭推送通道存在2-3小时延迟。其他场景实时生效 参数 callback 回调 void turnOffPushChannel(CommonCallback callback); V3.0.3及以上版本支持)" class="reference-link">查询推送通道状态(V3.0.3及以上版本支持) app运行时查询当前推送通道状态如果当前为打开状态,则通过callback.success(String response)回调传入’on’;反之则传入’off’ 参数 callback 回调 void checkPushChannelStatus(CommonCallback callback); V3.0.10及以上版本支持)" class="reference-link">设置消息接收IntentService(V3.0.10及以上版本支持) 通过IntentService组件接收消息回调设置后消息将通过该组件透出,不再通过MessageReceiver设置的IntentService需继承com.alibaba.sdk.android.push.AliyunMessageIntentService,并覆写相关回调方法 参数 messageIntentService 自定义接收消息IntentService的class void setPushIntentService(Class messageIntentService); 1.2 账号API 绑定账号 将应用内账号和推送通道相关联,可以实现按账号的定点消息推送;设备只能绑定一个账号,同一账号可以绑定到多个设备;同一设备更换绑定账号时无需进行解绑,重新调用绑定账号接口即可生效;若业务场景需要先解绑后绑定,在解绑账号成功回调中进行绑定绑定操作,以此保证执行的顺序性;账户名设置支持64字节。 参数 account 绑定账号名callback 回调 void bindAccount(String account, CommonCallback callback); 解绑账号 将应用内账号和推送通道取消关联。 参数 callback 回调 void unbindAccount(CommonCallback callback); 1.3 标签API 绑定标签 绑定标签到指定目标;支持向设备、账号和别名绑定标签,绑定类型由参数target指定;绑定标签在10分钟内生效;App最多支持绑定1万个标签,单个标签最大支持128字符。 参数 target 目标类型,1:本设备; 2:本设备绑定账号; 3:别名target(V2.3.5及以上版本) 目标类型,CloudPushService.DEVICE_TARGET:本设备; CloudPushService.ACCOUNT_TARGET:本账号; CloudPushService.ALIAS_TARGET:别名tags 标签(数组输入)alias 别名(仅当target = 3时生效)callback 回调 void bindTag(int target, String[] tags, String alias, CommonCallback callback); 解绑标签 解绑指定目标标签;支持解绑设备、账号和别名标签,解绑类型由参数target指定;解绑标签在10分钟内生效;解绑标签只是解除设备和标签的绑定关系,不等同于删除标签,即该APP下标签仍然存在,系统目前不支持标签的删除。 参数 target 目标类型,1:本设备; 2:本设备绑定账号; 3:别名。target(V2.3.5及以上版本) 目标类型,CloudPushService.DEVICE_TARGET:本设备; CloudPushService.ACCOUNT_TARGET:本账号; CloudPushService.ALIAS_TARGET:别名tags 标签(数组输入)alias 别名(仅当target = 3时生效)callback 回调 void unbindTag(int target, String[] tags, String alias, CommonCallback callback); 查询标签 查询目标绑定标签,当前仅支持查询设备标签;查询结果可从回调onSuccess(response)的response获取;标签绑定成功且生效(10分钟内)后即可查询。 参数 target 目标类型,1: 本设备target(V2.3.5及以上版本) 目标类型,CloudPushService.DEVICE_TARGET:本设备;callback 回调 void listTags(int target, CommonCallback callback); 1.4 别名API 添加别名 设备添加别名;单个设备最多添加128个别名,且同一别名最多添加到128个设备;别名支持128字节。 参数 alias 别名callback 回调 void addAlias(String alias, CommonCallback callback); 删除别名 删除设备别名;支持删除指定别名和删除全部别名(alias = null || alias.length = 0)。 参数 alias 别名(alias = null or alias.length = 0时,删除设备全部别名)callback 回调 void removeAlias(String alias, CommonCallback callback); 查询别名 查询设备别名;查询结果可从回调onSuccess(response)的response中获取;从V3.0.9及以上版本开始,接口内部有5s短缓存,5s内多次调用只会请求服务端一次。 参数 callback 回调 void listAliases(CommonCallback callback); 1.5 通知设置API 设置通知声音 设置推送通知声音文件路径;若不调用本接口,默认获取资源id为R.raw.alicloud_notification_sound的资源文件;若没有获取到指定声音文件,取设备设置的消息声音。 参数 filePath 通知声音文件路径 void setNotificationSoundFilePath(String filePath); 设置通知栏图标 设置推送通知栏图标资源Bitmap。若不调用本接口,默认获取id为R.drawable.alicloud_notification_largeIcon的资源文件;若没有获取到指定图标文件,取App启动图标。 参数 icon 图标资源Bitmap void setNotificationLargeIcon(Bitmap icon); 设置状态栏图标 设置推送状态栏图标资源Id;若不调用本接口,默认获取id为R.drawable.alicloud_notification_smallIcon的资源文件;若没有获取到指定资源文件Id,取App启动图标。 参数 iconId 图标资源Id void setNotificationSmallIcon(int iconId); 设置免打扰时段 设置免打扰时间段,过滤所有通知与消息;免打扰时段仅支持设置一次,多次调用以最后一次调用设置时段为准;设置免打扰时段为00:00 - 00:00,可取消免打扰功能;(以下功能支持该用法,V2.3.5及以上版本使用关闭免打扰功能接口)全天免打扰可以设置为”0:0-23:59”免打扰时段设置对小米辅助弹窗通知无效。 参数 startHour 免打扰的起始时间(小时),24小时制,取值范围:0-23startMinute 免打扰起始时间(分钟),取值范围:0-59endHour 免打扰的结束时间(小时),24小时制,取值范围:0-23endMinute 免打扰结束时间(分钟),取值范围:0-59 void setDoNotDisturb(int startHour, int startMinute, int endHour, int endMinute, CommonCallback callback); V2.3.5及以上版本支持)" class="reference-link">关闭免打扰功能(V2.3.5及以上版本支持) 关闭后,先前设置的免打扰时段失效免打扰功能默认是关闭的没有对应的开发免打扰功能接口,调用设置免打扰功能时段功能后自动打开免打扰功能 void closeDoNotDisturbMode(); V2.3.7及以上版本支持)" class="reference-link">删除所有通知接口(V2.3.7及以上版本支持) 删除推送SDK创建的所有通知若需要实现精准删除特定通知可以在onNotification回调中获取通知id,自行删除 void clearNotifications(); V3.0.6及以上版本支持)" class="reference-link">1.6 自建通知统计上报API(V3.0.6及以上版本支持) 本接口主要针对统计用户自建通知(通过阿里云推送发送透传消息,并在onMessage回调中自行创建通知)的删除/点击事件上报,其相关实现可以参考移动推送Android SDK:透传消息+用户自建通知最佳实践,如果您直接通过阿里云推送通知,无需使用相关接口。 自建通知点击上报接口 上报自建通知的点击事件请确保同一消息仅上报一次 参数 message 要上报点击事件的消息实例 void clickMessage(CPushMessage message); 自建通知删除上报接口 上报自建通知的删除事件请确保同一消息仅上报一次 参数 message 要上报删除事件的消息实例 void dismissMessage(CPushMessage message); V3.0.11及以上版本支持)" class="reference-link">1.7 电话API(V3.0.11及以上版本支持) 为提高信息的到达率和实效性,扩展推送的使用场景,我们推出了推送与短信的融合通知模式。开发者可以设置在一定时间内,如果用户未收到或未点击推送,通过短信补发通知用户。具体方案可参考:推送短信融合。 为实现推送短信融合方案,需要在终端接入绑定/解绑电话号接口,接口详情如下。 绑定电话号将设备与电话号绑定 参数 phoneNumber 要绑定的手机号callback 回调 void bindPhoneNumber(String phoneNumber, CommonCallback callback); 解绑电话号解除当前设备与电话号的绑定关系 参数 callback 回调 void unbindPhoneNumber(CommonCallback callback); 2. MessageReceiver/AliyunMessageIntentService 通过继承MessageReciever,可以拦截通知,接收消息,获取推送中的扩展字段。或者在通知打开或删除的时候,切入进行后续处理。如果调用了setPushIntentService,则需继承com.alibaba.sdk.android.push.AliyunMessageIntentService,并覆写相关方法,AliyunMessageIntentService所有消息回调同MessageReceiver一致。 使用方法: MessageReceiver 继承com.alibaba.sdk.android.push.MessageReceiver;在Manifest中找到原来MessageReceiver的配置,将上边的class替换成你自己的receiver[不要配置多个]。 <!--消息接收监听器--><receiver android:name="com.alibaba.sdk.android.push.MessageReceiver <-- 把这里替换成你自己的receiver"> <intent-filter> <action android:name="com.alibaba.push2.action.NOTIFICATION_OPENED"/> </intent-filter> ... ...</receiver> AliyunMessageIntentService 继承com.alibaba.sdk.android.push.AliyunMessageIntentService并覆写相关方法在Manifest中注册该service <service android:name="MyPushIntentService" > <intent-filter> <action android:name="com.alibaba.push2.action.NOTIFICATION_OPENED" /> </intent-filter> <intent-filter> <action android:name="com.alibaba.push2.action.NOTIFICATION_REMOVED" /> </intent-filter> <intent-filter> <action android:name="com.alibaba.sdk.android.push.RECEIVE" /> </intent-filter> </service> 消息接收回调 用于接收服务端推送的消息。消息不会弹窗,而是回调该方法。 参数 context 上下文环境message CPushMessage类型,可以获取消息Id、消息标题和内容。 void onMessage(Context context, CPushMessage message); 通知接收回调 客户端接收到通知后,回调该方法。可获取到并处理通知相关的参数。 参数 context 上下文环境title 通知标题summary 通知内容extraMap 通知额外参数,包括部分系统自带参数: _ALIYUN_NOTIFICATION_ID_(V2.3.5及以上):创建通知对应id_ALIYUN_NOTIFICATION_PRIORITY_(V2.3.5及以上):创建通知对应id。默认不带,需要通过OpenApi设置 void onNotification(Context context, String title, String summary, Map<String, String> extraMap) 通知打开回调 打开通知时会回调该方法,通知打开上报由SDK自动完成。 参数 context 上下文环境title 通知标题summary 通知内容extraMap 通知额外参数,包括部分系统自带参数: _ALIYUN_NOTIFICATION_ID_(V2.3.5及以上):创建通知对应id_ALIYUN_NOTIFICATION_PRIORITY_(V2.3.5及以上):创建通知对应id。默认不带,需要通过OpenApi设置 void onNotificationOpened(Context context, String title, String summary, String extraMap); 无跳转逻辑通知打开回调 打开无跳转逻辑(open=4)通知时回调该方法(v2.3.2及以上版本支持),通知打开上报由SDK自动完成。 参数 context 上下文环境title 通知标题summary 通知内容extraMap 通知额外参数,包括部分系统自带参数: _ALIYUN_NOTIFICATION_ID_(V2.3.5及以上):创建通知对应id_ALIYUN_NOTIFICATION_PRIORITY_(V2.3.5及以上):创建通知对应id。默认不带,需要通过OpenApi设置 void onNotificationClickedWithNoAction(Context context, String title, String summary, String extraMap); 通知删除回调 删除通知时回调该方法,通知删除上报由SDK自动完成。 参数 context 上下文环境messageId 删除通知的Id void onNotificationRemoved(Context context, String messageId); 通知在应用内到达回调 当用户创建自定义通知样式,并且设置推送应用内到达不创建通知弹窗时调用该回调,且此时不调用onNotification回调(v2.3.3及以上版本支持) 参数 context 上下文环境title 通知标题summary 通知内容extraMap 通知额外参数openType 原本通知打开方式,1:打开APP;2:打开activity;3:打开URL;4:无跳转逻辑openActivity 所要打开的activity的名称,仅当openType=2时有效,其余情况为nullopenUrl 所要打开的URL,仅当openType=3时有效,其余情况为null void onNotificationReceivedInApp(Context context, String title, String summary, Map<String, String> extraMap, int openType, String openActivity, String openUrl); V2.3.3及以上版本开始支持)" class="reference-link">3. 自定义样式通知(V2.3.3及以上版本开始支持)Android Push SDK支持用户自定义通知样式,用户可以设定自己的通知样式,涉及的内容包括通知的提醒方式(声音、震动、静默),通知在状态栏的显示图标,推送消息应用内到达时是否创建通知以及自定义通知布局文件等。自定义样式通知的设置包括两部分: 3.1 客户端设置通知样式 用户利用SDK提供的自定义通知样式接口创建自定义样式通知。SDK中有两个自定义样式通知类:1)BasicCustomPushNotification;2)AdvancedCustomPushNotification。其中BasicCustomPushNotification用户设置基础样式,包括提醒方式、状态栏图标以及当推送消息到达时应用正处于前台情况下是否创建该通知等。AdvancedCustomPushNotification是BasicCustomPushNotification的子类,继承了BasicCustomPushNotification的所有方法,同时还可以设置通知样式布局文件每个样式都需要对应一个特定的整数类型id,如果多个样式设置为同一个id,则最后设置的样式有效。如果SDK没有找到对应id的样式则会创建默认样式的通知样式只需设置一次,SDK会记住这个设置,在需要使用时加载对应样式具体使用例子请参考Demo 3.2 后端推送消息时添加自定义样式id 用户利用OpenApi推送消息时设定特定样式的id服务端不能设置样式,只能指定需要展现的样式id指定id的样式必须在客户端已经进行设置,否则SDK会创建默认样式的通知 3.3 Example BasicCustomPushNotification" class="reference-link">Example-BasicCustomPushNotificationBasicCustomPushNotification notification = new BasicCustomPushNotification();notification.setRemindType(BasicCustomPushNotification.REMIND_TYPE_SOUND);notification.setStatusBarDrawable(R.drawable.logo_yuanjiao_120);boolean res = CustomNotificationBuilder.getInstance().setCustomNotification(1, notification); AdvancedCustomPushNotification" class="reference-link">Example-AdvancedCustomPushNotificationAdvancedCustomPushNotification notification = new AdvancedCustomPushNotification(R.layout.notitfication_layout, R.id.m_icon, R.id.m_title, R.id.m_text);notification.setServerOptionFirst(true);notification.setBuildWhenAppInForeground(false);boolean res = CustomNotificationBuilder.getInstance().setCustomNotification(2, notification); OpenApi" class="reference-link">Example-OpenApi客户端设置完成后,服务端在推送通知时需要利用OpenApi指明对应的自定义样式ID final SimpleDateFormat dateFormat = new SimpleDateFormat("MM-dd HH:mm:ss");final String date = dateFormat.format(new Date());PushRequest pushRequest = new PushRequest();// 推送目标pushRequest.setAppKey(appKey);pushRequest.setTarget("device"); //推送目标: device:推送给设备; account:推送给指定帐号,tag:推送给自定义标签; all: 推送给全部pushRequest.setTargetValue("deviceId"); // 推送配置pushRequest.setType(1); // 0:表示消息(默认为0), 1:表示通知pushRequest.setTitle(date); // 消息的标题pushRequest.setBody("PushRequest body"); // 消息的内容pushRequest.setSummary("PushRequest summary"); // 通知的摘要pushRequest.setAndroidNotificationBarType(2);//设置的通知样式ID,通知栏自定义样式范围0-100// 推送配置: AndroidpushRequest.setAndroidOpenType("1"); // 点击通知后动作,1:打开应用 2: 打开应用Activity 3:打开 urlpushRequest.setAndroidExtParameters("{\"_NOTIFICATION_BAR_STYLE_\":\"2\"}"); 3.4 BasicCustomPushNotification API 默认构造函数 BasicCustomPushNotification的默认构造函数,所有配置采用默认设置:通知方式采用震动+通知;NotificationFlag采用Notification.FLAG_AUTO_CANCEL,状态栏图标用的是android.R.drawable.stat_notify_chat。 public BasicCustomPushNotification(); 构造函数参数 drawable 状态栏图标flags NotificationFlags,支持系统Notification下的Flag参数remindType 提醒类型,有BasicCustomPushNotification.REMIND_TYPE_SILENT:静默;BasicCustomPushNotification.REMIND_TYPE_VIBRATE:震动;BasicCustomPushNotification.REMIND_TYPE_SOUND:声音;BasicCustomPushNotification.REMIND_TYPE_VIBRATE_AND_SOUND:声音+震动 public BasicCustomPushNotification(int drawable, int flags, int remindType); 获取状态栏图标 获取已设置的状态栏图标 public int getStatusBarDrawable() 设置状态栏图标 更改状态栏图标设置 参数 statusBarDrawable 状态栏图标资源id public void setStatusBarDrawable(int statusBarDrawable); 获取提醒方式 获取已经设置的提醒方式 public int getRemindType(); 设置提醒方式 更改自定义通知的提醒方式 参数 remindType 提醒方式,提供的参数有:BasicCustomPushNotification.REMIND_TYPE_SILENT:静默;BasicCustomPushNotification.REMIND_TYPE_VIBRATE:震动;BasicCustomPushNotification.REMIND_TYPE_SOUND:声音;BasicCustomPushNotification.REMIND_TYPE_VIBRATE_AND_SOUND:声音+震动 public void setRemindType(int remindType); 获取Notification Flags参数 获取已经设置的notification flag参数 public int getNotificationFlags(); 设置Notification Flags参数 更改自定义通知的flags参数 参数 notificationFlags 支持系统自带的Notification Flag参数 public void setNotificationFlags(int notificationFlags); 获取是否服务端设置优先 利用OpenApi或者阿里云推送控制台推送消息都可以设置提醒方式,当后端设置的提醒方式和自定义样式提醒方式冲突时,SDK根据serverOptionFirst参数来判断提醒方式策略。如果该参数为true,则采用后端设定的提醒方式;如果该参数为false,则采用自定义样式指定的提醒方式。默认为false public boolean isServerOptionFirst(); 设置是否服务端优先 更改自定义通知的serverOptionFirst参数 参数 serverOptionFirst 是否服务器配置优先 public void setServerOptionFirst(boolean serverOptionFirst); 获取推送前台到达否创建通知参数 当推送到达时,如果应用处在前台,用户可以通过自定义样式决定是否创建通知。默认是创建通知 public boolean isBuildWhenAppInForeground(); 设置推送前台到达否创建通知参数 更改当推送到达时应用处在前台情况下是否创建通知的设置 参数 buildWhenAppInForeground 是否创建通知 public void setBuildWhenAppInForeground(boolean buildWhenAppInForeground); 3.5 AdvancedCustomPushNotification API AdvancedCustomPushNotification是BasicCustomPushNotification的子类,继承了上文中BasicCustomPushNotification的所有方法。 AdvancedCustomPushNotification构造函数 AdvancedCustomPushNotification类的构造函数,AdvancedCustomPushNotification没有默认构造函数 参数 view 自定义通知布局文件id。注:Notification的自定义布局是RemoteViews,和其他RemoteViews一样,在自定义视图布局文件中,仅支持FrameLayout、LinearLayout、RelativeLayout三种布局。iconViewId 自定义布局文件中icon的viewIdtitleViewId 自定义布局文件中title的viewIdcontentViewId 自定义布局文件中显示通知正文的viewId public AdvancedCustomPushNotification( int view, int iconViewId, int titleViewId, int contentViewId); 设置通知图标 设置通知栏中显示的图标,该图标显示在iconViewId所指定的控件中。 参数 icon icon图标资源id public void setIcon(int icon); 获取通知图标 获取设置的通知图标 public int getIcon(); 3.6 CustomNotificationBuilder API CustomNotificationBuilder用于注册用户设定好的自定义样式通知 获取CustomNotificationBuilder实例 CustomNotificationBuilder是单例类,必须通过指定接口来获取实例 public static CustomNotificationBuilder getInstance(); 注册自定义样式通知 用户创建好自定义样式通知后需要将其注册,并赋予其一个特定的id 参数 customNotificationId 所注册的自定义样式通知的id,id必须大于0。如果将多个不同的自定义样式通知赋予同一个id,则最后注册的通知有效,其他的通知将会被覆盖notification 创建的通知,该通知可以是BasicCustomPushNotification对象也可以是AdvancedCustomPushNotification对象,但是不能为null 返回 该方法会返回一个boolean类型的结果,如果返回true,则注册成功;反之则失败。 public boolean setCustomNotification(int customNotificationId, BasicCustomPushNotification notification);

2019-12-01 23:11:46 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档Android API Android SDK最新版本v3.0.11。 Android参考Demo。 API索引: 1. CloudPushSDK接口 1.1 基本设置 SDK注册SDK动态注册启动信息统计获取设备标识设置日志等级动态设置appKey动态设置appSecret打开推送通道关闭推送通道查询推送通道状态设置接收消息IntentService 1.2 账号API 绑定账号解绑账号 1.3 标签API 绑定标签解绑标签查询标签 1.4 别名API 添加别名删除别名查询别名 1.5 通知设置API 设置通知声音设置通知栏图标设置状态栏图标设置免打扰时段关闭免打扰功能删除所有通知接口 1.6 自建通知统计上报API 自建通知点击上报接口自建通知删除上报接口 1.7 电话API 绑定电话解绑电话 2. MessageReceiver/AliyunMessageIntentService相关接口 2.1 消息接收回调2.2 通知接收回调2.3 通知打开回调2.4 无跳转逻辑通知打开回调2.5 通知在应用内到达回调 3. 自定义样式通知相关接口 3.1 客户端设置通知样式3.2 后端推送消息时添加自定义样式id3.3 Example BasicCustomNotification ExampleAdvancedCustomNotification ExampleOpenAPI Example 3.4 BacisCustomNotificaiton API 默认构造函数构造函数获取状态栏图标设置状态栏图标获取提醒方式设置提醒方式获取Notification Flags参数设置Notificaiton Flags参数获取是否服务端设置优先设置是否服务端优先获取推送前台到达否创建通知参数设置推送前台到达否创建通知参数 3.5 AdvancedCustomNotification API 构造函数设置通知图标获取通知图标 3.6 CustomNotificationBuilder API 获取CustomNotificationBuilder实例注册自定义样式通知 1. CloudPushService接口 以下接口调用时,如有回调,均为异步执行,且回调不能为空。 1.1基本设置 SDK注册 初始化推送SDK,关联到云通道。 参数 context 应用上下文(需要ApplicationContext)callback 回调 void register(Context context, CommonCallback callback); SDK动态注册接口 支持动态设置appKey,appSecret的注册接口 参数 context 应用上下文(需要ApplicationContext)appKey appSecretcallback 回调 void register(Context context, String appKey, String appSecret, CommonCallback callback); 启动信息统计 统计App启动信息。 void onAppStart(); 获取设备标识 获取设备唯一标识。 返回 设备唯一标识。 String getDeviceId(); 设置日志等级 需要在通道初始化之前设置;默认日志等级为CloudPushService.ERROR; 参数 logLevel 支持设置:CloudPushService.ERROR | CloudPushService.INFO | CloudPushService.DEBUG | CloudPushService.OFF(关闭Log) void setLogLevel(int logLevel); V2.3.6及以上版本支持)" class="reference-link">动态设置appKey(V2.3.6及以上版本支持) 动态设置appKey无需在manifest配置appKey务必在调用register注册接口之前调用该接口,否则动态设置失效 参数 appKey 需要设置的appKey void setAppKey(String appKey); V2.3.6及以上版本支持)" class="reference-link">动态设置appSecret(V2.3.6及以上版本支持) 动态设置appSecret无需在manifest配置appSecret务必在调用register注册接口之前调用该接口,否则动态设置失效 参数 appSecret 需要设置的appSecret void setAppSecret(String appSecret); V3.0.3及以上版本支持)" class="reference-link">打开推送通道(V3.0.3及以上版本支持) 用于在程序运行时动态打开推送通道全量推送场景下,打开推送通道存在2-3小时延迟。其他场景实时生效 参数 callback 回调 void turnOnPushChannel(CommonCallback callback); V3.0.3及以上版本支持)" class="reference-link">关闭推送通道(V3.0.3及以上版本支持) 用于在程序运行时动态关闭推送通道全量推送场景下,关闭推送通道存在2-3小时延迟。其他场景实时生效 参数 callback 回调 void turnOffPushChannel(CommonCallback callback); V3.0.3及以上版本支持)" class="reference-link">查询推送通道状态(V3.0.3及以上版本支持) app运行时查询当前推送通道状态如果当前为打开状态,则通过callback.success(String response)回调传入’on’;反之则传入’off’ 参数 callback 回调 void checkPushChannelStatus(CommonCallback callback); V3.0.10及以上版本支持)" class="reference-link">设置消息接收IntentService(V3.0.10及以上版本支持) 通过IntentService组件接收消息回调设置后消息将通过该组件透出,不再通过MessageReceiver设置的IntentService需继承com.alibaba.sdk.android.push.AliyunMessageIntentService,并覆写相关回调方法 参数 messageIntentService 自定义接收消息IntentService的class void setPushIntentService(Class messageIntentService); 1.2 账号API 绑定账号 将应用内账号和推送通道相关联,可以实现按账号的定点消息推送;设备只能绑定一个账号,同一账号可以绑定到多个设备;同一设备更换绑定账号时无需进行解绑,重新调用绑定账号接口即可生效;若业务场景需要先解绑后绑定,在解绑账号成功回调中进行绑定绑定操作,以此保证执行的顺序性;账户名设置支持64字节。 参数 account 绑定账号名callback 回调 void bindAccount(String account, CommonCallback callback); 解绑账号 将应用内账号和推送通道取消关联。 参数 callback 回调 void unbindAccount(CommonCallback callback); 1.3 标签API 绑定标签 绑定标签到指定目标;支持向设备、账号和别名绑定标签,绑定类型由参数target指定;绑定标签在10分钟内生效;App最多支持绑定1万个标签,单个标签最大支持128字符。 参数 target 目标类型,1:本设备; 2:本设备绑定账号; 3:别名target(V2.3.5及以上版本) 目标类型,CloudPushService.DEVICE_TARGET:本设备; CloudPushService.ACCOUNT_TARGET:本账号; CloudPushService.ALIAS_TARGET:别名tags 标签(数组输入)alias 别名(仅当target = 3时生效)callback 回调 void bindTag(int target, String[] tags, String alias, CommonCallback callback); 解绑标签 解绑指定目标标签;支持解绑设备、账号和别名标签,解绑类型由参数target指定;解绑标签在10分钟内生效;解绑标签只是解除设备和标签的绑定关系,不等同于删除标签,即该APP下标签仍然存在,系统目前不支持标签的删除。 参数 target 目标类型,1:本设备; 2:本设备绑定账号; 3:别名。target(V2.3.5及以上版本) 目标类型,CloudPushService.DEVICE_TARGET:本设备; CloudPushService.ACCOUNT_TARGET:本账号; CloudPushService.ALIAS_TARGET:别名tags 标签(数组输入)alias 别名(仅当target = 3时生效)callback 回调 void unbindTag(int target, String[] tags, String alias, CommonCallback callback); 查询标签 查询目标绑定标签,当前仅支持查询设备标签;查询结果可从回调onSuccess(response)的response获取;标签绑定成功且生效(10分钟内)后即可查询。 参数 target 目标类型,1: 本设备target(V2.3.5及以上版本) 目标类型,CloudPushService.DEVICE_TARGET:本设备;callback 回调 void listTags(int target, CommonCallback callback); 1.4 别名API 添加别名 设备添加别名;单个设备最多添加128个别名,且同一别名最多添加到128个设备;别名支持128字节。 参数 alias 别名callback 回调 void addAlias(String alias, CommonCallback callback); 删除别名 删除设备别名;支持删除指定别名和删除全部别名(alias = null || alias.length = 0)。 参数 alias 别名(alias = null or alias.length = 0时,删除设备全部别名)callback 回调 void removeAlias(String alias, CommonCallback callback); 查询别名 查询设备别名;查询结果可从回调onSuccess(response)的response中获取;从V3.0.9及以上版本开始,接口内部有5s短缓存,5s内多次调用只会请求服务端一次。 参数 callback 回调 void listAliases(CommonCallback callback); 1.5 通知设置API 设置通知声音 设置推送通知声音文件路径;若不调用本接口,默认获取资源id为R.raw.alicloud_notification_sound的资源文件;若没有获取到指定声音文件,取设备设置的消息声音。 参数 filePath 通知声音文件路径 void setNotificationSoundFilePath(String filePath); 设置通知栏图标 设置推送通知栏图标资源Bitmap。若不调用本接口,默认获取id为R.drawable.alicloud_notification_largeIcon的资源文件;若没有获取到指定图标文件,取App启动图标。 参数 icon 图标资源Bitmap void setNotificationLargeIcon(Bitmap icon); 设置状态栏图标 设置推送状态栏图标资源Id;若不调用本接口,默认获取id为R.drawable.alicloud_notification_smallIcon的资源文件;若没有获取到指定资源文件Id,取App启动图标。 参数 iconId 图标资源Id void setNotificationSmallIcon(int iconId); 设置免打扰时段 设置免打扰时间段,过滤所有通知与消息;免打扰时段仅支持设置一次,多次调用以最后一次调用设置时段为准;设置免打扰时段为00:00 - 00:00,可取消免打扰功能;(以下功能支持该用法,V2.3.5及以上版本使用关闭免打扰功能接口)全天免打扰可以设置为”0:0-23:59”免打扰时段设置对小米辅助弹窗通知无效。 参数 startHour 免打扰的起始时间(小时),24小时制,取值范围:0-23startMinute 免打扰起始时间(分钟),取值范围:0-59endHour 免打扰的结束时间(小时),24小时制,取值范围:0-23endMinute 免打扰结束时间(分钟),取值范围:0-59 void setDoNotDisturb(int startHour, int startMinute, int endHour, int endMinute, CommonCallback callback); V2.3.5及以上版本支持)" class="reference-link">关闭免打扰功能(V2.3.5及以上版本支持) 关闭后,先前设置的免打扰时段失效免打扰功能默认是关闭的没有对应的开发免打扰功能接口,调用设置免打扰功能时段功能后自动打开免打扰功能 void closeDoNotDisturbMode(); V2.3.7及以上版本支持)" class="reference-link">删除所有通知接口(V2.3.7及以上版本支持) 删除推送SDK创建的所有通知若需要实现精准删除特定通知可以在onNotification回调中获取通知id,自行删除 void clearNotifications(); V3.0.6及以上版本支持)" class="reference-link">1.6 自建通知统计上报API(V3.0.6及以上版本支持) 本接口主要针对统计用户自建通知(通过阿里云推送发送透传消息,并在onMessage回调中自行创建通知)的删除/点击事件上报,其相关实现可以参考移动推送Android SDK:透传消息+用户自建通知最佳实践,如果您直接通过阿里云推送通知,无需使用相关接口。 自建通知点击上报接口 上报自建通知的点击事件请确保同一消息仅上报一次 参数 message 要上报点击事件的消息实例 void clickMessage(CPushMessage message); 自建通知删除上报接口 上报自建通知的删除事件请确保同一消息仅上报一次 参数 message 要上报删除事件的消息实例 void dismissMessage(CPushMessage message); V3.0.11及以上版本支持)" class="reference-link">1.7 电话API(V3.0.11及以上版本支持) 为提高信息的到达率和实效性,扩展推送的使用场景,我们推出了推送与短信的融合通知模式。开发者可以设置在一定时间内,如果用户未收到或未点击推送,通过短信补发通知用户。具体方案可参考:推送短信融合。 为实现推送短信融合方案,需要在终端接入绑定/解绑电话号接口,接口详情如下。 绑定电话号将设备与电话号绑定 参数 phoneNumber 要绑定的手机号callback 回调 void bindPhoneNumber(String phoneNumber, CommonCallback callback); 解绑电话号解除当前设备与电话号的绑定关系 参数 callback 回调 void unbindPhoneNumber(CommonCallback callback); 2. MessageReceiver/AliyunMessageIntentService 通过继承MessageReciever,可以拦截通知,接收消息,获取推送中的扩展字段。或者在通知打开或删除的时候,切入进行后续处理。如果调用了setPushIntentService,则需继承com.alibaba.sdk.android.push.AliyunMessageIntentService,并覆写相关方法,AliyunMessageIntentService所有消息回调同MessageReceiver一致。 使用方法: MessageReceiver 继承com.alibaba.sdk.android.push.MessageReceiver;在Manifest中找到原来MessageReceiver的配置,将上边的class替换成你自己的receiver[不要配置多个]。 <!--消息接收监听器--><receiver android:name="com.alibaba.sdk.android.push.MessageReceiver <-- 把这里替换成你自己的receiver"> <intent-filter> <action android:name="com.alibaba.push2.action.NOTIFICATION_OPENED"/> </intent-filter> ... ...</receiver> AliyunMessageIntentService 继承com.alibaba.sdk.android.push.AliyunMessageIntentService并覆写相关方法在Manifest中注册该service <service android:name="MyPushIntentService" > <intent-filter> <action android:name="com.alibaba.push2.action.NOTIFICATION_OPENED" /> </intent-filter> <intent-filter> <action android:name="com.alibaba.push2.action.NOTIFICATION_REMOVED" /> </intent-filter> <intent-filter> <action android:name="com.alibaba.sdk.android.push.RECEIVE" /> </intent-filter> </service> 消息接收回调 用于接收服务端推送的消息。消息不会弹窗,而是回调该方法。 参数 context 上下文环境message CPushMessage类型,可以获取消息Id、消息标题和内容。 void onMessage(Context context, CPushMessage message); 通知接收回调 客户端接收到通知后,回调该方法。可获取到并处理通知相关的参数。 参数 context 上下文环境title 通知标题summary 通知内容extraMap 通知额外参数,包括部分系统自带参数: _ALIYUN_NOTIFICATION_ID_(V2.3.5及以上):创建通知对应id_ALIYUN_NOTIFICATION_PRIORITY_(V2.3.5及以上):创建通知对应id。默认不带,需要通过OpenApi设置 void onNotification(Context context, String title, String summary, Map<String, String> extraMap) 通知打开回调 打开通知时会回调该方法,通知打开上报由SDK自动完成。 参数 context 上下文环境title 通知标题summary 通知内容extraMap 通知额外参数,包括部分系统自带参数: _ALIYUN_NOTIFICATION_ID_(V2.3.5及以上):创建通知对应id_ALIYUN_NOTIFICATION_PRIORITY_(V2.3.5及以上):创建通知对应id。默认不带,需要通过OpenApi设置 void onNotificationOpened(Context context, String title, String summary, String extraMap); 无跳转逻辑通知打开回调 打开无跳转逻辑(open=4)通知时回调该方法(v2.3.2及以上版本支持),通知打开上报由SDK自动完成。 参数 context 上下文环境title 通知标题summary 通知内容extraMap 通知额外参数,包括部分系统自带参数: _ALIYUN_NOTIFICATION_ID_(V2.3.5及以上):创建通知对应id_ALIYUN_NOTIFICATION_PRIORITY_(V2.3.5及以上):创建通知对应id。默认不带,需要通过OpenApi设置 void onNotificationClickedWithNoAction(Context context, String title, String summary, String extraMap); 通知删除回调 删除通知时回调该方法,通知删除上报由SDK自动完成。 参数 context 上下文环境messageId 删除通知的Id void onNotificationRemoved(Context context, String messageId); 通知在应用内到达回调 当用户创建自定义通知样式,并且设置推送应用内到达不创建通知弹窗时调用该回调,且此时不调用onNotification回调(v2.3.3及以上版本支持) 参数 context 上下文环境title 通知标题summary 通知内容extraMap 通知额外参数openType 原本通知打开方式,1:打开APP;2:打开activity;3:打开URL;4:无跳转逻辑openActivity 所要打开的activity的名称,仅当openType=2时有效,其余情况为nullopenUrl 所要打开的URL,仅当openType=3时有效,其余情况为null void onNotificationReceivedInApp(Context context, String title, String summary, Map<String, String> extraMap, int openType, String openActivity, String openUrl); V2.3.3及以上版本开始支持)" class="reference-link">3. 自定义样式通知(V2.3.3及以上版本开始支持)Android Push SDK支持用户自定义通知样式,用户可以设定自己的通知样式,涉及的内容包括通知的提醒方式(声音、震动、静默),通知在状态栏的显示图标,推送消息应用内到达时是否创建通知以及自定义通知布局文件等。自定义样式通知的设置包括两部分: 3.1 客户端设置通知样式 用户利用SDK提供的自定义通知样式接口创建自定义样式通知。SDK中有两个自定义样式通知类:1)BasicCustomPushNotification;2)AdvancedCustomPushNotification。其中BasicCustomPushNotification用户设置基础样式,包括提醒方式、状态栏图标以及当推送消息到达时应用正处于前台情况下是否创建该通知等。AdvancedCustomPushNotification是BasicCustomPushNotification的子类,继承了BasicCustomPushNotification的所有方法,同时还可以设置通知样式布局文件每个样式都需要对应一个特定的整数类型id,如果多个样式设置为同一个id,则最后设置的样式有效。如果SDK没有找到对应id的样式则会创建默认样式的通知样式只需设置一次,SDK会记住这个设置,在需要使用时加载对应样式具体使用例子请参考Demo 3.2 后端推送消息时添加自定义样式id 用户利用OpenApi推送消息时设定特定样式的id服务端不能设置样式,只能指定需要展现的样式id指定id的样式必须在客户端已经进行设置,否则SDK会创建默认样式的通知 3.3 Example BasicCustomPushNotification" class="reference-link">Example-BasicCustomPushNotificationBasicCustomPushNotification notification = new BasicCustomPushNotification();notification.setRemindType(BasicCustomPushNotification.REMIND_TYPE_SOUND);notification.setStatusBarDrawable(R.drawable.logo_yuanjiao_120);boolean res = CustomNotificationBuilder.getInstance().setCustomNotification(1, notification); AdvancedCustomPushNotification" class="reference-link">Example-AdvancedCustomPushNotificationAdvancedCustomPushNotification notification = new AdvancedCustomPushNotification(R.layout.notitfication_layout, R.id.m_icon, R.id.m_title, R.id.m_text);notification.setServerOptionFirst(true);notification.setBuildWhenAppInForeground(false);boolean res = CustomNotificationBuilder.getInstance().setCustomNotification(2, notification); OpenApi" class="reference-link">Example-OpenApi客户端设置完成后,服务端在推送通知时需要利用OpenApi指明对应的自定义样式ID final SimpleDateFormat dateFormat = new SimpleDateFormat("MM-dd HH:mm:ss");final String date = dateFormat.format(new Date());PushRequest pushRequest = new PushRequest();// 推送目标pushRequest.setAppKey(appKey);pushRequest.setTarget("device"); //推送目标: device:推送给设备; account:推送给指定帐号,tag:推送给自定义标签; all: 推送给全部pushRequest.setTargetValue("deviceId"); // 推送配置pushRequest.setType(1); // 0:表示消息(默认为0), 1:表示通知pushRequest.setTitle(date); // 消息的标题pushRequest.setBody("PushRequest body"); // 消息的内容pushRequest.setSummary("PushRequest summary"); // 通知的摘要pushRequest.setAndroidNotificationBarType(2);//设置的通知样式ID,通知栏自定义样式范围0-100// 推送配置: AndroidpushRequest.setAndroidOpenType("1"); // 点击通知后动作,1:打开应用 2: 打开应用Activity 3:打开 urlpushRequest.setAndroidExtParameters("{\"_NOTIFICATION_BAR_STYLE_\":\"2\"}"); 3.4 BasicCustomPushNotification API 默认构造函数 BasicCustomPushNotification的默认构造函数,所有配置采用默认设置:通知方式采用震动+通知;NotificationFlag采用Notification.FLAG_AUTO_CANCEL,状态栏图标用的是android.R.drawable.stat_notify_chat。 public BasicCustomPushNotification(); 构造函数参数 drawable 状态栏图标flags NotificationFlags,支持系统Notification下的Flag参数remindType 提醒类型,有BasicCustomPushNotification.REMIND_TYPE_SILENT:静默;BasicCustomPushNotification.REMIND_TYPE_VIBRATE:震动;BasicCustomPushNotification.REMIND_TYPE_SOUND:声音;BasicCustomPushNotification.REMIND_TYPE_VIBRATE_AND_SOUND:声音+震动 public BasicCustomPushNotification(int drawable, int flags, int remindType); 获取状态栏图标 获取已设置的状态栏图标 public int getStatusBarDrawable() 设置状态栏图标 更改状态栏图标设置 参数 statusBarDrawable 状态栏图标资源id public void setStatusBarDrawable(int statusBarDrawable); 获取提醒方式 获取已经设置的提醒方式 public int getRemindType(); 设置提醒方式 更改自定义通知的提醒方式 参数 remindType 提醒方式,提供的参数有:BasicCustomPushNotification.REMIND_TYPE_SILENT:静默;BasicCustomPushNotification.REMIND_TYPE_VIBRATE:震动;BasicCustomPushNotification.REMIND_TYPE_SOUND:声音;BasicCustomPushNotification.REMIND_TYPE_VIBRATE_AND_SOUND:声音+震动 public void setRemindType(int remindType); 获取Notification Flags参数 获取已经设置的notification flag参数 public int getNotificationFlags(); 设置Notification Flags参数 更改自定义通知的flags参数 参数 notificationFlags 支持系统自带的Notification Flag参数 public void setNotificationFlags(int notificationFlags); 获取是否服务端设置优先 利用OpenApi或者阿里云推送控制台推送消息都可以设置提醒方式,当后端设置的提醒方式和自定义样式提醒方式冲突时,SDK根据serverOptionFirst参数来判断提醒方式策略。如果该参数为true,则采用后端设定的提醒方式;如果该参数为false,则采用自定义样式指定的提醒方式。默认为false public boolean isServerOptionFirst(); 设置是否服务端优先 更改自定义通知的serverOptionFirst参数 参数 serverOptionFirst 是否服务器配置优先 public void setServerOptionFirst(boolean serverOptionFirst); 获取推送前台到达否创建通知参数 当推送到达时,如果应用处在前台,用户可以通过自定义样式决定是否创建通知。默认是创建通知 public boolean isBuildWhenAppInForeground(); 设置推送前台到达否创建通知参数 更改当推送到达时应用处在前台情况下是否创建通知的设置 参数 buildWhenAppInForeground 是否创建通知 public void setBuildWhenAppInForeground(boolean buildWhenAppInForeground); 3.5 AdvancedCustomPushNotification API AdvancedCustomPushNotification是BasicCustomPushNotification的子类,继承了上文中BasicCustomPushNotification的所有方法。 AdvancedCustomPushNotification构造函数 AdvancedCustomPushNotification类的构造函数,AdvancedCustomPushNotification没有默认构造函数 参数 view 自定义通知布局文件id。注:Notification的自定义布局是RemoteViews,和其他RemoteViews一样,在自定义视图布局文件中,仅支持FrameLayout、LinearLayout、RelativeLayout三种布局。iconViewId 自定义布局文件中icon的viewIdtitleViewId 自定义布局文件中title的viewIdcontentViewId 自定义布局文件中显示通知正文的viewId public AdvancedCustomPushNotification( int view, int iconViewId, int titleViewId, int contentViewId); 设置通知图标 设置通知栏中显示的图标,该图标显示在iconViewId所指定的控件中。 参数 icon icon图标资源id public void setIcon(int icon); 获取通知图标 获取设置的通知图标 public int getIcon(); 3.6 CustomNotificationBuilder API CustomNotificationBuilder用于注册用户设定好的自定义样式通知 获取CustomNotificationBuilder实例 CustomNotificationBuilder是单例类,必须通过指定接口来获取实例 public static CustomNotificationBuilder getInstance(); 注册自定义样式通知 用户创建好自定义样式通知后需要将其注册,并赋予其一个特定的id 参数 customNotificationId 所注册的自定义样式通知的id,id必须大于0。如果将多个不同的自定义样式通知赋予同一个id,则最后注册的通知有效,其他的通知将会被覆盖notification 创建的通知,该通知可以是BasicCustomPushNotification对象也可以是AdvancedCustomPushNotification对象,但是不能为null 返回 该方法会返回一个boolean类型的结果,如果返回true,则注册成功;反之则失败。 public boolean setCustomNotification(int customNotificationId, BasicCustomPushNotification notification);

2019-12-01 23:11:46 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档Android API Android SDK最新版本v3.0.11。 Android参考Demo。 API索引: 1. CloudPushSDK接口 1.1 基本设置 SDK注册SDK动态注册启动信息统计获取设备标识设置日志等级动态设置appKey动态设置appSecret打开推送通道关闭推送通道查询推送通道状态设置接收消息IntentService 1.2 账号API 绑定账号解绑账号 1.3 标签API 绑定标签解绑标签查询标签 1.4 别名API 添加别名删除别名查询别名 1.5 通知设置API 设置通知声音设置通知栏图标设置状态栏图标设置免打扰时段关闭免打扰功能删除所有通知接口 1.6 自建通知统计上报API 自建通知点击上报接口自建通知删除上报接口 1.7 电话API 绑定电话解绑电话 2. MessageReceiver/AliyunMessageIntentService相关接口 2.1 消息接收回调2.2 通知接收回调2.3 通知打开回调2.4 无跳转逻辑通知打开回调2.5 通知在应用内到达回调 3. 自定义样式通知相关接口 3.1 客户端设置通知样式3.2 后端推送消息时添加自定义样式id3.3 Example BasicCustomNotification ExampleAdvancedCustomNotification ExampleOpenAPI Example 3.4 BacisCustomNotificaiton API 默认构造函数构造函数获取状态栏图标设置状态栏图标获取提醒方式设置提醒方式获取Notification Flags参数设置Notificaiton Flags参数获取是否服务端设置优先设置是否服务端优先获取推送前台到达否创建通知参数设置推送前台到达否创建通知参数 3.5 AdvancedCustomNotification API 构造函数设置通知图标获取通知图标 3.6 CustomNotificationBuilder API 获取CustomNotificationBuilder实例注册自定义样式通知 1. CloudPushService接口 以下接口调用时,如有回调,均为异步执行,且回调不能为空。 1.1基本设置 SDK注册 初始化推送SDK,关联到云通道。 参数 context 应用上下文(需要ApplicationContext)callback 回调 void register(Context context, CommonCallback callback); SDK动态注册接口 支持动态设置appKey,appSecret的注册接口 参数 context 应用上下文(需要ApplicationContext)appKey appSecretcallback 回调 void register(Context context, String appKey, String appSecret, CommonCallback callback); 启动信息统计 统计App启动信息。 void onAppStart(); 获取设备标识 获取设备唯一标识。 返回 设备唯一标识。 String getDeviceId(); 设置日志等级 需要在通道初始化之前设置;默认日志等级为CloudPushService.ERROR; 参数 logLevel 支持设置:CloudPushService.ERROR | CloudPushService.INFO | CloudPushService.DEBUG | CloudPushService.OFF(关闭Log) void setLogLevel(int logLevel); V2.3.6及以上版本支持)" class="reference-link">动态设置appKey(V2.3.6及以上版本支持) 动态设置appKey无需在manifest配置appKey务必在调用register注册接口之前调用该接口,否则动态设置失效 参数 appKey 需要设置的appKey void setAppKey(String appKey); V2.3.6及以上版本支持)" class="reference-link">动态设置appSecret(V2.3.6及以上版本支持) 动态设置appSecret无需在manifest配置appSecret务必在调用register注册接口之前调用该接口,否则动态设置失效 参数 appSecret 需要设置的appSecret void setAppSecret(String appSecret); V3.0.3及以上版本支持)" class="reference-link">打开推送通道(V3.0.3及以上版本支持) 用于在程序运行时动态打开推送通道全量推送场景下,打开推送通道存在2-3小时延迟。其他场景实时生效 参数 callback 回调 void turnOnPushChannel(CommonCallback callback); V3.0.3及以上版本支持)" class="reference-link">关闭推送通道(V3.0.3及以上版本支持) 用于在程序运行时动态关闭推送通道全量推送场景下,关闭推送通道存在2-3小时延迟。其他场景实时生效 参数 callback 回调 void turnOffPushChannel(CommonCallback callback); V3.0.3及以上版本支持)" class="reference-link">查询推送通道状态(V3.0.3及以上版本支持) app运行时查询当前推送通道状态如果当前为打开状态,则通过callback.success(String response)回调传入’on’;反之则传入’off’ 参数 callback 回调 void checkPushChannelStatus(CommonCallback callback); V3.0.10及以上版本支持)" class="reference-link">设置消息接收IntentService(V3.0.10及以上版本支持) 通过IntentService组件接收消息回调设置后消息将通过该组件透出,不再通过MessageReceiver设置的IntentService需继承com.alibaba.sdk.android.push.AliyunMessageIntentService,并覆写相关回调方法 参数 messageIntentService 自定义接收消息IntentService的class void setPushIntentService(Class messageIntentService); 1.2 账号API 绑定账号 将应用内账号和推送通道相关联,可以实现按账号的定点消息推送;设备只能绑定一个账号,同一账号可以绑定到多个设备;同一设备更换绑定账号时无需进行解绑,重新调用绑定账号接口即可生效;若业务场景需要先解绑后绑定,在解绑账号成功回调中进行绑定绑定操作,以此保证执行的顺序性;账户名设置支持64字节。 参数 account 绑定账号名callback 回调 void bindAccount(String account, CommonCallback callback); 解绑账号 将应用内账号和推送通道取消关联。 参数 callback 回调 void unbindAccount(CommonCallback callback); 1.3 标签API 绑定标签 绑定标签到指定目标;支持向设备、账号和别名绑定标签,绑定类型由参数target指定;绑定标签在10分钟内生效;App最多支持绑定1万个标签,单个标签最大支持128字符。 参数 target 目标类型,1:本设备; 2:本设备绑定账号; 3:别名target(V2.3.5及以上版本) 目标类型,CloudPushService.DEVICE_TARGET:本设备; CloudPushService.ACCOUNT_TARGET:本账号; CloudPushService.ALIAS_TARGET:别名tags 标签(数组输入)alias 别名(仅当target = 3时生效)callback 回调 void bindTag(int target, String[] tags, String alias, CommonCallback callback); 解绑标签 解绑指定目标标签;支持解绑设备、账号和别名标签,解绑类型由参数target指定;解绑标签在10分钟内生效;解绑标签只是解除设备和标签的绑定关系,不等同于删除标签,即该APP下标签仍然存在,系统目前不支持标签的删除。 参数 target 目标类型,1:本设备; 2:本设备绑定账号; 3:别名。target(V2.3.5及以上版本) 目标类型,CloudPushService.DEVICE_TARGET:本设备; CloudPushService.ACCOUNT_TARGET:本账号; CloudPushService.ALIAS_TARGET:别名tags 标签(数组输入)alias 别名(仅当target = 3时生效)callback 回调 void unbindTag(int target, String[] tags, String alias, CommonCallback callback); 查询标签 查询目标绑定标签,当前仅支持查询设备标签;查询结果可从回调onSuccess(response)的response获取;标签绑定成功且生效(10分钟内)后即可查询。 参数 target 目标类型,1: 本设备target(V2.3.5及以上版本) 目标类型,CloudPushService.DEVICE_TARGET:本设备;callback 回调 void listTags(int target, CommonCallback callback); 1.4 别名API 添加别名 设备添加别名;单个设备最多添加128个别名,且同一别名最多添加到128个设备;别名支持128字节。 参数 alias 别名callback 回调 void addAlias(String alias, CommonCallback callback); 删除别名 删除设备别名;支持删除指定别名和删除全部别名(alias = null || alias.length = 0)。 参数 alias 别名(alias = null or alias.length = 0时,删除设备全部别名)callback 回调 void removeAlias(String alias, CommonCallback callback); 查询别名 查询设备别名;查询结果可从回调onSuccess(response)的response中获取;从V3.0.9及以上版本开始,接口内部有5s短缓存,5s内多次调用只会请求服务端一次。 参数 callback 回调 void listAliases(CommonCallback callback); 1.5 通知设置API 设置通知声音 设置推送通知声音文件路径;若不调用本接口,默认获取资源id为R.raw.alicloud_notification_sound的资源文件;若没有获取到指定声音文件,取设备设置的消息声音。 参数 filePath 通知声音文件路径 void setNotificationSoundFilePath(String filePath); 设置通知栏图标 设置推送通知栏图标资源Bitmap。若不调用本接口,默认获取id为R.drawable.alicloud_notification_largeIcon的资源文件;若没有获取到指定图标文件,取App启动图标。 参数 icon 图标资源Bitmap void setNotificationLargeIcon(Bitmap icon); 设置状态栏图标 设置推送状态栏图标资源Id;若不调用本接口,默认获取id为R.drawable.alicloud_notification_smallIcon的资源文件;若没有获取到指定资源文件Id,取App启动图标。 参数 iconId 图标资源Id void setNotificationSmallIcon(int iconId); 设置免打扰时段 设置免打扰时间段,过滤所有通知与消息;免打扰时段仅支持设置一次,多次调用以最后一次调用设置时段为准;设置免打扰时段为00:00 - 00:00,可取消免打扰功能;(以下功能支持该用法,V2.3.5及以上版本使用关闭免打扰功能接口)全天免打扰可以设置为”0:0-23:59”免打扰时段设置对小米辅助弹窗通知无效。 参数 startHour 免打扰的起始时间(小时),24小时制,取值范围:0-23startMinute 免打扰起始时间(分钟),取值范围:0-59endHour 免打扰的结束时间(小时),24小时制,取值范围:0-23endMinute 免打扰结束时间(分钟),取值范围:0-59 void setDoNotDisturb(int startHour, int startMinute, int endHour, int endMinute, CommonCallback callback); V2.3.5及以上版本支持)" class="reference-link">关闭免打扰功能(V2.3.5及以上版本支持) 关闭后,先前设置的免打扰时段失效免打扰功能默认是关闭的没有对应的开发免打扰功能接口,调用设置免打扰功能时段功能后自动打开免打扰功能 void closeDoNotDisturbMode(); V2.3.7及以上版本支持)" class="reference-link">删除所有通知接口(V2.3.7及以上版本支持) 删除推送SDK创建的所有通知若需要实现精准删除特定通知可以在onNotification回调中获取通知id,自行删除 void clearNotifications(); V3.0.6及以上版本支持)" class="reference-link">1.6 自建通知统计上报API(V3.0.6及以上版本支持) 本接口主要针对统计用户自建通知(通过阿里云推送发送透传消息,并在onMessage回调中自行创建通知)的删除/点击事件上报,其相关实现可以参考移动推送Android SDK:透传消息+用户自建通知最佳实践,如果您直接通过阿里云推送通知,无需使用相关接口。 自建通知点击上报接口 上报自建通知的点击事件请确保同一消息仅上报一次 参数 message 要上报点击事件的消息实例 void clickMessage(CPushMessage message); 自建通知删除上报接口 上报自建通知的删除事件请确保同一消息仅上报一次 参数 message 要上报删除事件的消息实例 void dismissMessage(CPushMessage message); V3.0.11及以上版本支持)" class="reference-link">1.7 电话API(V3.0.11及以上版本支持) 为提高信息的到达率和实效性,扩展推送的使用场景,我们推出了推送与短信的融合通知模式。开发者可以设置在一定时间内,如果用户未收到或未点击推送,通过短信补发通知用户。具体方案可参考:推送短信融合。 为实现推送短信融合方案,需要在终端接入绑定/解绑电话号接口,接口详情如下。 绑定电话号将设备与电话号绑定 参数 phoneNumber 要绑定的手机号callback 回调 void bindPhoneNumber(String phoneNumber, CommonCallback callback); 解绑电话号解除当前设备与电话号的绑定关系 参数 callback 回调 void unbindPhoneNumber(CommonCallback callback); 2. MessageReceiver/AliyunMessageIntentService 通过继承MessageReciever,可以拦截通知,接收消息,获取推送中的扩展字段。或者在通知打开或删除的时候,切入进行后续处理。如果调用了setPushIntentService,则需继承com.alibaba.sdk.android.push.AliyunMessageIntentService,并覆写相关方法,AliyunMessageIntentService所有消息回调同MessageReceiver一致。 使用方法: MessageReceiver 继承com.alibaba.sdk.android.push.MessageReceiver;在Manifest中找到原来MessageReceiver的配置,将上边的class替换成你自己的receiver[不要配置多个]。 <!--消息接收监听器--><receiver android:name="com.alibaba.sdk.android.push.MessageReceiver <-- 把这里替换成你自己的receiver"> <intent-filter> <action android:name="com.alibaba.push2.action.NOTIFICATION_OPENED"/> </intent-filter> ... ...</receiver> AliyunMessageIntentService 继承com.alibaba.sdk.android.push.AliyunMessageIntentService并覆写相关方法在Manifest中注册该service <service android:name="MyPushIntentService" > <intent-filter> <action android:name="com.alibaba.push2.action.NOTIFICATION_OPENED" /> </intent-filter> <intent-filter> <action android:name="com.alibaba.push2.action.NOTIFICATION_REMOVED" /> </intent-filter> <intent-filter> <action android:name="com.alibaba.sdk.android.push.RECEIVE" /> </intent-filter> </service> 消息接收回调 用于接收服务端推送的消息。消息不会弹窗,而是回调该方法。 参数 context 上下文环境message CPushMessage类型,可以获取消息Id、消息标题和内容。 void onMessage(Context context, CPushMessage message); 通知接收回调 客户端接收到通知后,回调该方法。可获取到并处理通知相关的参数。 参数 context 上下文环境title 通知标题summary 通知内容extraMap 通知额外参数,包括部分系统自带参数: _ALIYUN_NOTIFICATION_ID_(V2.3.5及以上):创建通知对应id_ALIYUN_NOTIFICATION_PRIORITY_(V2.3.5及以上):创建通知对应id。默认不带,需要通过OpenApi设置 void onNotification(Context context, String title, String summary, Map<String, String> extraMap) 通知打开回调 打开通知时会回调该方法,通知打开上报由SDK自动完成。 参数 context 上下文环境title 通知标题summary 通知内容extraMap 通知额外参数,包括部分系统自带参数: _ALIYUN_NOTIFICATION_ID_(V2.3.5及以上):创建通知对应id_ALIYUN_NOTIFICATION_PRIORITY_(V2.3.5及以上):创建通知对应id。默认不带,需要通过OpenApi设置 void onNotificationOpened(Context context, String title, String summary, String extraMap); 无跳转逻辑通知打开回调 打开无跳转逻辑(open=4)通知时回调该方法(v2.3.2及以上版本支持),通知打开上报由SDK自动完成。 参数 context 上下文环境title 通知标题summary 通知内容extraMap 通知额外参数,包括部分系统自带参数: _ALIYUN_NOTIFICATION_ID_(V2.3.5及以上):创建通知对应id_ALIYUN_NOTIFICATION_PRIORITY_(V2.3.5及以上):创建通知对应id。默认不带,需要通过OpenApi设置 void onNotificationClickedWithNoAction(Context context, String title, String summary, String extraMap); 通知删除回调 删除通知时回调该方法,通知删除上报由SDK自动完成。 参数 context 上下文环境messageId 删除通知的Id void onNotificationRemoved(Context context, String messageId); 通知在应用内到达回调 当用户创建自定义通知样式,并且设置推送应用内到达不创建通知弹窗时调用该回调,且此时不调用onNotification回调(v2.3.3及以上版本支持) 参数 context 上下文环境title 通知标题summary 通知内容extraMap 通知额外参数openType 原本通知打开方式,1:打开APP;2:打开activity;3:打开URL;4:无跳转逻辑openActivity 所要打开的activity的名称,仅当openType=2时有效,其余情况为nullopenUrl 所要打开的URL,仅当openType=3时有效,其余情况为null void onNotificationReceivedInApp(Context context, String title, String summary, Map<String, String> extraMap, int openType, String openActivity, String openUrl); V2.3.3及以上版本开始支持)" class="reference-link">3. 自定义样式通知(V2.3.3及以上版本开始支持)Android Push SDK支持用户自定义通知样式,用户可以设定自己的通知样式,涉及的内容包括通知的提醒方式(声音、震动、静默),通知在状态栏的显示图标,推送消息应用内到达时是否创建通知以及自定义通知布局文件等。自定义样式通知的设置包括两部分: 3.1 客户端设置通知样式 用户利用SDK提供的自定义通知样式接口创建自定义样式通知。SDK中有两个自定义样式通知类:1)BasicCustomPushNotification;2)AdvancedCustomPushNotification。其中BasicCustomPushNotification用户设置基础样式,包括提醒方式、状态栏图标以及当推送消息到达时应用正处于前台情况下是否创建该通知等。AdvancedCustomPushNotification是BasicCustomPushNotification的子类,继承了BasicCustomPushNotification的所有方法,同时还可以设置通知样式布局文件每个样式都需要对应一个特定的整数类型id,如果多个样式设置为同一个id,则最后设置的样式有效。如果SDK没有找到对应id的样式则会创建默认样式的通知样式只需设置一次,SDK会记住这个设置,在需要使用时加载对应样式具体使用例子请参考Demo 3.2 后端推送消息时添加自定义样式id 用户利用OpenApi推送消息时设定特定样式的id服务端不能设置样式,只能指定需要展现的样式id指定id的样式必须在客户端已经进行设置,否则SDK会创建默认样式的通知 3.3 Example BasicCustomPushNotification" class="reference-link">Example-BasicCustomPushNotificationBasicCustomPushNotification notification = new BasicCustomPushNotification();notification.setRemindType(BasicCustomPushNotification.REMIND_TYPE_SOUND);notification.setStatusBarDrawable(R.drawable.logo_yuanjiao_120);boolean res = CustomNotificationBuilder.getInstance().setCustomNotification(1, notification); AdvancedCustomPushNotification" class="reference-link">Example-AdvancedCustomPushNotificationAdvancedCustomPushNotification notification = new AdvancedCustomPushNotification(R.layout.notitfication_layout, R.id.m_icon, R.id.m_title, R.id.m_text);notification.setServerOptionFirst(true);notification.setBuildWhenAppInForeground(false);boolean res = CustomNotificationBuilder.getInstance().setCustomNotification(2, notification); OpenApi" class="reference-link">Example-OpenApi客户端设置完成后,服务端在推送通知时需要利用OpenApi指明对应的自定义样式ID final SimpleDateFormat dateFormat = new SimpleDateFormat("MM-dd HH:mm:ss");final String date = dateFormat.format(new Date());PushRequest pushRequest = new PushRequest();// 推送目标pushRequest.setAppKey(appKey);pushRequest.setTarget("device"); //推送目标: device:推送给设备; account:推送给指定帐号,tag:推送给自定义标签; all: 推送给全部pushRequest.setTargetValue("deviceId"); // 推送配置pushRequest.setType(1); // 0:表示消息(默认为0), 1:表示通知pushRequest.setTitle(date); // 消息的标题pushRequest.setBody("PushRequest body"); // 消息的内容pushRequest.setSummary("PushRequest summary"); // 通知的摘要pushRequest.setAndroidNotificationBarType(2);//设置的通知样式ID,通知栏自定义样式范围0-100// 推送配置: AndroidpushRequest.setAndroidOpenType("1"); // 点击通知后动作,1:打开应用 2: 打开应用Activity 3:打开 urlpushRequest.setAndroidExtParameters("{\"_NOTIFICATION_BAR_STYLE_\":\"2\"}"); 3.4 BasicCustomPushNotification API 默认构造函数 BasicCustomPushNotification的默认构造函数,所有配置采用默认设置:通知方式采用震动+通知;NotificationFlag采用Notification.FLAG_AUTO_CANCEL,状态栏图标用的是android.R.drawable.stat_notify_chat。 public BasicCustomPushNotification(); 构造函数参数 drawable 状态栏图标flags NotificationFlags,支持系统Notification下的Flag参数remindType 提醒类型,有BasicCustomPushNotification.REMIND_TYPE_SILENT:静默;BasicCustomPushNotification.REMIND_TYPE_VIBRATE:震动;BasicCustomPushNotification.REMIND_TYPE_SOUND:声音;BasicCustomPushNotification.REMIND_TYPE_VIBRATE_AND_SOUND:声音+震动 public BasicCustomPushNotification(int drawable, int flags, int remindType); 获取状态栏图标 获取已设置的状态栏图标 public int getStatusBarDrawable() 设置状态栏图标 更改状态栏图标设置 参数 statusBarDrawable 状态栏图标资源id public void setStatusBarDrawable(int statusBarDrawable); 获取提醒方式 获取已经设置的提醒方式 public int getRemindType(); 设置提醒方式 更改自定义通知的提醒方式 参数 remindType 提醒方式,提供的参数有:BasicCustomPushNotification.REMIND_TYPE_SILENT:静默;BasicCustomPushNotification.REMIND_TYPE_VIBRATE:震动;BasicCustomPushNotification.REMIND_TYPE_SOUND:声音;BasicCustomPushNotification.REMIND_TYPE_VIBRATE_AND_SOUND:声音+震动 public void setRemindType(int remindType); 获取Notification Flags参数 获取已经设置的notification flag参数 public int getNotificationFlags(); 设置Notification Flags参数 更改自定义通知的flags参数 参数 notificationFlags 支持系统自带的Notification Flag参数 public void setNotificationFlags(int notificationFlags); 获取是否服务端设置优先 利用OpenApi或者阿里云推送控制台推送消息都可以设置提醒方式,当后端设置的提醒方式和自定义样式提醒方式冲突时,SDK根据serverOptionFirst参数来判断提醒方式策略。如果该参数为true,则采用后端设定的提醒方式;如果该参数为false,则采用自定义样式指定的提醒方式。默认为false public boolean isServerOptionFirst(); 设置是否服务端优先 更改自定义通知的serverOptionFirst参数 参数 serverOptionFirst 是否服务器配置优先 public void setServerOptionFirst(boolean serverOptionFirst); 获取推送前台到达否创建通知参数 当推送到达时,如果应用处在前台,用户可以通过自定义样式决定是否创建通知。默认是创建通知 public boolean isBuildWhenAppInForeground(); 设置推送前台到达否创建通知参数 更改当推送到达时应用处在前台情况下是否创建通知的设置 参数 buildWhenAppInForeground 是否创建通知 public void setBuildWhenAppInForeground(boolean buildWhenAppInForeground); 3.5 AdvancedCustomPushNotification API AdvancedCustomPushNotification是BasicCustomPushNotification的子类,继承了上文中BasicCustomPushNotification的所有方法。 AdvancedCustomPushNotification构造函数 AdvancedCustomPushNotification类的构造函数,AdvancedCustomPushNotification没有默认构造函数 参数 view 自定义通知布局文件id。注:Notification的自定义布局是RemoteViews,和其他RemoteViews一样,在自定义视图布局文件中,仅支持FrameLayout、LinearLayout、RelativeLayout三种布局。iconViewId 自定义布局文件中icon的viewIdtitleViewId 自定义布局文件中title的viewIdcontentViewId 自定义布局文件中显示通知正文的viewId public AdvancedCustomPushNotification( int view, int iconViewId, int titleViewId, int contentViewId); 设置通知图标 设置通知栏中显示的图标,该图标显示在iconViewId所指定的控件中。 参数 icon icon图标资源id public void setIcon(int icon); 获取通知图标 获取设置的通知图标 public int getIcon(); 3.6 CustomNotificationBuilder API CustomNotificationBuilder用于注册用户设定好的自定义样式通知 获取CustomNotificationBuilder实例 CustomNotificationBuilder是单例类,必须通过指定接口来获取实例 public static CustomNotificationBuilder getInstance(); 注册自定义样式通知 用户创建好自定义样式通知后需要将其注册,并赋予其一个特定的id 参数 customNotificationId 所注册的自定义样式通知的id,id必须大于0。如果将多个不同的自定义样式通知赋予同一个id,则最后注册的通知有效,其他的通知将会被覆盖notification 创建的通知,该通知可以是BasicCustomPushNotification对象也可以是AdvancedCustomPushNotification对象,但是不能为null 返回 该方法会返回一个boolean类型的结果,如果返回true,则注册成功;反之则失败。 public boolean setCustomNotification(int customNotificationId, BasicCustomPushNotification notification);

2019-12-01 23:11:48 0 浏览量 回答数 0
阿里云大学 云服务器ECS com域名 网站域名whois查询 开发者平台 小程序定制 小程序开发 国内短信套餐包 开发者技术与产品 云数据库 图像识别 开发者问答 阿里云建站 阿里云备案 云市场 万网 阿里云帮助文档 免费套餐 开发者工具 云栖号物联网 小程序开发制作 视频内容分析 企业网站制作 视频集锦 代理记账服务 2020阿里巴巴研发效能峰会 企业建站模板 云效成长地图 高端建站 云栖号弹性计算 阿里云云栖号 云栖号案例 云栖号直播