ios - 当应用程序在 ios 9 中处于 InActive 状态时如何处理静默推送通知?

标签 ios objective-c push-notification apple-push-notifications silent-notification

我已经实现了静默推送通知。所以当应用程序在 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 alertsound , 或 badge 不应该。

您可以使用我的 Push Notification Payload Validation Tool检查通知的内容。您在问题中发布的有效负载有几个问题 - aps key 应仅包含 Generating Push Notifications 中定义的 Apple key .您所有的自定义键和值都应该在 aps 对象之外。

application:didReceiveRemoteNotification:fetchCompletionHandler: 只会在静默推送通知时调用。如果通知负载同时包含 content-available alertsound 中的一项或多项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/

相关文章:

iOS 在播放视频时处理音频流

java - j2objc 是否支持 Guava ?

java - GCM 有时有效,有时无效

ios - Sinch - 即时消息 - 应用程序关闭时收到推送通知

ios - MKMapKit 可拖动注释和绘制多边形

ios - Adhoc 分发中的推送通知问题

ios - 加解密密码生成和保存策略

ios - 来自 ios 客户端的 NTLM 身份验证

iphone - initWithObjects-预期标识符

android - Azure 通知中心延迟问题