我已经实现了静默推送通知。所以当应用程序在 ios 9 中处于非事件状态时调用“didReceiveRemoteNotification”方法。
有些情况下应用程序处于非事件状态。
1.当用户点击特定通知时。
2.收到电话或信息时。
3.通知中心和控制中心打开时。
-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
{
if(application.applicationState == UIApplicationStateInactive) //Inactive state
{
[self RedirectScreenBasedOnNotification:self.userInfoDic];//Screen Redirection code
}
}
那么当应用程序处于非事件状态时,我该如何处理静默通知?
我遇到的问题是,当通知中心打开时,如果有任何通知到来,那么重定向就可以了,但我想停止它。
通知负载:-
aps = {
alert = "Test Dev 5 startd following you ";
"content-available" = 1;
"link_url" = "https://raywenderlich.com";
message = {
friend = {
email = "abc@gmail.com";
name = "Test Dev 5";
photo = "";
"user_id" = 27;
};
id = 3;
"is_business_sent" = 0;
message = "Test Dev 5 startd following you ";
};
sound = default;
}
提前致谢
最佳答案
静默推送通知不会触发用户交互。当静默通知负载包含用于用户交互的键时,事情就会出错——iOS 无法推断其意图是向用户呈现某些内容,还是让通知保持静默并在没有用户交互的情况下进行处理。有时静默通知可能会起作用,有时它可能会像用户交互的普通通知一样呈现。它可以是其中之一,但不能两者兼而有之。
如果静默推送 key content-available
出现在aps
负载中, key alert
、sound
, 或 badge
不应该。
您可以使用我的 Push Notification Payload Validation Tool检查通知的内容。您在问题中发布的有效负载有几个问题 - aps
key 应仅包含 Generating Push Notifications 中定义的 Apple key .您所有的自定义键和值都应该在 aps
对象之外。
application:didReceiveRemoteNotification:fetchCompletionHandler:
只会在静默推送通知时调用。如果通知负载同时包含 content-available
和 alert
、sound
或 中的一项或多项badge
iOS 将不知道调用哪个方法,您可能会看到不一致的行为。
如果您只是想显示非静默通知,则无需实现 application:didReceiveRemoteNotification:fetchCompletionHandler:
。而是为 iOS 9 实现 application:didReceiveRemoteNotification:
,为 iOS 10 及更高版本实现 userNotificationCenter:willPresentNotification:withCompletionHandler:
。
就静默通知和非事件应用程序状态而言,这里没有什么特别要做的。静默通知旨在“提示”应用程序它应该刷新内容。当收到静默通知时,应用程序需要在 30 秒内处理内容更新,然后调用获取完成处理程序。当 iOS 执行获取完成处理程序时,它会获取更新后的 UI 的新恢复快照。即使应用程序处于非事件状态,也会发生这种情况。
关于ios - 当应用程序在 ios 9 中处于 InActive 状态时如何处理静默推送通知?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52164173/