后台显示全部接收内容的推送通知

Push notification displaying whole receiving content when is on background

我正在开发一个聊天应用程序。我正在使用苹果推送通知服务在用户收到新消息时通知他。有两种情况。 首先,当用户聊天和接收消息时,不应通知用户(意味着不应显示通知),当应用程序处于后台时,我想提醒用户消息。一切正常,除了当应用程序在后台时,通知显示客户端正在接收的整个 JSON 对象。

这个想法是忽略视觉通知,如果它在后台显示本地通知。

这就是我实现通知设置的方式

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject : AnyObject]?) -> Bool {
        let types: UIUserNotificationType = [UIUserNotificationType.None]
        let settings: UIUserNotificationSettings = UIUserNotificationSettings(forTypes: types, categories: nil)
        application.registerUserNotificationSettings(settings)
        application.registerForRemoteNotifications()

        return true
    }

func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject])
{
    //App handle notifications in background state
    if application.applicationState == UIApplicationState.Background {

        var login_user = LoginUser();
        login_user.loadData();

        var username:String!;
        var message:String!;

        if let msg = userInfo["aps"]as? Dictionary<String,AnyObject>
        {
            if let alert = msg["alert"] as? String{
                if let data = alert.dataUsingEncoding(NSUTF8StringEncoding)
                {
                    do
                    {
                        let jsonObject = try NSJSONSerialization.JSONObjectWithData(data,options: [])
                        username = jsonObject["senderUserName"] as! String;
                        message = jsonObject["content"] as! String!;
                        DatabaseOperations().insert(DatabaseOperations().STRING_VALUE_CHATING_USERNAME, value: username);
                        NSNotificationCenter.defaultCenter().postNotificationName("push_notification", object: self)
                    }
                    catch
                    {

                    }
                }
            }
        }

        let localNotification: UILocalNotification = UILocalNotification()

        switch(login_user.privacyLevelId)
        {
        case 1:
            localNotification.alertBody = username + ":" + message;
            break;
        case 2:
            localNotification.alertBody = username;
            break;
        case 3:
            localNotification.alertBody = "New Message";
            break;
        default:
            localNotification.alertBody = "New Message";
            break;
        }

        localNotification.alertAction = "Message"
        localNotification.fireDate = NSDate(timeIntervalSinceNow: 5)
        localNotification.soundName = UILocalNotificationDefaultSoundName
        UIApplication.sharedApplication().scheduleLocalNotification(localNotification)


    }
    //App is shown and active
    else
    {

        if let msg = userInfo["aps"]as? Dictionary<String,AnyObject>
        {
            if let alert = msg["alert"] as? String
            {
                if let data = alert.dataUsingEncoding(NSUTF8StringEncoding)
                {
                    do
                    {
                        let jsonObject = try NSJSONSerialization.JSONObjectWithData(data,options: [])
                        let sender:String = jsonObject["senderUserName"] as! String;
                        DatabaseOperations().insert(DatabaseOperations().STRING_VALUE_CHATING_USERNAME, value: sender);
                        NSNotificationCenter.defaultCenter().postNotificationName("push_notification", object: self)
                    }
                    catch
                    {

                    }
                }
            }
        }
    }
}

我将 UIUserNotificationType 设置为 NONE。默认情况下,通知不应该不显示任何内容吗?

我也看了一些其他帖子,但我找不到任何解决问题的方法。

Why does UIUserNotificationType.None return true in the current settings when user permission is given?

如有任何帮助,我们将不胜感激。

如果应用程序关闭或处于后台状态,则不会调用应用程序 didReceiveRemoteNotification,因此您将无法创建本地通知。所以你需要传递你想在 aps 字典中显示的文本,与警报键相关联。

如果您想为活动状态案例传递更多信息,您应该使用自定义键将它们添加到推送词典中。 例如:

{"aps": {         
    "badge": 1,
    "alert": "Hello World!",
    "sound": "sound.caf"},
 "task_id": 1}