2015-12-20 2 views
0

Я разрабатываю приложение для чата. Я пользуюсь службой уведомлений apple push, чтобы уведомлять пользователя, когда он получает новые сообщения. Существует два сценария. Первое, когда пользователь беседует и получает сообщение, пользователь не должен получать уведомление (это означает, что уведомление не должно отображаться), а когда приложение находится в фоновом режиме, я хочу предупредить пользователя о сообщениях. Все в порядке, за исключением того, что когда приложение находится в фоновом режиме, уведомление показывает весь объект JSON, который получает клиент.Push-уведомление, отображающее весь получаемый контент, когда находится на фоне

Идея игнорирует визуальное уведомление и если на ее фоне отображается локальное уведомление.

Это, как я реализовал настройки уведомлений

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?

Hide, do not display remote notification from code (swift)

Любая помощь будет оценена.

ответ

1

приложение didReceiveRemoteNotification не будет вызываться, если приложение закрыто или в фоновом состоянии, поэтому вы не сможете создать локальное уведомление. Таким образом, вам нужно передать текст, который вы хотите отобразить в aps dictionnary, связанный с ключом предупреждения.

Если вы хотите передать дополнительную информацию для случая с активным состоянием, вы должны добавить их с помощью настраиваемого ключа для push-словаря push. Например:

{"aps": {   
    "badge": 1, 
    "alert": "Hello World!", 
    "sound": "sound.caf"}, 
"task_id": 1} 
Смежные вопросы