应用程序处于非活动状态时无法接收静默通知 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