第一次独立接入推送,有一些理解上的错误,特此备注一下。
信鸽文档写的还是很明确的,按照文档基本上没有什么问题,但是,如果理解错误,会钻牛角尖,以下是本人认为需要强调的地方:
1.注册设备:注册设备是在APPdelegate里面,在这里注册一次设备即可,后面不必每次都注册设备,即registerDeviceToken方法(图1),当然为了确保设备有注册过,不要调用注销设备的方法(图2),调用此方法后再调用register设备的方法,发现不起作用,因此注销设备的方法慎重调用;
2.账号/别名(以下称账号)推送:
账号是推送时候的唯一标识符,推送时根据标识符进行推送,这种情况最常见的现象是外卖商家客户端接单,或者给购买物品的用户进行发货等针对唯一用户推送消息等,这种情况下只需在用户登录时注册相应的账号就行了,如图3:
我这里是与JS进行交互,后台推送把Passport作为账号来进行推送,由图中可以看出,只需要setAccount方法和delAccount方法,因为设备token已经在APPdelegate里面进行了注册,所以这里不需要再进行注册,还是很方便的;
3.网页推送:使用信鸽推送的网页推送测试时,有一个测试预览的按钮,我就被坑到这里了,在此着重强调:测试预览和帐号无关,测试预览只是发给选的测试设备的token的,即使注册的账号里面没有这个设备token,你使用测试预览时,设备依然会收到消息。我就在这里就一直在解决为什么账号下没有设备token,设备还能收到消息这个问题。所以测试的时候直接点确认推送就好,不用测试预览。另外,在创建通知页面左侧栏有个查询账号状态按钮(图4),可以看到当前账号下绑定的设备token,当然一般情况下只有开发环境,你才能很容易看到token;
4.自定义提示音:推送消息的提示音可以自定义,查询到当前有两种实现方法:一种是使用苹果自带的AVFoundation框架中的AVSpeech相关类,这个方法就是读文字,感觉类似于小说app中的人声朗读功能,听起来不那么人性化,因此这种方法不建议使用,但在此给出简单示例(图5);另一种是在项目中放置音频文件,这里我放的是MA4格式文件(后缀是.m4a),据说苹果只支持四种格式:Linear PCM、MA4 (IMA/ADPCM)、µLaw、aLaw,这里我参考了一篇文章:www.greatytc.com/p/87e8cbdb46c9,作者写的音频文件的转换过程非常详细,在这里要感谢这篇文章的作者。项目本地放着音频文件,服务器推送时消息里面sound的值就写项目里的音频文件名称就行,记得后缀也要放上去,要全称(我这里写的是1112.m4a,图6);
这些准备好,就可以测试铃声推送了。
5.设置badge:在推送时,信鸽这边的badge的值设置为0时,默认是不变更角标值的,因为当设置角标为0时,消息中不会传badge这个字段,角标值不变;关于角标我们这里要求只要在前台角标即为0,即不显示角标,而在iOS10 以上的系统发现程序在前台时接收推送消息时直接弹出通知栏,并没有走回调方法,因此修改了消息声音、角标、内容的那个方法,把角标直接置为了0(图7);
以上就是我所踩到的坑,如果有错误,欢迎大家指正。