如果我实现了在ios 10.0中提供推送通知的方法
@available(iOS 10.0, *)
func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void)
{
completionHandler(UNNotificationPresentationOptions.alert)
}
然后它显示所有通知, 所以,我的问题是如何防止显示特定的推送通知(在另一个deveice登录)我只处理该特定推送的代码
答案 0 :(得分:1)
我的推送数据是
{
"aps" : {
"alert" : {
"id" : 2091
},
"sound" : "chime.aiff"
},
"acme" : "foo"
}
我使用了id,因为我可以通过其ID分隔每个推送,并且基于id我可以决定天气以显示前景中的通知。
谢谢@ Anbu.Karthik供参考 根据我的问题,我们可以处理推送甚至用户没有点击通知
@available(iOS 10.0, *)
func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void)
{
print("Handle push from foreground")
let userInfo:[AnyHashable:Any] = notification.request.content.userInfo
let aps:NSDictionary = (userInfo[AnyHashable("aps")] as? NSDictionary)!
let alert:NSDictionary = (aps["alert"] as? NSDictionary)!
let id = Int(alert["id"] as! Int)
if id == your id
{
//Handle push without prompting alert
}
else
{
//Display alert
completionHandler(UNNotificationPresentationOptions.alert)
}
}
当用户点击通知时,会调用以下方法...
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any]) {
print(userInfo)
}
答案 1 :(得分:0)
根据官方文件:
//仅当应用程序时才会在委托上调用该方法 在前台。如果方法未实现或处理程序 没有及时调用,然后通知将不会 呈现。应用程序可以选择通知 作为声音,徽章,警报和/或通知列表呈现。 这个决定应该基于是否有信息 用户可以看到通知。
- (void)userNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions options))completionHandler __IOS_AVAILABLE(10.0) __TVOS_AVAILABLE(10.0) __WATCHOS_AVAILABLE(3.0);
因此,要回答您的问题,如果您想阻止显示通知,请不要实现此方法或不要调用处理程序。
希望它有所帮助。