当应用程序处于不活动状态时无法接收无声通知iOS

问题描述:

我正在开发应用程序,并且正在使用静默推送通知来发送一些数据。当应用程序处于活动状态时,推送工作正常,但如果我扫出应用程序或它不活动,我的应用程序未收到推送通知。我已经在能力使得其在后台模式推送通知,并添加在info.plist中当应用程序处于不活动状态时无法接收无声通知iOS

这就是我与推发送沿样本数据

{ 
    "aps": { 
     "content-available": 1 
    }, 
    "yourdatakey":{data} 
} 

我应该怎么做来解决所需的背景模式键此问题?? iOS应用程序可以在非活动模式下接收静默推送通知吗?

-(void) application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void(^)(UIBackgroundFetchResult))completionHandler 
{  
    if(SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"10.0")) 
    { 
     NSLog(@"iOS version >= 10. Let NotificationCenter handle this one."); 
     return; 
    } 
    NSLog(@"HANDLE PUSH, didReceiveRemoteNotification: %@", userInfo); 

    if([UIApplication sharedApplication].applicationState == UIApplicationStateInactive) 
    { 
     NSLog(@"INACTIVE"); 
     completionHandler(UIBackgroundFetchResultNewData); 
    } 
    else if([UIApplication sharedApplication].applicationState == UIApplicationStateBackground) 
    { 
     NSLog(@"BACKGROUND"); 
     completionHandler(UIBackgroundFetchResultNewData); 
    } 
    else 
    { 
     NSLog(@"FOREGROUND"); 
     completionHandler(UIBackgroundFetchResultNewData); 
    } 
} 

- (void)userNotificationCenter:(UNUserNotificationCenter *)center 
     willPresentNotification:(UNNotification *)notification 
     withCompletionHandler:(void (^)(UNNotificationPresentationOptions options))completionHandler 
{ 
    NSLog(@"Handle push from foreground"); 
} 

- (void)userNotificationCenter:(UNUserNotificationCenter *)center 
didReceiveNotificationResponse:(UNNotificationResponse *)response 
     withCompletionHandler:(void (^)())completionHandler 
{ 
    NSLog(@"Handle push from background or closed"); 
} 

推在我的应用程序中起着至关重要的作用,不希望有任何延迟。我应该怎么办立即接收推?? ...

+0

你能看到通知中心的横幅吗? –

据我已经能够告诉,无声推送通知应该是这个样子的:

{ 
     "to" : "<DEVICE_ID>", 
     "priority" : "high", 
     "content_available" : true, 
     "data" : { "custom_key":"custom value", "custom_key_2":"custom value 2" } 
} 

对于我来说,这当应用处于前景或背景时几乎立即发送。但是,当应用程序处于非活动状态时,它根本无法通过(它不会启动应用程序来处理该消息)。

如果我添加下面的消息:

"notification" : { "body" : "Notification Text", "sound" : "chime.aiff" } 

这将在通知区域中的报时声音和显示“通知文本”时,应用程序是无效的,但仍是应用程序将无法启动,以处理消息的数据部分。我明白这可能是通过设计,但我使用这个来确认我正在收到 - 什么 - 而应用程序不活动。

因此,这可能会帮助你解决一半的问题(立即获取推送通知),但恐怕我仍然试图在应用程序处于非活动状态时使其工作。

编辑:它当一个推送通知进来出现,如果用户强制关闭应用程序(从任务管理器向上滑动),苹果禁用启动应用程序没有什么可以做这件事。 Apple的文档指出,如果您再次手动启动应用程序或重新启动设备,它将重新启用从无声推送通知启动应用程序,但我没有发现这种情况。我认为最简单的答案是:“当Apple决定让他们工作时,iOS上的无声推送通知工作。”我想如果你需要一个能够以预期的方式工作的移动操作系统,请将你的用户引导至Android。

+0

我只想确认我也有这个问题,看起来像其他人一样:https://forums.developer.apple.com/thread/36776 –