2015-12-26 4 views
1

У меня есть данные, сохраненные в уведомлении push с помощью службы Push-сервиса Parse.com, но когда я печатаю полезную нагрузку. Кажется, это ноль. Почему это происходит, и как я могу это исправить? Благодарю. Любая помощь приветствуется.Почему полезная нагрузка в push-уведомлении nil?

func pushNotifications(){ 

    let data = [ 
     "alert" : "\(username!) wants you to listen to \(titleofsong) by \(artist)", 
     "identifier":"PlayerController", "title" : "test title", "artist" : "test artist" 
    ] 
    let push = PFPush() 
    push.setQuery(pushQuery) 
    push.setData(data) 
    push.sendPushInBackgroundWithBlock { 
     success, error in 

     if success { 
      print("The push succeeded.") 
     } else { 
      print("The push failed.") 
     } 
    } 
} 

func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject]) { 
    PFPush.handlePush(userInfo) 
    let title = userInfo["aps"]!["title"] 
    let artist = userInfo["aps"]!["artist"] 
    print(title) 
    print(artist) 
} 
+0

Параметр 'aps' ключ отсутствует. Прочтите документацию, как создать действительную полезную нагрузку. – vadian

+0

Как выглядит aps-ключ и как его реализовать? – stackerleet

ответ

1

Согласовывающ documentation ваш APNS полезный груз должен выглядеть

let data = [ 
    "aps" : [ 
    "alert" : [ 
     "title" : "New Request", 
     "body" : "\(username!) wants you to listen to \(titleofsong) by \(artist)", 
     "action-loc-key" : "Listen" 
    ], 
    ], 
    "username" : "test user", 
    "identifier" : "PlayerController", 
    "title" : "test title", 
    "artist" : "test artist" 
] 

Затем вы можете извлечь название и исполнителя с

let title = userInfo["title"] 
let artist = userInfo["artist"] 
0

Вместо этого, я думаю, вы должны напечатать что в userInfo. Из документов Parse.com, вам не нужно, чтобы получить aps до извлечения пользовательских данных из userInfo так:

let title = userInfo["title"] 
let artist = userInfo["artist"] 

Я на самом деле не проверить это, я сделал этот вывод на основе документации Parse: https://parse.com/docs/ios/guide#push-notifications-responding-to-the-payload

Пример из Parse.com для отправки:

let data = [ 
    "alert" : "James commented on your photo!", 
    "p" : "vmRZXZ1Dvo" // Photo's object id 
] 
let push = PFPush() 
push.setQuery(photoOwnerQuery) 
push.setData(data) 
push.sendPushInBackground() 

Пример из Parse.com для приема:

func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject], fetchCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) { 
    if let photoId: String = userInfo["p"] as? String { 
    let targetPhoto = PFObject(withoutDataWithClassName: "Photo", objectId: photoId) 
    targetPhoto.fetchIfNeededInBackgroundWithBlock { (object: PFObject?, error: NSError?) -> Void in 
     // Show photo view controller 
     if error != nil { 
     completionHandler(UIBackgroundFetchResult.Failed) 
     } else if PFUser.currentUser() != nil { 
     let viewController = PhotoVC(withPhoto: object) 
     self.navController.pushViewController(viewController, animated: true) 
     completionHandler(UIBackgroundFetchResult.NewData) 
     } else { 
     completionHandler(UIBackgroundFetchResult.NoData) 
     } 
    } 
    } 
    handler(UIBackgroundFetchResult.NoData) 
} 
Смежные вопросы