我在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()
答案 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这样的数组。但是,这可能仍然有用,所以先尝试一下,你永远不会知道。