使用Parse和Swift发送用户到用户的推送通知时出现问题

3

我在进行用户间推送通知时遇到了问题。我使用的是Parse后端,所有代码均为Swift语言编写。我可以无误地向服务器添加推送通知,但是当我尝试添加一个推送通知接收者时,却出现了错误,并且弹出了[PFFnternalUtils assertValidClassForQuery:]的提示。我知道这与我查询接收者的方式有关,但我不知道该如何解决。非常感谢您的帮助。以下是我的完整代码:

    let message: NSString = responseMessage.text as NSString

    var data = [ "title": "Some Title",
                 "alert": message]

    var userQuery: PFQuery = PFUser.query()
    userQuery.whereKey("objectId", equalTo: recipientObjectId)
    var query: PFQuery = PFInstallation.query()
    query.whereKey("currentUser", equalTo: userQuery)

    var push: PFPush = PFPush()
    push.setQuery(query)
    push.setData(data)
    push.sendPushInBackground()

这样做是有效的 如果我删除查询语句,代码仅通过向Parse发送推送通知即可工作:

    let message: NSString = responseMessage.text as NSString

    var data = [ "title": "Some Title",
                 "alert": message]

    var push: PFPush = PFPush()
    push.setData(data)
    push.sendPushInBackground()

这是嫌疑代码

    var userQuery: PFQuery = PFUser.query()
    userQuery.whereKey("objectId", equalTo: recipientObjectId)
    var query: PFQuery = PFInstallation.query()
    query.whereKey("currentUser", equalTo: userQuery)

    push.setQuery(query)

供参考

recipientObjectId是接收推送通知的用户的objectId,以NSString格式保存。

我的installation class中的"currentUser"键是指向拥有该安装的用户的指针。

编辑

忘了提供控制台输出。控制台输出显示:'NSInvalidArgumentException',原因是:“不能针对类型为PFQuery的查询进行比较查询”。


亲爱的user3353890;您能提供一下控制台输出,其中包含错误[PFInternalUtils assertValidClassForQuery:]吗?谢谢。 - kingspeech
当然!是我的错误。我设置了一个异常断点,忘记关闭它以获取控制台输出...输出错误显示:'NSInvalidArgumentException',原因:'无法对类型为PFQuery的查询进行比较'...我也会在我的问题中进行修改。 - user3353890
亲爱的user3353890;您能否检查一下您的用户查询是否返回结果?我认为与返回User对象(关系)有关的问题。 - kingspeech
亲爱的用户3353890,据我所知,如果您在Installation表上有一个类型为Pointer<_User>的列,则您的Push查询应该可以工作。请再次检查Parse的推送通知文档,链接如下:https://parse.com/docs/push_guide#sending-queries/iOS希望这可以帮助到您, 问候, - kingspeech
我正在尝试从这段代码中学习如何在设备之间发送推送通知(请参见我的帖子),但我不确定"responseText"指的是什么。您能提供一些指导吗? - mattgabor
显示剩余2条评论
1个回答

3

找到答案了!

不要使用

query.whereKey("currentUser", equalTo: userQuery)

正确的代码是

query.whereKey("currentUser", matchesQuery: userQuery)

您介意贴出完整的代码吗?从您在问题中尝试的所有不同方式以及最终使用的完整代码,我感到有些困惑。@user3353890 - Lukesivi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接