2015-02-21 2 views
1

Недавно я делаю проект по созданию приложения для чата на основе ios, такого как «whatsapp» или «Line». Я хочу создать базу данных для сообщений, передаваемых между разными пользователями (обычно на разных устройствах). Я нахожу решение «Parse» для базы данных и центра уведомлений.Уведомление о новых сообщениях в iOS с «Parse»

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

Но что я читал из документации, что

Уведомление «Parse» является вещать объявление или новость для широкого диапазона присоединяется к определенным каналам ,

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

+0

Почему это неэффективно? И все, что вы кодируете для кодирования, занимает много времени. Вы не получаете профессиональных результатов с 3-минутной сессии. – soulshined

+0

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

+0

Что вы подразумеваете для каждого использования? Разбор только делает то, что вы говорите, – soulshined

ответ

0

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

Что касается уведомлений, я обрабатывал свои push-уведомления. Я запросил в моем классе базы данных установки для пользователей с их объектным идентификатором в массиве получателей в разговоре и убедился, что он исключил текущего пользователя. Как только это будет сделано, я перезагружу сообщения из отправленного уведомления, потому что он запускает метод, если я нахожусь в этом контроллере представления, который поднимает уведомление, отправленное через Центр уведомлений. (У меня есть в баннере приложения, который будет выступать в качестве баннера 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]; 

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

+0

Вы имеете в виду, что разговор между A и B имеет convoID как 123456, и каждое сообщение между ними имеет одно и то же значение для своего собственного атрибута convoID? Другой вопрос - это значит, что один раз A отправляет сообщение B (или кучу парней). Приложение этих ребят должно было убрать действие для перезагрузки данных?Но как вы посылаете уведомления именно этим парням? Я имею в виду, как можно отправить уведомление динамической группе людей (или одиночной). я не знаю этого торого. – Bill

+0

Первый вопрос ... точно. Второй вопрос ... Предполагаю, что вы знакомы с PFInstallation, который является классом данных Push в базе данных Parse для вашего приложения. Когда пользователь входит в мое приложение, я устанавливаю указатель в столбце (в классе PFinstallation для [PFInstallation currentInstallation]), который связан с этим currentUser с [PFUser current] (кем бы это ни было), а затем я установил другой столбец называемый «userID», который является [PFUser current] .objectId. Что касается отправки толчка динамической группе людей, посмотрите мой добавленный код. @Bill – kygcoleman

+0

Я видел добавленный код. я узнаю, что я пропускаю тот факт, что Parse может отправить уведомления владельцу устройства (тому же, что и владелец учетной записи) рано или поздно. все, что мне нужно сделать, это просто нажать уведомления на указанные устройства. Это правильно? И если получатель проверяет это уведомление и сообщения, состояние беседы изменится на нормальное? большое спасибо ! – Bill

Смежные вопросы