【问题标题】:How handle silent push notification when application is InActive state in ios 9?当应用程序在 ios 9 中处于 InActive 状态时,如何处理静默推送通知?
【发布时间】:2019-02-09 08:41:30
【问题描述】:

我已经实现了静默推送通知。所以当应用程序在 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;
}

提前致谢

【问题讨论】:

  • 请使用代表通知有效负载更新您的问题。
  • @quellish 我有更新问题,请检查并帮助我。

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


【解决方案1】:

静默推送通知不会触发用户交互。当静默通知有效负载包含用于用户交互的键时,就会出现问题 - iOS 无法推断其意图是向用户呈现某些内容,还是保持通知静默并在没有用户交互的情况下进行处理。有时静默通知可能会起作用,有时它可能会像带有用户交互的普通通知一样呈现。它可以是一个或另一个,而不是两者。

如果aps 有效负载中存在静默按键content-available,则不应存在alertsoundbadge 键。

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

application:didReceiveRemoteNotification:fetchCompletionHandler: 只会在静默推送通知中调用。如果通知负载同时包含content-availablealertsoundbadge 中的一个或多个,iOS 将不知道调用哪个方法,您可能会看到不一致的行为。

如果您只是尝试显示非静默通知,则无需实现application:didReceiveRemoteNotification:fetchCompletionHandler:。而是为 iOS 9 实现 application:didReceiveRemoteNotification:,为 iOS 10 及更高版本实现 userNotificationCenter:willPresentNotification:withCompletionHandler:

就静默通知和非活动应用程序状态而言,这里没有什么特别可做的。静默通知旨在“提示”应用程序应该刷新内容。当收到静默通知时,应用程序需要在 30 秒内处理内容更新,然后调用获取完成处理程序。当 iOS 执行获取完成处理程序时,它会拍摄更新后的 UI 的新恢复快照。即使应用程序处于非活动状态,也会发生这种情况。

【讨论】:

  • 如果应用程序在前台并且控制中心打开,那么应用程序进入非活动状态。在此期间,如果任何通知带有上述通知有效负载,则调用“didReceiveRemoteNotification”方法并执行“RedirectScreenBasedOnNotification”方法。但我想阻止它。怎么可能。
【解决方案2】:

您可以在此 If 条件中添加您的代码。

if (UIApplication.sharedApplication.applicationState != UIApplicationStateInactive) {
   //Write your code her, this will get executed when your app is not in Inactive state.
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-01
    • 1970-01-01
    • 2017-06-26
    • 1970-01-01
    • 1970-01-01
    • 2020-04-19
    相关资源
    最近更新 更多