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

来源:互联网 发布:中银淘宝校园卡申请 编辑:程序博客网 时间:2024/06/05 09:38

本博意在记录开发过程中遇到的一些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
原创粉丝点击