玩转ios友盟远程推送,16年5月图文防坑版
最近有个程序员妹子在做远程推送的时候遇到了困难,求助本帅。尽管本帅也是多彩的绘图工具,从没做过远程推送,但是本着互相帮助,共同进步的原则,本帅还是掩饰了自己的彩笔身份,耗时三天(休息时间)帮她完成了推送功能。PS:三天只打了一局dota,你们就知道这有多难,多耗时了。(其实并没有,真正做过一次就知道这其实很简单了,现在有程序媛再找本帅做推送,简直就是分分钟的事)。
对不起请允许我这一次!
鉴于这次做推送的时间绝大多数都浪费在了“寻找教程->教程有误(更新不及时)->寻找教程”上,我决定写一篇防坑的推送教程,与诸君共勉。
接下来是干货。
首先,我们要注册一个友盟账号。
找到网址,注册并登录。我就是不告诉你怎么注册!
不会注册的话,还是不要学编程了。
然后你要在首页找到推送板块,点进去先体验一下需要什么。
当你再进来找 自!己!的!推送项目时,还!是!点击这个神奇的地方。
当然你第一次进来,界面跟我的会稍有不同,毕竟我已经添加了项目。
点击帮助->文档中心
够清楚咩->点击!
来到这里,你就知道发生了什么,友盟的小伙伴也制作了详细的教程。
于是小伙伴们就产生了疑问:人家这不是有教程吗,你是闲的吗?
并不是闲的。
首先我们要感谢友盟的小伙伴给出了详尽的
SDK集成指南,
大家照着做,妥妥的!没毛病!
然而。。。。。
证书设置指南会让你完全摸不着头脑,上面这幅动人画面,是友盟给出的第一幅画面,也是我从开始到收到远程推送消息都没看到的画面。当然了,大神们会嗤之以鼻,这个画面改变,是membercenter界面升级了,简约化了,你就找不到了呀!?说来惭愧,这里恰恰是本帅耗时最久的地方。
有两个原因:
1,你要登你的付费账号。你要登你的付费账号。你要登你的付费账号。对,99刀那个,否则接下来的步骤你都无法完成,普通账号压根就没!有!入!口!
2,membercenter之于彩色绘图工具,如同青楼之于弱冠男子,真的是十分不熟!尤其点进链接一看界面风格不对,当场就会懵逼的好吗!
并没有。
好了,下面就是我绕坑的图文,纯干货来了,你们的掌声在哪里?(此时你已经参照友盟教程进行了SDK集成,如果并没有,请参照教程集成。附链接http://dev.umeng.com/push/ios/integration)
再次提醒:
如果你的界面风格是这样的,别挣扎了,上面的红色字重读一遍。
正确的界面是这样的:
进来以后点击左上角那个黑苹果
往下滑(捂脸)
长剑所指,click
看到这个画面的你嘴角露出了一丝不易察觉的微笑。
你想要的样子我都有!
接下来,我们就开始作法了!
核心步骤:
1,创建app ID。
2,根据app ID创建profiles并应用到当前项目。(Xcode已打开的情况下,双击该文件即为应用)
3,创建证书请求。
4,制作证书,将证书导入mac钥匙串,导出p12证书。
5,将导出的p12证书上传至友盟。
6,愉快地进行测试。
来吧少年!创建app ID!
点1点2到这画面
勾选Push Notification
点击注册
不要忘了点击Done,虽然我也不知道不点有什么后果。
至此,app ID创建完毕,你的app ID列表里已经有了待会需要用的ID。
多么的流畅啊!
不一致就抓瞎了,重新做。
接下来,我们就要配置Provisioning Profile了。因为我只是做测试模式,所以要勾选Development,如果上线,请勾选Distribution。
红框蓝点
这里就是我们跋山涉水做好的app ID
勾选自己的开发证书
勾选测试设备。
注意
1、如果需要的设备不在列表中,需要通过左侧的Devices中手动添加,或者通过XCode的Organizer自动添加。
2、Provisioning Profiles创建完成后是可以重新编辑更新的
建议放到桌面,我之前给它取了个名字叫Give me five!
这个时候你的Xcode应该是打开的,then,
双击你刚下下来的Give me five,就算是安装到Xcode了,简单不?带劲不?
迷之红布
打开你的Build Setting,将Provisioning Profile勾选为你的Give me five。(我的boyPush是上一个项目的,请忽略)
boyPush看起来怪怪的呢
好的。接下来,我们制作证书。胜利在望,我的心情是激动的。
打开你的钥匙串。不是腰里那串,mac里的。不要在意底部的证书勾选,没影响。
迷之红布
存到磁盘
用Finder显示快速定位
这个时候你就知道你的请求文件放在哪里了,接下来我们会用到。现在打开你的浏览器,切回到membercenter。
又回到最初的起点,呆呆地坐在电脑前。
请眼熟我
这次我们勾选的是蓝色方框
ID还是得仔细啊,表示这个坑跳过一次,5米深,简直爬不上来。
continue,这里是要求你创建证书请求以便下一步操作。对,就是刚才我们已经做的那一步,所以直接下一步。
choose你刚刚下载的
请求文件,continue
证书就这么制作好了。apple的证书给了我一些奇妙的感觉,就好像小时候考了年级第一老师发了张以资鼓励的奖状,又好像揭开瓶盖看到了再来一瓶。
对了,记得下载下来,建议放在桌面。双击它。piapia的。
点击Done
制作完成你的云端也有了备份。
证书在手,天下我有!
如果你下载完证书并且piapia的双击过它,那么你打开钥匙串,就能发现它的踪迹。导出为P12格式文件。记得让证书展开,不要选中私钥,如下图。这一步是为友盟后台上传证书做准备。
给你的P12证书取个响亮的名字吧。
这一步还会让你设置密码,自己设置一下,是你的证书密码
这一步的密码是mac用户密码
你的小鲤鱼有了没?
回到友盟,你很容易就能走到这一步。
这里生成的两串羊肉,不对,两串key,AppKey是必用的,另一个只有你使用API发送推送时才用得到。
开始做送分题吧。
到项目appDelegate.m文件里添加app key
在这个代理方法里获取设备的token,打印出来,你会用得到。
NSLog(@"%@",[[[[deviceToken description] stringByReplacingOccurrencesOfString: @"<" withString: @""]
stringByReplacingOccurrencesOfString: @">" withString: @""]
stringByReplacingOccurrencesOfString: @" " withString: @""]);
知道你们懒得照图敲,代码贴这了,不谢。
然后呢,还是到友盟,点进你的项目。
就是pushDemo呀
点选测试模式
先添加设备
刚才你获取的token,现在就用上了。设备名称自己来吧。
添加成功!好了,现在真机连接,编译代码,锁屏!激动人心的时刻就要到来,你们不要犹豫!
添加个测试消息,试试火力。
这一步的category1是照着appDelegate.m里的填的,你们应该也一样。
我知道你在读秒。。。。
5
4
3
2
1
收到了没有!
欢迎大神批评指正,督促本彩色绘图工具前行。如有改进建议或错误指正或疑问,请留言或联系QQ:960449174.
感谢宋鲜肉与飞哥的指导。
以上。
相关文章:

提高C++性能的编程技术笔记:临时对象+测试代码
类型不匹配:一般情况是指当需要X类型的对象时提供的却是其它类型的对象。编译器需要以某种方式将提供的类型转换成要求的X类型。这一过程可能会产生临时对象。 按值传递:创建和销毁临时对象的代价是比较高的。倘若可以,我们应该按指针或者引…

北美欧洲顶级大咖齐聚,在这里读懂 AIoT 未来!
2019 嵌入式智能国际大会即将来袭!购票官网:https://dwz.cn/z1jHouwE随着海量移动设备的时代到来,以传统数据中心运行的人工智能计算正在受到前所未有的挑战。在这一背景下,聚焦于在远离数据中心的互联网边缘进行人工智能运算的「…

c# 关闭软件 进程 杀死进程
c# 关闭软件 进程 杀死进程 foreach (System.Diagnostics.Process p in System.Diagnostics.Process.GetProcessesByName("Server")){p.Kill();} 转载于:https://www.cnblogs.com/lxctboy/p/3999053.html

提高C++性能的编程技术笔记:单线程内存池+测试代码
频繁地分配和回收内存会严重地降低程序的性能。性能降低的原因在于默认的内存管理是通用的。应用程序可能会以某种特定的方式使用内存,并且为不需要的功能付出性能上的代价。通过开发专用的内存管理器可以解决这个问题。对专用内存管理器的设计可以从多个角度考虑。…

【Swift】 GETPOST请求 网络缓存的简单处理
GET & POST 的对比 源码: https://github.com/SpongeBob-GitHub/Get-Post.git 1. URL - GET 所有的参数都包含在 URL 中 1. 如果需要添加参数,脚本后面使用 ? 2. 参数格式:值对 参数名值 3. 如果有多个参数,使用 & 连接 …

深度CTR预估模型的演化之路2019最新进展
作者 | 锅逗逗来源 | 深度传送门(ID: deep_deliver)导读:本文主要介绍深度CTR经典预估模型的演化之路以及在2019工业界的最新进展。介绍在计算广告和推荐系统中,点击率(Click Through Rate,以下简称CTR&…
2015大型互联网公司校招都开始了,薪资你准备好了嘛?
2015年的校招早就开始了,你还不知道吧?2015年最难就业季来了,你还没准备好嘛?现在就开始吧,已经很多大型互联网公司祭出毕业生底薪了看谷歌、看百度、看腾讯、看阿里巴巴再看传统软件公司:看微软、看联想、…

提高C++性能的编程技术笔记:多线程内存池+测试代码
为了使多个线程并发地分配和释放内存,必须在分配器方法中添加互斥锁。 全局内存管理器(通过new()和delete()实现)是通用的,因此它的开销也非常大。 因为单线程内存管理器要比多线程内存管理器快的多,所以如果要分配的大多数内存块限于单线程…

iOS中几种定时器
一、NSTimer 1. 创建方法 NSTimer *timer [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:selector(action:) userInfo:nil repeats:NO];TimerInterval : 执行之前等待的时间。比如设置成1.0,就代表1秒后执行方法target : 需要执行方法的对象…

手把手教你使用Flask轻松部署机器学习模型(附代码链接) | CSDN博文精选
作者 | Abhinav Sagar翻译 | 申利彬校对 | 吴金笛来源 | 数据派THU(ID:DatapiTHU)本文旨在让您把训练好的机器学习模型通过Flask API 投入到生产环境 。当数据科学或者机器学习工程师使用Scikit-learn、Tensorflow、Keras 、PyTorch等框架部署…

JQuery遮罩层
2019独角兽企业重金招聘Python工程师标准>>> css样式:<style type"text/css"> .mask { position: absolute; top: 0px; filter: alpha(opacity60); background-color: #777; z-index: 1002; left: 0px; …

代码覆盖测试工具Kcov简介及使用
Kcov是一个代码覆盖测试工具,最初基于Bcov,它可在FreeBSD、Linux、OSX系统中使用,支持的语言包括编译语言(compiled languages)、Python和Bash。与Bcov一样,Kcov对编译的程序使用DWARF调试信息,以便无需特殊编译器开关…

Google148亿元收购Fitbit,抢占苹果、三星可穿戴设备市场地盘
编译 | 夕颜出品 | AI科技大本营(ID:rgznai100)11 月 1 日,Google 母公司 Alphabet 和 可穿戴设备公司 Fitbit 同时发布新闻,宣布已经达成了收购后者的最终协议。Google LLC 以每股 7.35 美元的价格收购 Fitbit,总价值…

ios关于用xib创建的cell 自动返回cell的高度问题!
1 设置tableView的属性 self.tableView.rowHeight UITableViewAutomaticDimension; self.tableView.estimatedRowHeight 44.0; // 设置为一个接近“平均”行高的值 2 cell要约束好,要能够让cell知道自己的高度根据哪个控件计算就可以(不明白看下图&…
西门子PLC学习笔记二-(工作记录)
今天师傅给讲了讲做自己主动化控制的总体的思路,特进行一下记录,做个备忘。 1.需求分析 本次的项目是对楼宇循环供水的控制,整个项目须要完毕压力、压差、温度等的获取及显示、同一时候完毕电机的控制。 2.设计 使用西门子的Step7工具进行梯形…

Swift 3.0 预告:将 Objc 库转换成更符合 Swift 语法风格的形式
转自:swiftcafe Swift 3.0 更新越来越临近,这次更新会给我们带来很多实用的内容,比如对 Objc 库的迁移,会更符合 Swift 的语法风格。用过之前版本的 Swift,我们会发现很多 Objc 库的方法名称其实还是以 Objc 的风格来命…

非对称加密算法RSA公钥私钥的模数和指数提取方法
生成非对称加密算法RSA公钥、私钥的方法: 1. 通过OpenSSL库生成,可参考 https://github.com/fengbingchun/OpenSSL_Test/blob/master/demo/OpenSSL_Test/funset.cpp 中的Generate_RSA_Key函数; 2. 在Linux下通过命令生成,执行…

数据库“新解”,看这里,get!
自从第一台通用计算机诞生至今,围绕计算机系统硬件的创新迭代就一直“在路上”,伴随着硬件能力的不断提升,软件更新自然不可缺少。通常来说在传统的计算机软件工程领域,操作系统、编译器与数据库被并称为最具难度的“三剑客”系统…

win 64位系统安装带有c编写的python模块出现ValueError: [u'path']解决
2019独角兽企业重金招聘Python工程师标准>>> 关于win 64位机器安装Scrapy的问题:http://steamforge.net/wiki/index.php/How_to_Install_Scrapy_in_64-bit_Windows_7 在安装Scrapy是要安装一系列的依赖模块, 出现问题: 1、error: …

探索 Swift 中的 MVC-N 模式
作者:Marcus Zarra(twitter:mzarra) Marcus 将会为大家介绍一种设计模式,他曾经在那些需要从互联网进行大量频繁数据请求的 iOS 应用当中使用此设计模式。这个设计采用了著名的 MVC (Model View Controller) 模式&…

MXNet中依赖库介绍及简单使用
MXNet是一种开源的深度学习框架,核心代码是由C实现,在编译源码的过程中,它需要依赖其它几种开源库,这里对MXNet依赖的开源库进行简单的说明: 1. OpenBLAS:全称为Open Basic Linear Algebra Subprograms&am…

Python十大装腔语法
作者 | 许向武 责编 | 郭芮 来源 | CSDN 博客Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点&…

MATLAB——scatter的简单应用
scatter可用于描绘散点图。 1.scatter(X,Y) X和Y是数据向量,以X中数据为横坐标,以Y中数据位纵坐标描绘散点图,点的形状默认使用圈。 样例: X [1:10]; Y X rand(size(X)); scatter(X, Y) 得到: 2.scatter(...,fill…

Windows10上使用VS2017编译MXNet源码操作步骤(C++)
MXNet是一种开源的深度学习框架,核心代码是由C实现。MXNet官网推荐使用VS2015或VS2017编译,因为源码中使用了一些C14的特性,VS2013是不支持的。这里通过VS2017编译,步骤如下: 1. 编译OpenCV,版本为3.4.2&a…

StoryBoard 视图切换和传值
一 于StoryBoard相关的类、方法和属性 1 UIStoryboard // 根据StoryBoard名字获取StoryBoard (UIStoryboard *)storyboardWithName:(NSString *)name bundle:(nullable NSBundle *)storyboardBundleOrNil;// 获取指定StoryBoard的第一个视图控制器- (nullable __kindof UIViewC…

率清华团队研发“天机芯”登《Nature》封面,他说类脑计算是发展人工通用智能的基石...
整理 | AI科技大本营(ID:rgznai100)8 月,清华大学教授、类脑计算研究中心主任施路平率队研发的关于“天机芯”的论文登上《Nature》封面,这实现了中国在芯片和人工智能两大领域登上该杂志论文零的突破,引发国内外业界一…

IntelliJ IDEA 12详细开发教程(四) 搭建Android应用开发环境与Android项目创建
今天我要给大家讲的是使用Intellij Idea开发Android应用开发。自我感觉使用Idea来进行Android开发要比在Eclipse下开发简单很多。(一)打开网站:http://developer.android.com/sdk/index.html。从网站上下载SDK下载需要的Android版本ÿ…
Git环境搭建及简单的本地、远程 两库关联
这里讲下我从拿到新的Mac后怎么一步一步搭建Git环境的。 首先让我们打开终端 在终端输入 git 如果说你卡到下面的结果说明你没有安装个git,去安装。 The program git is currently not installed. You can install it by typing: sudo apt-get install git 如果你…

提高C++性能的编程技术笔记:内联+测试代码
内联类似于宏,在调用方法内部展开被调用方法,以此来代替方法的调用。一般来说表达内联意图的方式有两种:一种是在定义方法时添加内联保留字的前缀;另一种是在类的头部声明中定义方法。 虽然内联方法的调用方式和普通方法相同&…