我正在申请使用推送通知,我目前正在使用pushbots进行推送通知。我想知道是否有任何方法可以拦截应用程序收到的通知,并在设备上显示通知之前检查通知。如果通知中的数据不正确,根本不显示通知?这是推特机器人的可能吗?或者我需要自己完成这一切吗?
答案 0 :(得分:17)
是的,您可以使用本地通知来实现此行为。
您可以在没有alert
和"content-available": "1"
的情况下配置有效负载,这样您的应用就可以在不向用户展示通知的情况下接收通知。
// Payload
{
aps: {
"content-available": 1
},
text: 'my alert message' // your custom info
}
在您的应用代码中,将通知注册为
// Register notifications
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:
UIRemoteNotificationTypeNewsstandContentAvailability];
然后,关键是根据某些条件在application:didReceiveRemoteNotification:fetchCompletionHandler:
方法中触发本地通知
- (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];
}
}
这样你就可以拦截"之前的通知"显示"他们给用户。
答案 1 :(得分:2)
您无法阻止通知在到达设备后显示(假设它在alert
字典中包含aps
字段 - 如果没有,则无论如何都不会显示通知)。
您应该在服务器中确定应将哪些通知发送到哪个设备令牌。如果您的功能需要,您可以将设备令牌与数据库中的用户相关联。
即使您提出的要求是可能的,向所有安装了您应用的设备发送通知也是非常低效的,然后只在一小部分设备中显示通知。