IOS推送总结

iOS生成推送push证书,push.p12文件 @[TOC] 生成push证书 在ios应用中如果要使用推送功能,需要在apple官网生成一个推送的证书用于鉴权; 与打包证书类似,推送证书也分为开发版和正式版 之前一直在用开发版的证书,直到上线后有用户反馈ios系统收不到推送,才意识到没有配置正式的push证书 环境: 1.macOS系统电脑 2.apple Store账户电子邮箱 步骤: 1.生成证书签名(CSR)请求文件CertificateSigningRequest.certSigningRequest 2.创建推送证书cer文件 3.安装证书秘 阅读详情

此文主要以证书生成配置为主,实现简单推送,部分截图与内容来自于互联网,若对大家有所帮助,还请给个赞O(∩_∩)O~~。如有误,请指出,一起探讨。

一、 推送原理


Provider是指某个iPhone软件的Push服务器。APNS 是Apple Push Notification Service(Apple Push服务器)的缩写,是苹果的服务器。上图可以分为三个阶段。
* 第一阶段:Push服务器应用程序把要发送的消息、目的iPhone的标识打包,发给APNS。
* 第二阶段:APNS在自身的已注册Push服务的iPhone列表中,查找有相应标识的iPhone,并把消息发到iPhone。
* 第三阶段:iPhone把发来的消息传递给相应的应用程序, 并且按照设定弹出Push通知。

1. 应用程序注册消息推送。
2. IOS跟APNS Server要deviceToken。应用程序接受deviceToken。
3. 应用程序将deviceToken发送给PUSH服务端程序。
4. 服务端程序向APNS服务发送消息。
5. APNS服务将消息发送给iPhone应用程序。无论是iPhone客户端跟APNS,还是Provider和APNS都需要通过证书进行连接的。

二、 证书的创建

1. 创建本地请求证书文件–CertificateSigningRequest
  • 钥匙串访问 –> 证书助理 –> 从证书颁发机构请求证书;
  • 填写邮箱和名称(可以随意填写) –> 存储到磁盘
  • 选择继续-保存至桌面即可(此文件可长期重复使用,只作为本机器的一个识别作用)
2. 进入苹果开发者网站,生成证书以及profiles

依次选择Member Center - Certificates, Identifiers &Profiles - Certificates
C95BD68F-E6FA-49F4-8ECB-C72902F41D4D.png
选择当前要设置通知的APP IDs
这里我以新建一个APP IDs为例,若公司已有项目APP IDs,则略过此步
选择右上角”+”号创建一个APPID
填写name以及Bundle ID
A93F9CAF-20CA-47B8-8DA2-B46AF441C089.png
Bundle ID需要与Xcode里项目Bundle ID一致
6F810F29-E7DF-4190-A069-457036873A10.png
勾选push notification 并完成提交
找到刚创建好的APP IDs,可以看到下面的通知选项处提示Configurable,表示证书还没配置,点击Edit进行编辑
这里看到推送证书分为2个版本,一个开发模式,一个生产模式,即我们在开发测试时使用开发模式证书,发布上线后采用生产模式证书,两个都要创建(本次只作开发模式演示,当然创建生产版证书的步骤也是一样的)
Choose File选择最开始创建在桌面的Request文件
1F5ABE01-3DD1-487D-B7D4-8470FE2FD686.png
创建证书OK后 下载到本地
86A5F026-7B97-41C4-A6BB-C3D7341D8A23.png
开发版和生产版证书都创建好后,此时这里已经都是启用状态了。
生成XCODE使用的provisioning文件,该文件用于真机调试:
0D1B1B3A-FAB6-47BD-A721-C391CC63F0F8.png
生成过程:
进入developer.apple.com,选择member center - Certificates, Identifiers & Profiles - Provisioning Profiles,然后选择创建Provisioning file,接着选择iOS App Development ,下一步选择AppId,选中之前建立的支持push的appid,接着下一步选择支持push的certificate,下一步勾选需要支持的device id,最后一步设置provisioning文件的文件名,这样provisioning文件就生成了。

