2015-12-01 49 views
0

我有这种奇怪的情况,我的应用支持iOS7及以上版本。它通过使用无声通知启用了Remote notifications无声推送通知在后台模式下无法在iOS7上工作

我知道上面的iOS7和iOS8有不同的逻辑来处理通知。我这样做:

if ([[UIApplication sharedApplication] respondsToSelector:@selector(isRegisteredForRemoteNotifications)]) 
     { 
      [[UIApplication sharedApplication] registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge) categories:nil]]; 

      [[UIApplication sharedApplication] registerForRemoteNotifications]; 
     } 
     else { 
      [[UIApplication sharedApplication] registerForRemoteNotificationTypes: 
      (UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)]; 
     } 

这里的通知接收

{ 
     aps =  { 
      "content-available" = 1; 
     }; 

    } 

所以它所做的是,应用程序收到无声的通知,然后设置localNotification,见下图:

UILocalNotification *notification = [[UILocalNotification alloc] init]; 
    notification.fireDate = [NSDate dateWithTimeIntervalSinceNow:5]; 
    notification.soundName = UILocalNotificationDefaultSoundName; 

    notification.alertBody = @"testing"; 
    notification.timeZone = [NSTimeZone defaultTimeZone]; 
    [[UIApplication sharedApplication] scheduleLocalNotification:notification]; 

所有它的工作原理在iOS8和iOS9中处于后台模式和前台模式。当应用程序处于前台时,它将触发didReceiveLocalNotification

但是当我在iOS7中测试时,如果应用程序处于后台模式,则无法正常工作。我试图找出这是如何发生的,而其他操作系统工作正常。我在应用程序打开时测试过,它确实收到推送通知,并且触发了didReceiveLocalNotification。但是当进入后台时,什么也没有发生(没有本地推送通知)。

+0

[iOS中7无声推送通知不工作(可能的重复http://stackoverflow.com/questions/19239737/silent-push-notification-in-ios -7-does-not-work) – HelmiB

回答

0

您没有提及启用后台抓取。你在应用功能中启用了它吗?

,并设置这在您的AppDelegate.m

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    [application setMinimumBackgroundFetchInterval:UIApplicationBackgroundFetchIntervalMinimum]; 

    return YES; 
} 

,并以此作为你的委托方法

-(void)application:(UIApplication *)application performFetchWithCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler{ 
    // do your thing here. maybe calling a view controller class or stuff 
} 

但是,如果你不进入后台获取,试试这个来代替:

{ 
    aps = { 
     "content-available" : 1, 
     "sound" : "" 
    }; 
} 

祝你好运!

+0

我不启用它,因为我不使用'application:performFetchWithCompletionHandler:'。顺便说一句,我重申iOS8和iOS9的作品。 :( – HelmiB

+0

我编辑了我的答案。 – adiman

+0

任何官方声明添加声音密钥?在此期间,我会试试这个。 – HelmiB

0

我不完全确定这个问题,但也许你可以尝试改变respondsToSelector。请参阅以下内容:

if ([UIApplication instancesRespondToSelector:@selector(registerUserNotificationSettings:)])