极光推送的角标问题——让人又爱又恨的小红点

UniApp消息角标避坑大全:从极光推送到H5+ API的完整实现路径 本文详细解析了UniApp中实现消息角标的完整方案,涵盖极光推送与H5+ API的协作实践。针对安卓平台碎片化问题,提供了厂商适配指南和避坑技巧,帮助开发者解决角标显示、权限控制等核心挑战,提升实时消息通知的用户体验。 阅读详情

我们现在无论何时拿出自己的手机,解锁后的主页上,总能看到一个个的小红点,仿佛在呐喊:有消息啦,不管重不重要,快点我,快来消除我。

甚至曾有人掀起了一波潮流:在微信头像上加上小红点。这很直接很彻底地引发了大众的清除强迫症。

这也就是为什么我们做 App 的时候,希望在收到了推送消息时,App 能带上一个小红点。在使用得当的情况下,小红点有助于增加 App 的启动率,保持用户粘度。

那么 App 端怎么来实现呢?小红点中心的数值怎么来管理呢?


Android

  • 角标不是 Android 的基本功能,也就是说 Google 原生系统是不支持的,不过国内某些 ROM 提供了各自的方法来支持自定义实现,只是跟随系统更新,提供的方法可能还会有所改变。因此极光推送并没有支持 Android 的角标,需要大家自己去实现与管理角标值。
  • 分享几个实现 Android badge 的项目

iOS

一、客户端设置角标

  • 设置本地显示的角标(Apple官方的接口)
[[UIApplication sharedApplication] setApplicationIconBadgeNumber:(int)value];
[[UIApplication sharedApplication] setApplicationIconBadgeNumber:0]; //清除角标
//以上方法在任何地方均可调用,根据自己的需要设定即可。譬如:

//杀死后点击icon进入时清除角标
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
application.applicationIconBadgeNumber = 0;
}
//从后台点击icon进入时清除角标
func applicationWillEnterForeground(_ application: UIApplication) {
application.applicationIconBadgeNumber = 0;
}
  • 设置极光服务器存储的角标
+ (BOOL)setBadge:(int)value  //value 取值范围:[0,99999]
+ (void)resetBadge  //相当于  [setBadge:0],清空角标

设通过调用 API ,使极光服务器为A设备存储的角标数为 P,为 B 设备存储的角标数为 Q。

二、服务端或控制台推送时,badge可设置为 N,+N,-N

//服务端发送 json 消息串
{
    "notification" : {
         "ios" : {
                 "alert" : "hello, JPush!", 
                 "sound" : "sound.caf", 
                 "badge" : 1, //可传值为N,+N,-N。
                 }
            }
       }
}   

控制台的设置 badge 的步骤:推送>发送通知>选择一个iOS目标平台>展开可选设置> iOS > badge

  • N:推送时设置为固定的数值,收到时角标便显示该数值。
  • +N 或 -N:收到时角标值 = 极光服务器存储的值 ± N:
    • A 收到时角标为 P ± N,B 收到时角标为 Q ± N。
    • 因此如果推送时使用 ± N,那么客户端就需要注意本地和极光服务器的角标应同步设置。
    • 很多人问咋个角标清除不了,清除后再次推送收到的却依旧是 清除前的值+N,这就是因为 服务器存储的角标你没同步修改咯。

这里应该有注意到,极光服务器帮大家完成了每个设备的角标的管理,所以一般使用的时候只需要在客户端预设好角标的处理逻辑,推送时固定好 + N,就可以不用再自己操心 badge 的值了。

三、使用官方提供的服务端 SDK 各有不同

//java sdk 设置 badge+1用的不是setBadge,而是autoBadge或者incrBadge

//C# SDK 设置 badge +1 用的是incrBadge

作者:末日云游 - 极光

原文:极光推送的角标问题 —— 让人又爱又恨的小红点

知乎专栏:极光日报