3. 生成服务端使用的证书文件
  • 首先双击前面保存的cer文件,此时会打开“钥匙串访问”软件,里面会出现一个Apple Development IOS push services证书,一个公用密钥和一个专用秘钥,秘钥的名称与证书助理中填写的名称一致。
  • 选中证书,导出为 apns-dev-cert-development.p12 文件
  • 选中专有秘钥,导出为apns-dev-key-development.p12文件
  • 通过终端命令将这些文件转换为PEM格式:
  • 设置密码,建议所有都为一个密码

    openssl pkcs12 -clcerts -nokeys -out apns-dev-cert-development.pem -in apns-dev-cert-development.p12
    openssl pkcs12 -nocerts -out apns-dev-key-development.pem -in apns-dev-key-development.p12
  • 最后, 需要将两个pem文件合并成一个apns-dev.pem文件,此文件在连接到APNS时需要使用:
    “`
    cat apns-dev-cert-development.pem apns-dev-key-noenc-development.pem > apns-dev-development.pem

####4. 测试证书
执行下面命令:

telnet gateway.sandbox.push.apple.com 2195(apns的测试环境)
telnet gateway.push.apple.com 2195(apns的正式环境)

它将尝试发送一个规则的,不加密的连接到APNS。如果你看到下面的反馈,那说明你的MAC能够到达APNS。按下Ctrl+C关闭连接。如果得到一个错误信息,那么你需要确保你的防火墙允许2195端口,一般这里都不会出现什么问题。
![终端显示](http://upload-images.jianshu.io/upload_images/1085368-a72adc48d5be13db.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
下面我们使用生成的SSL证书和私钥来设置一个安全的链接去链接苹果服务器,执行命令如下:

openssl s_client -connect gateway.sandbox.push.apple.com:2195 -cert apns-dev-cert-development.pem -key apns-dev-key-development.pem
“`
执行之后需要输入密码,就是上面我们设置的密码即可。
如果链接是成功的,你可以随便输入一个字符,按下回车,服务器就会断开链接,如果建立连接时有问题,OpenSSL会给你返回一个错误信息。
输出结果如下,则说明是正确链接了,把上述合并的apns-dev-development.pem给服务端使用。
ECCD5164-A95C-4777-A7CF-EA60D6D73398.png

如果有错误,请检查是否导出正确的推送证书。

ios开发真机测试证书申请 公司刚搞了个299美刀的仅提供真机测试的企业账号,这个不需要添加设备ID,而且可以在非越狱的机器上安装,瞬间屌爆了。这里介绍下怎样来申请这个真机测试证书,个人开发者账号申请的开发者证书也类似,有些少许的不同。 1.进入Member Center                             (图1)   2. 选择第二项certificates... 阅读详情

相关推荐

从极光推送的实现原理概括iOS和Andriod推送原理

推送是手机中非常常见的功能了。可是在实现上iOS和Andriod却有很大的差别。       因为iOS有强大的产品生态体系,APP从研发到审核上架,再到最后在手机端运行,都有严格的把关。所以推送功能在它这里实现起来比较简单。每个时候只要保持一个与APNs的常链接,服务器将要推送的消息发送给APNs,APNs再将消息转发到响应的手机APP,就能很好的实现推送功能。由于手机APP所有的推送功能有统

liufangbaishi2014的博客 3万+

开发证书与发布证书申请和安装步骤

多个真机调试的方法: 新iphone当成测试机的问题:在开发者网站添加device id,然后app程序证书里,点击edit选择新添加的device id,重新生成、下载即可。可能提示:Provisioning profile 'ED633812-50B7-4D2D-8153-A24686A2C9FC' can't be found ---解决:签名全选don't code sign,然

ysysbaobei的专栏 4万+

iOS平台推送原理

