我已经实现了静默推送通知。因此当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;
}
预先感谢
答案 0 :(得分:1)
静默的推送通知不会触发用户交互。当静默通知有效载荷包含用于用户交互的键时,事情就会出问题-iOS无法推断是否打算向用户呈现某些内容,或者保持通知静默并在没有用户交互的情况下进行处理。有时,静默通知可能会起作用,而其他时候,静默通知可能会像带有用户交互的正常通知一样显示。可以是一个,也可以不是两个。
如果content-available
有效载荷中有静默按键aps
,则按键alert
,sound
或badge
不应存在。
您可以使用我的Push Notification Payload Validation Tool查看通知的内容。您在问题中发布的有效负载存在几个问题-aps
键应仅包含Generating Push Notifications中定义的Apple键。您所有的自定义键和值都应位于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拍摄新的恢复快照。即使应用程序处于非活动状态,也会发生这种情况。
答案 1 :(得分:0)
您可以在此If条件中添加代码。
if (UIApplication.sharedApplication.applicationState != UIApplicationStateInactive) {
//Write your code her, this will get executed when your app is not in Inactive state.
}