2015-12-01 48 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:)])