前言:自从上个星期开始整这个推送,弄了差不多一个星期,今天终于给整好了,因此现在来记录这段"奇妙"的旅程. 我们公司使用的消息推送是用的第三方--个推,这里不得不说一下,个推的技术人员还是蛮热心的,一直在帮助我排查问题,问题终于解决了,感谢感谢!
步骤及问题排查:
1.参照开发文档,集成SDK ,这里就不一一介绍了.(注意,个推的ios推送只能使用透传)
2.创建证书.苹果的推送证书分为开发证书(测试用)和生产证书(上线用).这里需要注意的就是,创建证书之前先必须打开证书的push 服务,
而且你得要先创建开发证书,然后再去创建生产证书,不然的话也是无法正常使用的.证书创建好了之后别忘了重新生成描述文件,检查一下描述文件是否开启了推送.
补充:创建好了证书之后,可以先到平台上测试一下证书是否正确,如果测试显示"测试可用",就说明没有问题;如果是其他,说明证书创建有问题,建议删除重新生成.
3.测试.测试有两种方式:个推平台跟公司后台提供的接口.
(1)个推平台测试如图:
如果你的接到了推送消息,,那么good ,你已经接近成功了.
如果没有,首先你得检查一下该应用是否允许推送.(提醒样式应该选横幅)
基本上允许接收通知的话就会接收到推送.(苹果是有系统自带的声音提醒的,如果没有,你得检查一下你的声音设置,以及看一下是否开启了勿扰模式什么的. 其实我啰嗦这么多,是因为我自己有中招,哎......)
(2)公司后台测试的话,这个得找后台要了. 如果平台上推送成功,但是后台接口测试推送不成功的话,那就要问一下后台,是否集成了IOS的透传模板.(如果能接收到在线消息,离线消息接收不到的话,99.9%是因为后台的原因.我在开发的时候就出现了这个情况,后台以为android和IOS的方法是通用的,就只集成一个,结果android能正常接收到推送,ios不能.这是因为离线还是走的苹果的APNS,在线的时候才走个推自己的流程,而后台并没有启动APNS服务,导致只能接收在线消息,离线消息接不到.)
4.处理接收到的推送
关于角标:
[GeTuiSdk setBadge:_numb];
[[UIApplication sharedApplication] setApplicationIconBadgeNumber:_numb]; //可用全局变量累加消息
点击图标或者通知栏进入程序后,清空角标:
[GeTuiSdk resetBadge];
[[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];
[[UIApplication sharedApplication] cancelAllLocalNotifications];
提示音:可以使用系统自带的,也可播放音频
NSString *path = [[NSBundle mainBundle]pathForResource:@"sound" ofType:@"wav"];
// 2 将路径字符串转换成url,从本地读取文件,需要使用fileURL
NSURL *url = [NSURL fileURLWithPath:path];
// 3 初始化音频播放器
_player = [[AVAudioPlayer alloc]initWithContentsOfURL:url error:nil];
// 4 设置循环播放
// 循环次数=0,声音会播放一次
// 循环次数=1,声音会播放2次
// 循环次数小于0,会无限循环播放
[_player setNumberOfLoops:0];
// 5 准备播放
[_player prepareToPlay];
[_player setVolume:0.9f];
[_player play];
在进入应用的时候停止播放
[_player stop];
5. 发布. 发布之前,你需要在平台上面将开发证书改成生产证书.然后需要在xcode里面将描述文件改成你之前创建的,开启了推送功能的那个.然后打包上线.
如果测试的时候推送正常,上线成功之后发现推送不了,那么你得检查一下发布之后的版本deviceToken 是否生成了,如果没有,那么十有八九是你证书没有创建好,或者是打包的时候描述文件没有配置好.
补充:上线之后的app,如何查看控制台打印的消息,-->先将手机连接电脑,打开xcode ,状态栏window->devices->选中你的手机,就可以查看日志里面有没有生成deviceToken了.
注意:上线成功之后平台上的证书就不能随意更改啦,不然可能会影响线上用户的使用的.