应用程序处于非活动状态时无法接收静默通知 iOS

Posted

技术标签:

【中文标题】应用程序处于非活动状态时无法接收静默通知 iOS【英文标题】:Unable to receive silent notification when app is inactive iOS 【发布时间】:2016-12-01 11:48:41 【问题描述】:

我正在开发一个应用程序,我正在使用静默推送通知来发送一些数据。当应用程序处于活动状态时推送工作正常,但如果我刷出应用程序或它处于非活动状态,我的应用程序没有收到推送通知。我在功能下启用了后台模式下的推送通知,并在 info.plist 中添加了所需的后台模式键

这是我与推送一起发送的示例数据

  
   "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" );

推送在我的应用中起着至关重要的作用,并且不希望有任何延迟。我该怎么做才能立即收到推送?...

【问题讨论】:

你能看到通知中心的横幅吗? 【参考方案1】:

据我所知,静默推送通知应如下所示:

 
      "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 的文档指出,如果您再次手动启动应用程序或重新启动设备,它将重新启用从静默推送通知启动应用程序,但我没有发现这种情况。我认为简短的回答是:“当 Apple 决定让它们工作时,iOS 上的静默推送通知工作。”我想如果您需要一个以预期方式运行的移动操作系统,请将您的用户引导至 android

【讨论】:

我只是想确认一下我也遇到了这个问题,而且看起来其他人也是如此:forums.developer.apple.com/thread/36776

以上是关于应用程序处于非活动状态时无法接收静默通知 iOS的主要内容,如果未能解决你的问题,请参考以下文章

如何在应用程序处于非活动状态时获取推送通知ios swift3

当应用程序处于非活动状态时,GCM 推送通知不适用于 iOS

当应用程序处于终止状态时,iOS 静默推送通知不会收到

当应用程序处于活动状态时,iOS 处理推送通知点击

当应用程序处于活动状态时,phonegap 通用推送 ios 警报

当我收到静默推送通知时,iOS 会唤醒我的应用程序吗?(当应用程序未处于运行状态时)