iOS平台推送原理       由于我们在开发过程中用到远程推送相对比较频繁,本篇博文我们将以介绍iOS远程推送原理为基础,展开我们的下面的话题。       我们先要明确至关重要的一点:所有的iOS设备收到的远程推送消息都是通过苹果的服务器发出来的。不管是公司的服务器,还是第三方的推送服务器都是将要发送给我们的推送消息先推给苹果的服务器,然后再由苹果的服务器发送给我们。       所以远程推送...

lsxf_xin的专栏 1万+

iphone 申请证书

摘自:http://mobile.tutsplus.com/tutorials/iphone/iphone-sdk-install-apps-on-iphone-devices-for-development/  Step 1: Login to the iPhone Provisioning PortalLogin to your Apple Developer account by navig...

weixin_34191734的博客 322

iOS开发:生成CertificateSigningRequest文件(CSR文件)的方法步骤

这个知识点是刚开始从事ios开发的时候总结的,虽然现在一直用都记得了,但是为了留下青春的痕迹,还是把这个小知识点写下来吧,大牛可以忽略不看。。。 怎么说呢,就简单的两步而已,只是我省略了其他的步骤过程,具体如图所示: 1.在电脑Launchpad里面找到 钥匙串访问那个选项 ,双击打开; 2.选择想要生成CSR文件的开发者账号,然后在钥匙串访问-->证书助理-->从证

全沾软贱开发攻城狮 1万+

Cadence IC618/Spectre231安装避坑指南:详解环境变量配置与License管理那些事儿

本文深入解析Cadence IC618/Spectre231安装过程中的环境变量配置与License管理难题,提供从变量冲突解决到高效License管理的实用方案。针对常见的64位标识冲突、路径污染及License服务器连接问题,给出具体诊断步骤和优化建议,帮助用户构建稳定可靠的EDA环境。

weixin_33737134的博客 615

iOS推送通知

推送通知,也被叫做远程通知,是在iOS 3.0以后被引入的功能。是当程序没有启动或不在前台运行时,告诉用户有新消息的一种途径,是从外部服务器发送到应用程序上的。一般说来,当要显示消息或下载数据的时候,通知是由远程服务器(程序的提供者)发送,然后通过苹果的推送通知服务(Apple Push Notification Service,简称APNS)推送到设备的程序上。直接由应用程序(程序中写入对应代码)给用户发出通知本地通知需要用到一个重要的类:本地通知的实现步骤:(1)创建本地通知。

旭日的博客 4285

IC设计新手必看:如何正确使用去耦电容(decap)避免电源噪声?

本文深入探讨了IC设计中去耦电容(decap)的应用技巧,从核心原理到布局实现,帮助新手工程师有效抑制电源噪声。文章详细解析了MIM、MOM等电容类型的特性与选择策略,并提供了先进的布局技巧和验证方法,特别适用于28nm以下先进工艺的电路设计挑战。

weixin_30555125的博客 114

IOS推送

IOS推送 推送 ●iOS不允许App常驻后台 ●提供服务器主动与用户相互的功能 ●新闻类(热点新闻的推送) ●本地推送 ●由本地应用触发(闹铃/待办事项) ●无需网络数据,提供和远程推送统一的交互 ●远程推送 ●普通远程推送 ●静默推送 UserNotifications UserNotifications ●iOS10之后统一UserNotificatiohsframework ●需要兼容低版本机型 ●UNUserNotificationCenter单例管理全部推送 ●统一的权限的申请

weixin_45363671的博客 1394

WPF中使用TreeView封装组合控件TreeView+DataGrid

wpf的功能非常强大,很多控件都是原生的,但是要使用TreeView+DataGrid的组合,就需要我们自己去封装实现。功能如上图所示, 目前基本上把常用的样式都实现了,购买源码后,可以自行修改样式。本文源码效果如下,(搞了好几天,的确有难度,所以源码也收费,便宜,赚点辛苦费)第一种:技术的选择是TreeView(也就是本文的演示)。这2个图都是第三方控件自带的,并且都是收费使用。首先说明一下,实现上面的效果,有3种方法。本文演示的是使用TreeView的实现。第二种:技术的选择是DataGrid。

