5

我正在使用推送通知进行应用,目前我正在使用pushbots推送通知。我想知道是否有任何方法来拦截应用程序收到的通知,并在设备上显示通知之前检查通知。如果通知中的数据不正确,请不要显示通知?这是可能与pushbot或我需要自己做这一切吗?iOS拦截推送通知

+1

为什么通知“不正确”?您控制发送到设备的通知,不要发送错误的通知... – Doc

+0

正确可能是错误的词,但我想检查它是否是正确的“用户”或设备。我不希望所有带有应用程序的设备都获得所有通知。 – Uffe

+1

当您发送推送通知时,您指定设备令牌以确定将通知发送到哪个设备... – Doc

回答

2

您不能阻止通知在到达设备后显示(假设它包含aps字典中的alert字段 - 如果没有,则不会显示任何通知)。

您应该确定您的服务器应该将哪些通知发送到哪些设备令牌。如果您的功能需要,您可以将设备令牌与数据库中的用户相关联。

即使您的请求是可能的,向所有安装了您的应用的设备发送通知,然后仅在其中的一小部分中显示通知将是非常低效的。

+0

我设法通过使用别名来实现此目的,类似于设备令牌,但是您可以在每个设备上设置特定该用户的别名。 – Uffe

16

是的,你可以通过本地通知来实现这种行为。

您可以在不使用alert"content-available": "1"的情况下配置您的有效负载,以便您的应用程序可以接收通知而不会向用户显示通知。

// Payload 
{ 
    aps: { 
     "content-available": 1 
    }, 
    text: 'my alert message' // your custom info 
} 

而在你的应用程序代码,注册通知,如在

// Register notifications 
[[UIApplication sharedApplication] registerForRemoteNotificationTypes: 
UIRemoteNotificationTypeNewsstandContentAvailability]; 

然后,关键是基于某些条件

- (void)application:(UIApplication *)application didReceiveRemoteNotification: (NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler 
{ 

    NSLog(@"push data package: %@", userInfo); 

    // Retrieve your data   
    NSString *text = [userInfo objectForKey:@"text"]; 

    BOOL mustShow = YES; 
    // Only show notification if app is background and your custom condition 
    if ((state == UIApplicationStateInactive || state == UIApplicationStateBackground) 
     && mustShow) { 
     // Raise the local notification a second after received 
     UILocalNotification* localNotification = [[UILocalNotification alloc] init]; 
     localNotification.fireDate = [NSDate dateWithTimeIntervalSinceNow:1]; 
     localNotification.alertBody = text; 
     localNotification.timeZone = [NSTimeZone defaultTimeZone]; 
     localNotification.applicationIconBadgeNumber = [[UIApplication sharedApplication] applicationIconBadgeNumber] + 1; 

     [[UIApplication sharedApplication] scheduleLocalNotification:localNotification]; 
    } 
} 

这样你在application:didReceiveRemoteNotification:fetchCompletionHandler:方法来触发本地通知可以在将它们“显示”给用户之前“拦截”通知。

+0

它应该被接受为正确答案 –