应用处于非活动状态时无法接收静默通知 iOS
Unable to receive silent notification when app is inactive iOS
我正在开发一个应用程序,我正在使用静默推送通知来发送一些数据。当应用程序处于活动状态时,推送工作正常,但如果我刷出应用程序或它处于非活动状态,我的应用程序将不会收到推送通知。我在功能下启用了后台模式推送通知,还在 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" );
}
推送在我的应用程序中起着至关重要的作用,不希望有任何延迟。我应该怎么做才能立即收到推送??...
据我所知,静默推送通知应该如下所示:
{
"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" }
当应用程序处于非活动状态时,它会播放提示音并在通知区域显示"Notification Text",但仍然不会启动应用程序来处理消息的数据部分。我知道这可能是设计使然,但我使用它来确认我在应用程序处于非活动状态时得到了一些东西。
因此,这可能会帮助您解决一半的问题(立即收到推送通知),但恐怕我仍在尝试在应用程序处于非活动状态时让它正常工作。
编辑:如果用户强制关闭应用程序(从任务管理器向上滑动),Apple 会在推送通知进入时禁用启动应用程序。有你无能为力。 Apple 的文档指出,如果您再次手动启动该应用程序或重新启动设备,它将重新启用从静默推送通知启动该应用程序,但我没有发现这种情况。我认为简短的回答是:"silent push notifications on iOS work when Apple decides to let them work." 我想如果您需要一个以预期方式工作的移动操作系统,请将您的用户引导至 Android。
我正在开发一个应用程序,我正在使用静默推送通知来发送一些数据。当应用程序处于活动状态时,推送工作正常,但如果我刷出应用程序或它处于非活动状态,我的应用程序将不会收到推送通知。我在功能下启用了后台模式推送通知,还在 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" );
}
推送在我的应用程序中起着至关重要的作用,不希望有任何延迟。我应该怎么做才能立即收到推送??...
据我所知,静默推送通知应该如下所示:
{
"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" }
当应用程序处于非活动状态时,它会播放提示音并在通知区域显示"Notification Text",但仍然不会启动应用程序来处理消息的数据部分。我知道这可能是设计使然,但我使用它来确认我在应用程序处于非活动状态时得到了一些东西。
因此,这可能会帮助您解决一半的问题(立即收到推送通知),但恐怕我仍在尝试在应用程序处于非活动状态时让它正常工作。
编辑:如果用户强制关闭应用程序(从任务管理器向上滑动),Apple 会在推送通知进入时禁用启动应用程序。有你无能为力。 Apple 的文档指出,如果您再次手动启动该应用程序或重新启动设备,它将重新启用从静默推送通知启动该应用程序,但我没有发现这种情况。我认为简短的回答是:"silent push notifications on iOS work when Apple decides to let them work." 我想如果您需要一个以预期方式工作的移动操作系统,请将您的用户引导至 Android。