故里2130 1650

微信小程序 - 最新获取用户昵称 / 头像(wx.getUserProfile 接口被废弃后的代替方案)详细教程,2022 年之后的所有微信小程序,获取用户信息最新详细教程,附带示例源代码

微信小程序wx.getUserProfile接口废了用什么代替,微信小程序wx.getUserProfile不能用了怎么办,wx.getUserProfile失效有什么替代方案吗,微信新规定头像昵称填写最新教程,目前微信小程序最新获取用户头像昵称教程,微信小程序用户头像昵称获取规则调整公告,2022改版后的微信小程序如何获取用户头像和昵称信息,微信小程序官方废弃getUserProfile后如何实现获取用户信息,微信小程序wx.getUserProfile接口返回了默认头像昵称,微信小程序获取用户信息不

🏆 前端领域优质创作者 2万+

IOS 推送(本地推送、远程推送、三方推送[极光推送])

1.本地推送 关于本地推送的作用及意义:【后期完善】 实现步骤 大致4步:1创建通知、2注册通知、3实现函数、4删除通知 注意! 下面的内容中没有提到:在使用通知的时候,为了避免重复注册:最好在生命周期的函数中进行 注册 和 删除通知 如下: //注册通知 - (void)viewWillAppear:(BOOL)animated {     、、、、、 }

kenshin的专栏 3626

AI Agent智能体在Android开发中的应用

本文探讨了AIAgent(智能代理体)在Android开发中的应用,涵盖技术原理、实践案例与未来趋势。AIAgent通过机器学习、自然语言处理等技术实现代码生成、测试自动化及性能优化,显著提升开发效率。例如,强化学习模型可优化APP响应时间(公式:$\text{响应时间}=f(\text{负载},\text{资源})$),自动化测试覆盖率提升至95%。

郑伟强dev的专栏 123

iOS 推送通知

引言: 推送通知是移动终端保持永远在线概念的一个核心方式,当人们离开桌面互联网以后想在第一时间收到与之相关的信息时.推送通知的出现就再好不过了. 但是,要注意不可滥用,繁多的非必要性推送消息会给用户造成非常烦躁的心理.作为用户体验的一部分,那就已经在往失败的方向走了. 推送通知共为两种类型,分别是本地推送通知和远程推送通知. 本文将对这两类通知的使用展开详细讨论. 参考资料:

余书懿 1万+

Trae 保姆级使用指南,零基础小白也能实现编程。

Trae 使用指南 Trae AI 使用 零基础编程 满血版 DeepSeek-R1&V3 AI IDE 深度理解中文开发场景 傻瓜式编程 编程入门 开发入门

Mr.L-OAM的博客 5815

深入理解 Terraform 中的资源更新与管理

摘要:本文探讨Terraform处理AWS安全组名称变更时的行为。当修改不可变属性(如安全组名称)时,Terraform会创建新资源并删除旧资源。通过状态文件比对所需状态与实际状态,Terraform对不可变属性采用"先创建后删除"策略,对可变属性则直接更新。实例演示了修改安全组名称和关联EC2实例时的处理过程,强调理解资源属性可变性对基础设施管理的重要性。(149字)

2501_90323865的博客 471

iOS推送小结

iOS推送小结(吐槽,md的代码编辑功能不知道是不会用还是确实不好用)1.推送配置1.1证书配置请自己谷百.1.2注册推送 //代码来源:环信Demo //In method application:(UIApplication *)application didFinishLaunchingWithOptions: UIApplication *application = [U

谁令骑马客京华 1426

对偶分解算法详解及其Python实现

