iOS 和 'Parse' 中的新消息通知
New Messages notification in iOS With 'Parse'
最近,我正在做一个构建基于 ios 的聊天应用程序的项目,例如 'whatsapp' 或 'Line'。
我想为不同用户(通常在不同设备上)之间传输的消息建立一个数据库。
我找到了数据库和通知中心的 'Parse' 解决方案。
Doc of 'Parse' solution for pushing notifications and related database
但是我从文档中读到的是
The notification of 'Parse' is to broadcast a ad or a news for a wide
range of subscribes to the certain channels.
我希望我弄错了,因为我不知道一对一聊天应用程序会以这种方式收到通知。我想象过,在这种情况下,在这个应用程序的后端,用户订阅了一个与其他人不同的用户(朋友)列表。当一个名为 A 的人正在向另一个名为 B 的人发送消息时,B 会收到该新消息的通知并强制应用程序重新加载表视图中的数据。结果证明这是非常耗时且效率低下的。
"Parse"
范围内有没有高效实现通知和聊天功能的方法
我在我的应用程序中使用名为 JSQMessages 的 github 库内置了聊天功能。我还使用 Parse 作为我的后端。我不对频道做任何事情。我所做的是创建一些逻辑。如果有对话对象的消息查询,如果没有,则将视图留空。创建第一条消息后,我们创建并保存对话和消息。每条消息都有一个 "convoID",这是对话的 objectId。所以每条消息都可以被convoID拉进来。对象的 objectId 永远不会改变。
就我处理推送通知的通知而言。我在我的安装数据库 class 中查询了在对话中的接收者数组中具有 objectId 的用户,并确保它排除了当前用户。完成后,我会重新加载已发送通知中的消息,因为如果我在该视图控制器中,它会触发一个方法,该方法会接收通过通知中心发送的通知。 (我有一个应用横幅,它将在我自己的应用中充当推送通知横幅)
如果您想看看我做了什么,我会在此处添加一些代码,但尽管它看起来很长,但这是我认为它有效的唯一方法。
一些添加的代码
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];
它的作用是查询数据库中的安装 class,然后将推送数据从 NSDictionary 发送给那些用户。请注意我是如何从查询中取消包含我自己的,因为在我刚刚调用 [self loadMessages];
之后加载了我所有的消息
最近,我正在做一个构建基于 ios 的聊天应用程序的项目,例如 'whatsapp' 或 'Line'。 我想为不同用户(通常在不同设备上)之间传输的消息建立一个数据库。 我找到了数据库和通知中心的 'Parse' 解决方案。
Doc of 'Parse' solution for pushing notifications and related database
但是我从文档中读到的是
The notification of 'Parse' is to broadcast a ad or a news for a wide range of subscribes to the certain channels.
我希望我弄错了,因为我不知道一对一聊天应用程序会以这种方式收到通知。我想象过,在这种情况下,在这个应用程序的后端,用户订阅了一个与其他人不同的用户(朋友)列表。当一个名为 A 的人正在向另一个名为 B 的人发送消息时,B 会收到该新消息的通知并强制应用程序重新加载表视图中的数据。结果证明这是非常耗时且效率低下的。 "Parse"
范围内有没有高效实现通知和聊天功能的方法我在我的应用程序中使用名为 JSQMessages 的 github 库内置了聊天功能。我还使用 Parse 作为我的后端。我不对频道做任何事情。我所做的是创建一些逻辑。如果有对话对象的消息查询,如果没有,则将视图留空。创建第一条消息后,我们创建并保存对话和消息。每条消息都有一个 "convoID",这是对话的 objectId。所以每条消息都可以被convoID拉进来。对象的 objectId 永远不会改变。
就我处理推送通知的通知而言。我在我的安装数据库 class 中查询了在对话中的接收者数组中具有 objectId 的用户,并确保它排除了当前用户。完成后,我会重新加载已发送通知中的消息,因为如果我在该视图控制器中,它会触发一个方法,该方法会接收通过通知中心发送的通知。 (我有一个应用横幅,它将在我自己的应用中充当推送通知横幅)
如果您想看看我做了什么,我会在此处添加一些代码,但尽管它看起来很长,但这是我认为它有效的唯一方法。
一些添加的代码
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];
它的作用是查询数据库中的安装 class,然后将推送数据从 NSDictionary 发送给那些用户。请注意我是如何从查询中取消包含我自己的,因为在我刚刚调用 [self loadMessages];
之后加载了我所有的消息