iOS中的新消息通知使用'Parse'

时间:2015-02-21 13:39:07

标签: ios parse-platform notifications livechat

最近,我正在做一个建立基于ios的聊天应用程序的项目,比如'whatsapp'或'Line'。 我想为不同用户(通常在不同设备上)之间传输的消息构建数据库。 我找到了数据库和通知中心的'Parse'解决方案。

Doc of 'Parse' solution for pushing notifications and related database

但我从文档中读到的是

  

'Parse'的通知是广播广告或新闻   订阅某些频道的范围。

我希望我弄错了,因为我不知道以这种方式通知一对一的聊天应用程序。我已经想到,在这种情况的应用程序的后端,用户订阅了与其他人不同的用户(朋友)列表。当有人命名A正在向另一个命名B发送消息时,B将获得该新消息的通知并强制该应用程序重新加载tableview中的数据。结果证明这是非常耗时且效率不高的。 是否有一种有效的方法在“Parse”范围内实现通知和聊天功能

1 个答案:

答案 0 :(得分:0)

我在app中使用名为JSQMessages的github库内置了一个Chat。我也使用Parse作为我的后端。我没有对频道做任何事情。我所做的是创造一些逻辑。如果有消息查询对话对象,如果没有,请将视图留空。创建第一条消息后,我们创建并保存对话以及消息。每条消息都有一个“convoID”,它是会话的objectId。因此,每条消息都可以通过convoID拉入。对象的objectId永远不会改变。

就通知我处理推送通知。我在我的安装数据库类中查询了对象中的objectId在对话中的接收器数组中,并确保它排除了当前用户。完成后,我会从已发送的通知重新加载消息,因为如果我在该视图控制器中,它会触发通过通知中心发送的通知,则会触发方法。 (我有一个app横幅,它将在我自己的应用程序中充当推送通知横幅)

如果你想看看我做了什么,我会在这里抛出一些代码但是虽然看起来很冗长,但这是我看到它工作的唯一方式。

添加了一些代码

PFQuery *pushQuery = [PFInstallation query];
[pushQuery whereKey:@"userID" containedIn:messageReceiverObject[@"receivers"]];
[pushQuery whereKey:@"userID" notEqualTo:self.senderId];
NSDictionary *data = @{@"alert":[NSString stringWithFormat:@"@%@: %@", self.senderDisplayName, messageReceiverObject[@"lastMessage"]], @"badge":@"increment", @"content-available":@"1", @"sound":@"", @"m": @"message"};
[PFPush sendPushDataToQueryInBackground:pushQuery withData:data];

它的作用是查询数据库中的安装类,然后将该推送数据从NSDictionary发送给这些用户。请注意我是如何从查询中取消自我的,因为我刚刚调用加载所有邮件的[self loadMessages];