【纠错记录】推送无声音&远程推送的处理

本博意在记录开发过程中遇到的一些bug。可能大部分内容会有主观偏向,又或者学艺不精说的不对的,请多包涵。

最近的开发是接手别人做的快结束的项目并在其中查杀bug。当时推送这块的问题挺多的。

其中程序在后台运行或者程序没有在运行时,收到推送时就只有上方的view并没有声音提示。在记录的同时顺带提一下推送的几种形式以及推送的处理方法。

首先是推送的几种形式:

1.程序在前端运行

2.程序在后台运行

3.程序没有在运行

然后收到推送后系统提供了3种响应,分别是提示音,alert弹窗和图标右上角的计数。

不过这些需要在程序里注册,貌似一般都是这样注册的

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
   [[UIApplication sharedApplication] registerForRemoteNotificationTypes:UIRemoteNotificationTypeBadge |
    UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert];
}
这里就不得不提遇到的bug,之前的程序员是这么写的
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)];
虽然只是多了个括号,但是就是没有声音。
其他的具体流程在网上一搜能找到一大堆,我就不啰嗦了。

然后是收到推送之后该怎么办:

不管推送是通过什么途径推送的,这个方法都能响应的。
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
不过也有一个例外,就是程序没有在运行或者说在后台失去活性(我也不知道该怎么准确称呼这种情况)也就是内存被程序释放的时候,会走这个方法
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

正常通过点击图标进入程序时这个方法的参数launchOptions是为空的,但是如果是通过点击推送进入程序的时候launchOptions就会是该推送的信息。

所以可以这么写

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
...
if (launchOptions != nil)
	{
		NSDictionary* dictionary = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
		if (dictionary != nil)
		{
                    [self application:application didReceiveRemoteNotification:dictionary];
		}
	}
...
}
这样你的程序在离线的时候收到推送也能正确处理了。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值