当应用程序在ios 9中处于InActive状态时,如何处理无声推送通知?

时间:2018-09-04 10:28:00

标签: 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;
}

预先感谢

2 个答案:

答案 0 :(得分:1)

静默的推送通知不会触发用户交互。当静默通知有效载荷包含用于用户交互的键时,事情就会出问题-iOS无法推断是否打算向用户呈现某些内容,或者保持通知静默并在没有用户交互的情况下进行处理。有时,静默通知可能会起作用,而其他时候,静默通知可能会像带有用户交互的正常通知一样显示。可以是一个,也可以不是两个。

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

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

application:didReceiveRemoteNotification:fetchCompletionHandler:仅在无提示推送通知中被调用。如果通知负载同时包含content-available alertsoundbadge中的一个或多个,iOS将不知道调用哪种方法以及您可能会看到不一致的行为。

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

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

答案 1 :(得分:0)

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

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