首页 > 代码库 > ios远程推送的各种坑,啊吼吼吼~APNs

ios远程推送的各种坑,啊吼吼吼~APNs

来源链接:http://blog.csdn.net/showhilllee/article/details/8631734?reload

远程推送写的最详细的就是这位啦,鉴于我反反复复搞了四五遍,我就不连字带图的转了,再也难不倒我╭(╯^╰)╮

主要写各种坑:

1.证书Certificates

开发或者发布ipa肯定都申请过证书,不过当时真是迷迷糊糊的,拿着公司账号各种晕,里面一堆的id,带*的不带*的,各种证书也不知道哪些能用哪些不能用。反正就是各种试,能用的赶紧用了再说。

在这里,先说一下,基本上刚拿到账户,对申请各种证书没什么概念的孩子,可以在里面各种操作,研究命名规则之类的,方便以后取名字。

但是,记住:一旦你搞懂了,一定要把哪些乌七八糟,各种test的证书都删掉,清除掉。证书不要钱啊,亲,随便删哟,不然,证书跟csr不配套,全部百搭。要知道csr是自己电脑生成的,一个没有保存妥当,不匹配,有证书也百搭。如果这些证书还发布了产品,就更晕菜了。

所以,搞清楚以后,在正式发版本前,把乱七八糟的证书都删了。保证开发者中心里的证书等干净整洁。

一般我们使用会用两种证书:1.development开发证书,2.production发布证书。可以简单的理解为debug和release版本需要的证书。

这两种证书是最多只能申请两份的。所以资源宝贵。申请完了,请把申请时使用的那个csr【钥匙串里创建的,证书申请文件】,和生成的ios_开头的cer文件妥善保管好。尤其是前面那个csr文件,因为后面的证书没了还能重新上开发者中心里下载。

安装证书,双击cer文件就行。但是,安装之前,先把你之前test时装进钥匙串里的那些乱七八糟的证书都删除掉。保持清爽。不然后面你再也不想翻看里面的细节。。。

好了,我建议同时申请开发证书和发布证书,这样他们对应同一个csr,日后方便管理维护。分别双击安装两个cer证书进钥匙串里。证书前面都会出现小三角,点开下面就是你的csr密钥。如果没有这个小三角,说明没有匹配的csr文件,基本上这个证书就不太好用了,可以删了,重新申请安装,或者在别的电脑上找到csr文件,*.certSigningRequest。拷贝回来。

2.App ID

这次删除安装了N遍,深刻体会了他的含义啊。T_T

以前不知道AppID的bundleID是做什么用的,全部用野id,就是*通配的,一般的开发,这也就够了。但是要想做APNs远程推送通知的话,就必须有唯一的BundleID字符串。而且这个字符串要和app的bundleID一致。

这里,我掉进了一个坑。我申请了app一致的ID,因为某些原因不能推送,所以我新建了一个test的app,然后把测试程序的bundleID改成了已经用于发布的这个正式的bundleID,后来推送ok了,我那个开心啊。

然后换回我要发布的app,运行,推送,接收。然后,我发现在通知中心里,通知app的名字居然是test!!!!!我死活改不回来了!!!!!!!

因为这是APNs的一个安全机制,就是为了防止有人伪造BundleID,截获推送通知的。于是我真正要用的app接收了,但是标题名是注册成功那次的app名称。而我注册成功的那次是test!坑爹。

好在,APNs的注册机制是针对一台一台的设备,每个设备只对应一个drive token的。所以,别的测试机还没来得急被我污染,⊙﹏⊙b。

我试了删掉App ID,重新建一个,bundle ID必须唯一,所以以前那个必须删除,但是删除重建一个后,没有任何改变。我才想起来APNs的注册是针对一个设备的。于是把设备还原了,再重新安装,推送,接收推送,然后推送通知里正常了。

 

app ID申请推送的两个SSl证书,这个没什么好说的,记得csr文件跟上面说的Certificates里面用的一致就ok了。然后双击cer文件,安装到钥匙串中。

3.provisioning profiles

配置文件,给Xcode用的。在此之前,肯定也测试过,安装过很多provisioning profiles。打开build setting->Code signing,点开provisong profiles,就可以看到目前安装上去的。博主我的xcode里面那叫乱七八糟啊,以前个人账户的,公司账户的,别的项目拿来试试看能不能用的。。。。趁此机会全部删掉了。。。

删除就在Xcode->preferences->accounts里面,选择账户,右下角有个View details,点开,里面就有目前安装过的provisioning profiles。可以清理了。

清理好了,就可以点击安装最新生成的配置文件了,现在,再看看xcode的build setting->Code signing里,很清爽,有木有。

4.生成ck.pem

导出.p12文件,这个文件一定是点击我上面Certificates里说的那个钥匙串里安装好证书后,三角形下面密钥那里右键导出。我曾经图简单,直接找密钥,导出,然后我发现单独导出的只有1k多,证书下这个导出的有3k多。(为什么我这么容易犯二~~~~(>_<)~~~~ )

然后生成chatcert.pem,chatkey.pem,两者加起来生成ck.pem。密码最好和p12的一致,好管理啊。

5.php pushMe.php

我就被源地址里那个博主的这个服务器文件坑死了。因为他通篇讲的是测试环境,偏偏php文件里用的是APNs正式地址,我又眼镜带坑,看了几遍没发现。于是客户端老是收不到。以为我证书哪里不对,就不停的删啊建啊,改啊,换app测试啊。。。折腾两天。。。

6.推送基于网络

远程推送在设备没联网时是收不到的,所以,做需求时也要看看有没有不合适的地方。而且推送也很不靠谱,有时候会掉推送。嗯嗯。。。

目前就先总结这些。发现不是在总结推送,完全是在总结各种证书申请及配置嘛。。。。。。

总之,没做出来前,听到手机里别的app推送消息,感觉都是在对我无情的嘲笑。如今做出来了,叮咚声真悦耳啊,我推我推我使劲推送啊,啊哈哈哈哈~不许嫌烦(⊙o⊙)哦~~~

ios远程推送的各种坑,啊吼吼吼~APNs