对偶分解算法是一种广泛应用于求解凸优化问题的有效方法,尤其在大规模数据处理和分布式计算中展现出强大的实用性。在许多实际应用中,直接求解原始问题可能由于计算复杂度过高、资源受限或问题规模过大而变得不可行。这时,对偶分解方法为我们提供了一种高效的替代方案。对偶分解算法的核心思想是将复杂的原问题转化为其对应的拉格朗日对偶问题。通过引入拉格朗日乘子并构造对偶函数,该方法在一定程度上简化了问题的求解过程。特别是,对于包含多个约束条件的大规模优化问题,对偶分解可以将原问题分解为若干个小规模、相互独立的子问题。

闲人编程的博客 1750

ios推送php,php如何实现ios推送

php实现ios推送的方法:首先把要发送的消息以及iPhone标识打包,并发送给APNS;然后查找有相应标识的iPhone,并把消息发送到iPhone;最后把发来的消息传递给相应的应用程序,并且按照设定弹出Push通知即可。IOS推送消息是许多IOS应用都具备的功能,最近也在研究这个功能,参考了很多资料终于搞定了,下面就把步骤拿出来分享下:iOS消息推送的工作机制可以简单的用下图来概括:Provi...

weixin_39624094的博客 475

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

深度学习工具包 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")

iOS 推送(苹果原生)

来自:https://www.jianshu.com/p/3fc46a8764ed 前言 推送对App的重要性不言而喻,是每一个iOS开发者必修的技能。网上的资料对于初学者并不友好(至少对于我来说),其中有许多坑。并且由于要配置证书,只能真机调试等,学起来更是难上加难。这篇文章是从刚开始接触推送的起点写起。最近有点忙,有些地方没有细究,只是暂时知道了能实现什么,并且贴出了一些文章的链接,方便进...

LANGZI7758521的专栏 1187

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

[IOS开发]IOS开发之推送

最近的项目中使用到了推送,第一次搞推送,遇到了不少坑,所以记录下来。 参考:手把手教你做IOS推送 首先是一些基础知识 APNS的推送机制 首先我们看一下苹果官方给出的对iOS推送机制的解释。如下图 Provider就是我们自己程序的后台服务器,APNS是Apple Push Notification Service的缩写,也就是苹果的推送

风飘絮 1535

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

IOS 普通推送和静默推送

在IOS推送服务中,Apple提供了两种不同方式的推送形式,一种是在通知栏上面显示的推送;另一种则是不带消息提醒的推送,俗称“静默消息”。1.普通推送模板:ios10以前的模板:{ "aps":{ "alert":"内容", "badge":1, "sound":"default", "userinfo":{

双手成就你的梦想 7754

iOS远程推送之极光推送

极光推送

buildSetting的博客 1425

iOS 推送要点整合

本文旨在对 iOS 推送(以下简称 推送)进行一个完整的剖析,如果你之前对推送一无所知,那么在你认真地阅读了全文后必将变成一个推送老手,你将会对其中的各种细节和原理有充分的理解。以下是 pikacode 使用 iOS 推送的一些经验,欢迎互相交流,指出错漏之处。 推送服务 可以说是所有 App 的标配,不论是哪种类型的 App,推送都从很大程度上决定了 App 的 打开率、使用率、存活率 。因此

COOL_BEAR_XX的专栏 1241

iOS9 和iOS10远程推送通知的总结

iOS10开始推送通知的变化比较大,之前对推送的处理没太注意,一直没太明白推送前台、后台、杀死状态,点击通知栏走的具体方法是什么。这次有时间重新整理测试了一下关于推送的几个代理方法。下面都是我是实测的结果,iOS9.3和iOS10和iOS12的测试机,没有iOS8的,不过iOS8和iOS9效果应该是一样的。 先说苹果原生的方法,我用的是极光的推送,所以也要说说极光升级后的方法: 我们对推送的处理主...

wangqiuwei07的专栏 1583
上一篇: Error Domain=NSCocoaErrorDomain Code=3000
下一篇: nonce和timestamp在Http安全协议中的作用
Jackson-Huang
博客等级 码龄14年 26粉丝 13原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值