快速发送和接收推送通知

时间:2015-07-03 15:21:31

标签: ios swift parse-platform

enter image description here我在swift中使用Parse作为我的数据库创建了一个小型信使应用程序。我希望每次任何用户只向10米范围内的其他用户发送消息以获取通知。该应用程序正在运行,但推送通知不是。我做了一些研究,看起来我的代码与我找到的代码类似,但仍然无效。请帮我。谢谢

   var CurrentLocation : PFGeoPoint = PFGeoPoint(latitude: 44.6854, longitude: -73.873) // assume the current user is here
            let userQuery = PFUser.query()
           userQuery?.whereKey("Location", nearGeoPoint: CurrentLocation, withinMiles: 10.0)
            let pushQuery = PFInstallation.query()
            pushQuery?.whereKey("username", matchesQuery: userQuery!)
            let push = PFPush()
            push.setQuery(pushQuery) 
            push.setMessage(" New message")
            push.sendPushInBackground()

1 个答案:

答案 0 :(得分:1)

您的问题是pushQuery?.whereKey("username", matchesQuery: userQuery!)行。根据解析文档警告:这仅适用于键的值是PFObjects或PFObjects数组的地方。在此处阅读更多内容:https://parse.com/docs/osx/api/Classes/PFQuery.html#//api/name/whereKey:matchesQuery 而是通过首先执行第一个查询然后使用userIds的字符串来对第一个查询执行第一个查询,然后在第一个查询中执行链接查询。

更新

另外,作为旁注,你不遵守swift的骆驼案例规则以及Parse制定的规则。你应该遵循惯例。 (请参阅我的代码,了解Parse和变量名中键的正确用法)。

示例:

var currentLocation : PFGeoPoint = PFGeoPoint(latitude: 44.6854, longitude: -73.873) // assume the current user is here
 let userQuery = PFUser.query()
 userQuery?.whereKey("location", nearGeoPoint: currentLocation, withinMiles: 10.0) // Note I changed Location to location
userQuery?.findObjectsInBackground({ results, error in
   let usernames = (results as! [PFObject]).map { $0.username }
   let pushQuery = PFInstallation.query()
   pushQuery?.whereKey("username", containedIn: usernames)
   let push = PFPush()
   push.setQuery(pushQuery) 
   push.setMessage("New message")
   push.sendPushInBackground()
})

另请注意,您可能需要更改结构,因为PFInstallation.query的文档请注意您必须使用三个查询参数之一并且您使用none(您可能必须将安装对象ID保存到然后,不是使用用户名创建一个数组,而是使用安装对象ids和查询PFInstallation这样的数组。但是,这可能仍然有用,所以先尝试一下,你永远不会知道。