iOS 10.0 *处理前台

时间:2017-07-13 09:10:49

标签: ios swift3 push-notification notifications apple-push-notifications

如果我实现了在ios 10.0中提供推送通知的方法

@available(iOS 10.0, *)

    func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void)
    {
        completionHandler(UNNotificationPresentationOptions.alert)

    }

然后它显示所有通知, 所以,我的问题是如何防止显示特定的推送通知(在另一个deveice登录)我只处理该特定推送的代码

2 个答案:

答案 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);

因此,要回答您的问题,如果您想阻止显示通知,请不要实现此方法或不要调用处理程序。

希望它有所帮助。