您的位置:首页 > 移动开发 > IOS开发

ios后台推送那点事

2014-04-12 10:49 204 查看
       近期做个项目要使用推送,虽然以前也做过,但没有仔细研究过,于是就趁着这次机会好好研究一把。以前做推送,都是生成cer文件,把文件教给服务器端处理。这次要自己对服务器处理,的确在这上费了一番周折。但在参考过这篇文章(http://blog.csdn.net/showhilllee/article/details/8631734)之后,就很快解决了。

       接下来就是对客户端上的设置了。在客户端上首先注册推送功能,注册成功后,把tokenid发送到服务器。这样服务器就可以通过apns向你发送推送了。这些解决后,就需要对推送进行一些细节设置了。

         第一个问题就是用户想在应用关闭推送,这个不难,想关闭推送就用[[UIApplicationsharedApplication]unregisterForRemoteNotifications];解绑推送。想要推送了就再用

[[UIApplicationsharedApplication]registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge |UIRemoteNotificationTypeSound
|UIRemoteNotificationTypeAlert)];增加上。
         第二个问题是在应用内关闭铃声和关闭震动,这个本来以为可以通过代码实现,通过观察QQ,网易新闻,墨迹天气等软件之后,得出需要与服务器交互,让服务器在下发报文时来做设置,这样就需要在你的程序中至少设置两段音频文件放在mainbundle中,一段是有声音的,一段是没有声音的就是静音文件(http://pan.baidu.com/s/1bnowCKv,在这里下载),这里文件格式一般为caf、wav(具体可以看官方文档,我只测试了这两种)。如果要只有震动,需要你在发送的报文中设置sound的文件名位mute.wav,这样就只有震动了。如果你要各种声音设置,如QQ,你需要设置不同的声音文件名了。如果你连震动都不要了,那在发送报文时直接去掉sound字段就可以了。如果后台推送只想关闭震动还要声音,这个是实现不了的(这是我通过QQ观察出来的,如果有疑问,欢迎讨论)。这里需要与服务器做交互,把各种需求上传到服务器,让服务器做判断。
        第三个文件就是badgenumber的设置问题,这个一般是从报文来设置的,在报文中设置badge的数值。但这里有不同,如果是新闻类软件,就不需啊计算有多少个推送消息,每次设为1就可以,但这里需要在程序becomeactive时设为0。用于清除推送消息数量并取出图标上的badgenumber标示。这样也会把推送消息去掉。而网易新闻就直接不设置badge,这样只会在阅读某条推送消息时才清除推送消息,你也可以手动在通知中心删除。但QQ的是先接到badge设置到图标上,在进入程序时置零,然后客户端通过服务器拉取未读消息,拉取下来后再设置badgenumber的值,这样如果你没有阅读未读消息,那么在图标上还是会显示相应的未读条数。
 目前只研究这么多,如果有疑问,欢迎大家来讨论。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息