Уведомление о новых сообщениях в iOS с помощью 'Parse'

В последнее время я делаю проект по созданию приложения для чата на базе ios, например "WhatsApp" или "Line". Я хочу создать базу данных для сообщений, передаваемых между разными пользователями (обычно на разных устройствах). Я нахожу решение "Parse" для базы данных и центра уведомлений.

Док "Parse" решение для отправки уведомлений и соответствующей базы данных

Но то, что я прочитал из документов, это то, что

Уведомление "Parse" предназначено для трансляции рекламы или новостей для широкого круга подписчиков на определенные каналы.

Я надеюсь, что я ошибаюсь, потому что я понятия не имею, что приложение чата 1 на 1 будет уведомлено таким образом. Я предположил, что в бэкэнде этого приложения таких обстоятельств пользователь подписывается на список пользователей (друзей), который является уникальным среди других. И когда кто-то с именем A отправляет сообщение другому с именем B. B получит уведомление об этом новом сообщении и заставит приложение перезагрузить данные в виде таблицы. Это оказывается очень трудоемким и неэффективным. Есть ли эффективный способ реализовать функцию уведомления и чата в рамках "Разбор"

1 ответ

Решение

У меня есть встроенный чат внутри моего приложения, использующего библиотеку Github под названием JSQMessages. Я также использую Parse в качестве моего бэкэнда. Я ничего не делаю с каналами. То, что я сделал, было создать некоторую логику. Если есть запрос сообщений для объекта беседы, и если нет, оставьте представление пустым. После создания первого сообщения мы создаем и сохраняем разговор, а также сообщение. Каждое сообщение имеет "convoID", который является objectId диалога. Таким образом, каждое сообщение может быть получено с помощью convoID. ObjectId объекта никогда не изменяется.

Что касается уведомлений, я обработал свои push-уведомления. Я запросил в своем классе базы данных установки для пользователей с их objectId в массиве получателей в диалоге и убедился, что он исключает текущего пользователя. Когда это сделано, я перезагружаю сообщения из отправленного уведомления, потому что он запускает метод, если я нахожусь в этом контроллере представления, который получает уведомление, отправленное через Центр уведомлений. (У меня есть баннер в приложении, который будет действовать как баннер для push-уведомлений внутри моего собственного приложения)

Если вы хотите посмотреть, что я сделал, я добавлю сюда некоторый код, но, хотя он может показаться длинным, это единственный способ увидеть, как он работает.

Некоторый добавленный код

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];

то, что он делает, это запрашивает класс установки в базе данных, а затем отправляет эти push-данные из NSDictionary этим пользователям. Обратите внимание, как я отключил себя от запроса, потому что сразу после того, как я просто позвонил [self loadMessages]; который загружает все мои сообщения

Другие вопросы по тегам