极光推送,角标实现,服务器,Android端完整Demo 本次实现了用户登录注册,将用户保存到Application 里面实现用户持久化,用户有已读消息查看,未读消息查看,发送消息功能,未读消息读取后,添加到已读消息里面,发送消息具有 推送功能 可以全部发送,和选择人员发送,发送消息过后,如果当前用户在线会收到一条任务栏通知,点击通知可以查看到该消息,登录App时 ,APP应用会生成,未读信息角标,(实现了vivo和小米。 立即下载

相关推荐

RYU+Mininet的SDN架构-设计校园网络(一)

现有一个中学,需要设计一个中小型网络满足学校的网络需求。学校有教学区,实验室区域和服务器区域。教学区为了满足接入的灵活性和信号强度要求,需要满足设计WIFI满足日常教室和同学需求,接入上限为200人。实验室区域需要有一台教师主机方便管理实验室其余电脑,并且教师主机可以访问学校服务器,方便为同学们实验室授课。学校服务器区域设有学校相关重要文件和学校网页相关内容。最后学校还会接入互联网。

weixin_53284122的博客 8034

android手机收到消息推送无法显示,部分安卓手机收不到推送消息的解决方法(附图例)...

最近有部分安卓用户(尤其华为),反馈老师的推送消息收取不到,或不及时,或部分能收到。经过技术人员的排查,总结了一下推送设置的经验。需要2个基本设置:1. 手机允许接受爱股票的通知;确定位置:设置-应用程序管理-爱股票-允许通知打开;2. 爱股票内部设置;确定位置:打开爱股票APP-左上角头像-系统设置-推送设置-确保推送设置都是打开的。用户可灵活选择接受推送的消息类型。理论上来说,上述2个设置均为...

weixin_31874327的博客 7979

智能车学习日记【二】————十字和斜入十字

智能车学习日记【二】————十字和斜入十字 文章目录 智能车学习日记【二】————十字和斜入十字 前言 一、普通十字补线 二、斜入十字 1.判断是否为斜入十字和斜入十字类型 2.找斜入十字拐点 总结 前言 经过了一个多月的学习,小白的我终于也是能较稳定调出了2.8m以上的四轮车,过程中也遇到了很多困难,其中就有十字补线和斜入十字补线。尤其是斜入十字也是困扰了我快一周,现在和大家分享一下我处理斜入十字的方法(我的方法其实还有很多漏洞需要改进,仅供大家参考理解一下,欢迎各位在评论区指点出可

bsefef的博客 2740

android极光推送问题,Android 极光推送问题

请问下 当前极光推送版本:'cn.jiguang.sdk:jcore:2.2.2','cn.jiguang.sdk:jpush:3.4.0' 能够收到推送(系统通知栏显示) 但是JPushReceiver(继承自JPushMessageReceiver)中的事件不回调 ,比如onNotifyMessageArrived、onNotifyMessageOpened...等事件都不回调,升级到最新的极...

weixin_35631730的博客 691

MEG预处理-Brainstorm

Brainstorm下载和安装 去Brainstorm官网进行下载:打开网页后,点击左侧Download;在跳出来的界面中进行简单的注册,注册完成后可以进行下载 解压后得到“brainstorm3”的文件夹,里面包含Brainstorm工具包的所有文件,把这个文件夹放在某个路径如"E:\matlab_tools\brainstorm3"即可 同样在某个路径建立空的文件夹命名为:brainstorm_db用于工具包运行过程中自动存储生成的文件,所以这个文件中生成的数据不要手动移动删除 在Matlab中,把.

AxeChen的博客 6124

声品质粗糙度matlab,声品质的应用分析方法

声品质的应用分析方法2016-04-05 09:18:57阅读次数:14198摘要:声品质分析在噪声的主观评价方面已经得到越来越多的应用。本文比较了声品质分析与传统计权声级的区别,并介绍了在声品质分析的实际应用中,针对稳态信号、非稳态信号的几种不同分析方法,以及各分析方法的要求和特点。关键词:声品质,响度,尖锐度,粗糙度,波动度1前言传统评价噪声的方法主要为计权声压级,用以反映声音的大小。但是人耳...

weixin_30767323的博客 2438

Android消息角标

前言:android原生系统是不支持角标的,需要厂商自己实现,所以接口需要分别实现。项目需求,目前只在三星和小米上实现了角标功能。没有找到华为和魅族的实现方法。 怎么区分手机类型//小米手机 Build.MANUFACTURER.equalsIgnoreCase("Xiaomi"); //三星手机 Build.MANUFACTURER.toLowerCase().contains("samsung

u013728021的博客 4893

自建邮局服务器| 批量邮件群发系统PowerMTA+oem(mumara,mailwizz, interspire)

世界顶级自建邮局服务器PowerMTA+oem(mumara,mailwizz, interspire) PowerMTA4.5(最好用的 群发邮件软件)是用于大批量多ip开发的邮件传递邮寄。可按每小时发送数近百万条电子邮件,发送IP地址和域可以详细配置,加上目前流行前端oem,mumara,mailwizz, interspire等,可定时发送,定时重复发送,实现全自动化 邮件群发 方案。 官网(powermta4.5下载) https://www.sparkpost.com/powermta/ 使用Po

ytrsexpo的博客 6502

极光消息推送及角标实现,附带完整demo

摘要:本次实现了用户登录注册,将用户保存到Application 里面实现用户持久化,用户有已读消息查看,未读消息查看,发送消息功能,未读消息读取后,添加到已读消息里面,发送消息具有推送功能 可以全部发送,和选择人员发送,发送消息过后,如果当前用户在线会收到一条任务栏通知,点击通知可以查看到该消息,登录App时,APP应用会生成,未读信息角标,(实现了vivo和小米。   Dome :地址http://download.youkuaiyun.com/detail/vip573117/9869527

vip573117的博客 1万+

SDIO协议

SDIO协议1 概述  SDIO,全称:Secure Digital Input and Output ,即安全数字输入输出接口。2 特点①与多媒体卡系统规格书版本4.2全兼容。支持三种不同的数据总线模式:1位(默认)、4位和8位。②与较早的多媒体卡系统规格版本全兼容(向前兼容)。③与SD存储卡规格版本2.0全兼容。④与SD I/O卡规格版本2.0全兼容:支持两种不同的数据总线模式:1位(默认)和4

Let the development board fly! 3万+

零基础入门simulink建模仿真--基于Simulink的QPSK调制与解调仿真建模示例

QPSK是一种相位调制技术,将两个比特映射到一个符号上,每个符号对应四个可能的相位之一(0°、90°、180°、270°)。通过Simulink,我们可以通过模块化的建模方式实现QPSK的调制和解调过程,并观察信号在信道中的传输效果。通过本指南,我们介绍了如何基于Simulink搭建一个完整的QPSK调制与解调仿真模型,并进行仿真和性能评估。背景介绍:理解QPSK调制与解调的基本原理及其应用。所需工具和环境:列出进行QPSK仿真所需的工具和环境。步骤详解。

amy_mhd的博客 1308

极光推送的角标问题

我们现在无论何时拿出自己的手机,解锁后的主页上,总能看到一个个的小红点,仿佛在呐喊:有消息啦,不管重不重要,快点我,快来消除我。 甚至曾有人掀起了一波潮流:在微信头像上加上小红点。这很直接很彻底地引发了大众的清除强迫症。 这也就是为什么我们做 App 的时候,希望在收到了推送消息时,App 能带上一个小红点。在使用得当的情况下,小红点有助于增加 App 的启动率,保持用户粘度。

tyfbhlxd的博客 4001

在 SAP BTP ABAP 环境中构建多租户应用:从架构到实战

ABAP多租户应用架构解析 本文详细介绍了SAP BTP中ABAP环境的多租户应用架构,重点阐述了其核心组件及协作机制。在云原生SaaS模式下,多租户架构使多个客户能共享同一套ABAP平台,同时保持数据和配置隔离。架构包含三层:平台与子账户层、多租户应用与平台服务层(含Approuter、ABAP Solution service、XSUAA等核心组件)、ABAP系统与租户层。文章深入分析了各组件功能,包括Approuter的路由机制、ABAP Solution service的自动资源调度、XSUAA的安

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 214

iOS之极光推送的使用通知和自定义消息、tabbar小红点提示

ios10极光推送://**************************************极光推送 //初始化apns //Required if ([[UIDevicecurrentDevice].systemVersionfloatValue] >= 10.0) { JPUSHRegisterEntity * entity = [[JPUSHRe...

代码解释生活 1983

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

安卓角标问题

极光社区: 极光推送的角标问题——让人又爱又恨的小红点 https://community.jiguang.cn/t/topic/13924 华为桌面角标介绍: http://developer.huawei.com/consumer/cn/wiki/index.php?title=华为桌面角标介绍

技术博客 950

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

php图片添加角标,我和极光的那些事儿 | 基于 PHP&Cordova — 推送实现及角标的设置...

没想到做 PHP 还会接触这方面的东西,感觉风马牛不相及,在这里碰头了。从 PHP api到 Cordova 搭建打包 App再到里面的极光推送和小红点的数值,真是秃了半边顶。(话说回来,我们 BOSS 和个推可是校友,我可是力排众议,毅然决然选择了极光推,滑稽.jpg)--萌新寄语本篇主要介绍 Cordova 和 PHP 配合,完成极光推送消息( iOS 集成推送的证书申请, PHP 推送代码实...

weixin_31188927的博客 437

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

flutter 开发中问题盘锦

flutter 业务性细节调整,一些问题集锦

NotesChapter 283

Android中接入极光推送

Android中接入极光推送的步骤大体如下: 1.在主module的build.gradle中添加: android { defaultConfig { manifestPlaceholders = [ // app包名 JPUSH_PKGNAME: "com.jiguang.test", // JPush上注册的包名对应的appkey JPUSH_APPKEY : "898f0d6

冰雪世界 3244

ios极光推送 App收到推送消息时,修改BadgeNumber,同时点击状态栏消息以后跳到指定的页面和静默推送

极光推送生产环境测试需要打包为adhot或者用testflight 在收到远程推送的消息的时候,有以下三种情况需要考虑: 1. 程序在后台运行 2. 程序未运行 3. 程序运行在前台 原则上,应用在收到推送消息时,badge的值是由后台来控制的,但是,目前的大多数公司后端都不会实现这一功能。幸运的是,JPush服务器已经帮我们做了。 我们在JPush后台发布消息时,在可选设置中,设...

小天空的博客 4442

Android应用推送角标设置方法

Android最初原生是没有角标的,各大手机厂商推出了角标,适配也是相对麻烦,需要去适配各家,这里做了整理及使用方法 先把工具类贴出来 import android.app.Notification; import android.app.NotificationChannel; import android.app.NotificationManager; import android.a...

zyz18813049204的博客 9812

ios 环信im消息和极光推送 角标怎么累计,,

退出app后,通过环信好友发送的消息数   与 极光推送的通知  角标怎么累计哦,现在是每次来了各自的消息后,角标就按照各自的计数器来显示,我想让他们总数累计在一起,显示正确的未读消息数

fuhuangu0385的博客 2394
上一篇: ThinkPHP 3.2.x 集成极光推送指北
下一篇: C# 服务端推送,十步十分钟,从注册到推送成功
极光推送
博客等级 码龄14年 109粉丝 108原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值