4 / 4 / 1
Регистрация: 25.08.2015
Сообщений: 56
1

Как приложение Вконтакте узнаёт о новом сообщении?

27.09.2016, 16:40. Показов 2699. Ответов 37
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Как реализовать подобную вещь:
как, например, приложение Вконтакте узнаёт о новом сообщение? Оно циклично посылает запрос на сервер с этой целью? Или для этого используется какое-то средство Андроида?
Как возможно это реализовать? Если я хочу в своём приложении встроить что-то типа "оповещения о новых событиях", а информацию о них выкладывать на своём сервере.

Просто, если циклично посылать запрос, то это и на батарею плохо влияет и на расход трафика.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.09.2016, 16:40
Ответы с готовыми решениями:

Как сделать оповещение о новом сообщении.
Здравствуйте подскажите пожалуйста как можно реализовать оповещение о новом сообщение сделал...

Как отправить на e-mail сообщение о новом сообщении
Здравствуйте, Мне нужна помощь, я новичок в php, и ещё многого не знаю, но изучаю. Перейду к делу:...

Социальные сети: как на MVC 3 можно организовать быстрое уведмомление о новом сообщении
Мне в голову пришло несколько вариантов: 1) организовать запросы со страницы пользователя на...

Уведомление о новом сообщении
Всем доброго времени суток! Никак не могу найти варианта где я бы мог видеть свои новые сообщения....

37
2883 / 2295 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
27.09.2016, 16:59 2
https://firebase.google.com/do... oid/client
1
20 / 14 / 2
Регистрация: 10.06.2016
Сообщений: 144
27.09.2016, 17:02 3
оффтоп:
Цитата Сообщение от S4nchez Посмотреть сообщение
как, например, приложение Вконтакте узнаёт о новом сообщение?
последнее время оно очень очень очень плохо об этом узнает
0
CoolMind
27.09.2016, 17:30
  #4

Не по теме:

Цитата Сообщение от klim76 Посмотреть сообщение
последнее время оно очень очень очень плохо об этом узнает
Кстати, да, чаще всего при включении экрана.

0
4 / 4 / 1
Регистрация: 25.08.2015
Сообщений: 56
27.09.2016, 17:30  [ТС] 5
т.е. эта технология называется Push уведомления?
0
2883 / 2295 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
27.09.2016, 17:54 6
почитать по ссылке не?
2
111 / 111 / 43
Регистрация: 24.05.2015
Сообщений: 329
27.09.2016, 19:05 7
Цитата Сообщение от CoolMind Посмотреть сообщение
Кстати, да, чаще всего при включении экрана.
Если андроид 6-ой, то это похоже на работу doze mode.
1
3 / 3 / 0
Регистрация: 19.07.2016
Сообщений: 15
27.10.2016, 12:15 8
Ходил я по ссылке. Понял что Firebase Cloud Messaging позволяет с консоли строчить сообщения конкретным пользователям. Вопрос не в этом. Вопрос в том, как реализовать запрос на сервер и получить ответ, особенно когда приложение выключено. Я пробовал сделать это с помощью отложенного сервиса, работающего в фоне. Но в классе сервиса, похоже нельзя создать GoogleApiClient, который необходим для принятия запросов сервером.
0
2883 / 2295 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
27.10.2016, 12:17 9
Цитата Сообщение от Bi-do-mi Посмотреть сообщение
создать GoogleApiClient
причем тут GoogleApiClient вообще?
0
3 / 3 / 0
Регистрация: 19.07.2016
Сообщений: 15
27.10.2016, 12:20 10
Ну наверно непричем, новичок не разбираюсь. Но если нет толкового ответа, зачем флудить?
0
2883 / 2295 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
27.10.2016, 12:25 11
если ты новичек и пришел сюда с вопросами то не умничай и не рассказывай мне что делать
на конкретные вопросы всегда будут нормальные ответы

Цитата Сообщение от Bi-do-mi Посмотреть сообщение
Ходил я по ссылке. Понял что Firebase Cloud Messaging позволяет с консоли строчить сообщения конкретным пользователям. Вопрос не в этом.
это не вопрос, а утверждение, причем выводы сделаны неверные
Цитата Сообщение от Bi-do-mi Посмотреть сообщение
Вопрос в том, как реализовать запрос на сервер и получить ответ, особенно когда приложение выключено.
это делается с помощью сервиса
Цитата Сообщение от Bi-do-mi Посмотреть сообщение
Я пробовал сделать это с помощью отложенного сервиса, работающего в фоне. Но в классе сервиса, похоже нельзя создать GoogleApiClient, который необходим для принятия запросов сервером.
тут тоже нет вопроса, плюс непонятно что за сервер там, на который надо делать запрос
1
3 / 3 / 0
Регистрация: 19.07.2016
Сообщений: 15
27.10.2016, 12:30 12
И то, что написано выше ты хочешь назвать ответами? Я скорее назову это загоном для "опытных" павлинов, которые самоутверждаются за счет новичков. Расслабься и просто пройди мимо.
1
vxg
27.10.2016, 12:40
  #13
 Комментарий модератора 
Bi-do-mi, Паблито, возвращаемся к теме, обсудить форму розы ветров можно за чашкой чая
0
114 / 120 / 26
Регистрация: 29.01.2014
Сообщений: 609
27.10.2016, 13:14 14
все аппликации которые получают уведомления в фоне, в той или иной мере работают через сервисы гугла, то что вы хотите реализовать это немного по другому, сервис (стики) должен держать в себе какой то "таймер", и каждый промежуток времени посылать запрос на сервер , через API сервера и получать ответ, читайте ретрофит. но это не то же самое что вы просили сделать в первичном вопросе. обьясните подробней flow чтоб мы поняли что вы хотите конкретно
0
3 / 3 / 0
Регистрация: 19.07.2016
Сообщений: 15
27.10.2016, 23:03 15
Благодаря элегантной манере некоторых людей (не будем показывать пальцем) "отвечать" , я все таки понял, что я чего-то не дочитал по золотой ссылке. Изучаю Firebase Cloud Messaging. Если совсем прижмет - спрошусь.

Добавлено через 8 часов 1 минуту
Ох ребята, устал я, честное слово читать эти руководства по FCM. Сколько уроков пересмотрел, и все они заканчиваются тем, что из консоли отправляют на мобилку уведомление. И радуются чего-то. Кому это вообще надо? Вместо сервлета тетю Зину что ли на работу брать, которая будет из консоли сообщения отправлять?
Вопрос простой как две копейки. Как реализуется механизм получения обновлений из Firebase Database когда приложение на устройстве выключено. По аналогии с Вконтакте. Допустим собеседник №1 отправил сообщение собеседнику №2. Не знаю куда у Вконтакта летит сообщение: на сервер или непосредственно собеседнику №2, но в моем случае сообщение летит в базу данных. Вопрос: как устройство собеседника №2 узнает и получит новое сообщение из базы если приложение НЕ запущено. Уверен этот велосипед, который я тут уже три дня изобретаю, уже давно существует. И да! Новички приходят сюда для того, чтобы на их глупые вопросы давали умные ответы, но никак не наоборот.
1
Модератор
3386 / 2158 / 352
Регистрация: 13.01.2012
Сообщений: 8,375
28.10.2016, 06:34 16
Bi-do-mi, лично я это не использовал но на 99% уверен что работает это так
- вариант внесения данных номер один - пользователь пишет в нашем приложении например сообщение, приложение кладёт его в базу, класс обслуживающий базу сам отправляет сообщение наверх (база ведь реально находится там и положить в базу равносильно отправке)
- вариант внесения данных номер два - нечто (например наш сайт) размещает например новость напрямую в базе используя её API
- вариант внесения данных номер три - например администратор размешает например уведомление напрямую в базе используя консоль
- что происходит после этого - база сама рассылает данные на устройства и они появляются в нашем приложении - как? - при запуске (при первом запуске или при запуске происходящем в ходе загрузки устройства благодаря наличию у нашего приложения ресивера события загрузки) наше приложение например посылает наверх запрос в котором указывает идентификатор базы (теперь наверху знают что на этом устройстве стоит именно эта база и нужно посылать на это устройство данные изменившиеся именно в этой базе, возможно даже указывается какие именно данные мы хотим получать, возможно даже указывается имя и пароль пользователя для проверки его полномочий, возможно даже разные пользователи имеют право изъявить желание получать только разрешенные им наборы данных) после чего приложение регистрирует ресивер который будет вызываться системой при получении данных сверху: данные приходят (как я понимаю даже на спящий телефон на манер GCM - об этом позаботились аффилированные лица) --> система вызывает ресивер --> наше приложение в той или иной форме использует полученные данные
1
3 / 3 / 0
Регистрация: 19.07.2016
Сообщений: 15
28.10.2016, 09:04 17
Спасибо за ответ. Но, судя по терминологии ответа, вы мало знакомы с внутренней архитектурой построения кода андроид-приложения и его взаимодействия с Firebase. С посылом данных на сервер нет никаких проблем. Это делается буквально в две-три строчки. А вот с получением данных вы только что описали вариант с созданием фонового сервиса, который периодически делает запросы в базу данных. Глубоко уважаемый Паблито тоже указывал на то, что это делается с помощью сервиса. Как я писал выше, я пробовал реализовать свой собственно выдуманный, но он не работает в условиях, когда приложение выключено (а сервис при этом работает). Я думаю, что он не может получить доступ к базе потому, что для принятия запроса база требует запрос, исходящий от авторизованного пользователя. В моем случае авторизация происходит через существующий гугл - аккаунт. И происходит это в теле основного приложения, который в это время спит. И я не знаю как пройти авторизацию в условиях только фонового сервиса. Там нет для этого инструментов.
Ок, почитал я FCM. Там предлагают свой вариант сервиса под названием FirebaseMessagingService. Он прекрасно принимает уведомления, высланные из консоли FCM, когда приложение выключено. Но совершенно не ясно как посылать нужные обновленные данные из базы данных на устройство АВТОМАТИЧЕСКИ (не из консоли FCM). Тут я должен сказать, что Firebase умеет автоматически скидывать на устройство обновленные данные с сервера, но только при условии, что приложение на устройстве включено и подписано (прослушивает) на эти конкретные данные.
Если все таки реализовать свой сервис, каким-то чудом авторизоваться, то возникает еще один вопрос. В случае с Вконтакте сообщения приходят практически мгновенно после отправки. Для такого быстродействия нужно чтобы фоновый сервис все время прослушивал (делал) запросы в базу. Но это сразу посадит аккумулятор устройства и не даст даже уйти в глубокий сон.
Вот такие дела. Надеюсь я четко сформулировал вопрос.
1
Модератор
3386 / 2158 / 352
Регистрация: 13.01.2012
Сообщений: 8,375
28.10.2016, 10:08 18
Цитата Сообщение от Bi-do-mi Посмотреть сообщение
судя по терминологии ответа, вы мало знакомы с внутренней архитектурой построения кода андроид-приложения и его взаимодействия с Firebase
судя по вашему посту вы вообще не знакомы со всем этим и то что вы читаете не укладывается у вас в голове
Цитата Сообщение от Bi-do-mi Посмотреть сообщение
вы только что описали вариант с созданием фонового сервиса, который периодически делает запросы в базу данных
ваши глаза читают но разум ваш спит - периодические запросы не нужны и я нигде не писал о них - есть ресивер, когда придут новые данные телефон сам проснется и сам вызовет ваш ресивер (при необходимости запустив ваше приложение - только не путайте приложение с тем что вы видите на экране ) известив тем самым вашу программу об интересующим вас событии (обновлении данных).
Цитата Сообщение от Bi-do-mi Посмотреть сообщение
это делается с помощью сервиса. Как я писал выше, я пробовал реализовать свой собственно выдуманный, но он не работает в условиях, когда приложение выключено (а сервис при этом работает)
выпрямите руки и все получится
Цитата Сообщение от Bi-do-mi Посмотреть сообщение
И я не знаю как пройти авторизацию в условиях только фонового сервиса. Там нет для этого инструментов.
RTFM - все там есть
Цитата Сообщение от Bi-do-mi Посмотреть сообщение
Ок, почитал я FCM. Там предлагают свой вариант сервиса под названием FirebaseMessagingService. Он прекрасно принимает уведомления, высланные из консоли FCM, когда приложение выключено. Но совершенно не ясно как посылать нужные обновленные данные из базы данных на устройство АВТОМАТИЧЕСКИ (не из консоли FCM). Тут я должен сказать, что Firebase умеет автоматически скидывать на устройство обновленные данные с сервера, но только при условии, что приложение на устройстве включено и подписано (прослушивает) на эти конкретные данные.
то у вас не проходит запрос из за отсутствия авторизации и нет инструментов что бы обеспечить авторизацию то вдруг ВНЕЗАПНО все работает как описано но вот незадача - нужен ресивер - вы не хотите писать ресивер? в этом все дело?
Цитата Сообщение от Bi-do-mi Посмотреть сообщение
Для такого быстродействия нужно чтобы фоновый сервис все время прослушивал (делал) запросы в базу. Но это сразу посадит аккумулятор устройства и не даст даже уйти в глубокий сон.
Боже, нет даже сил это слышать - не нужно делать все время запросы если нисходящий поток данных обеспечивается системой GCM или Firebase. если же вы хотите использовать свой путь то либо шлите на устройство data SMS пробуждающее его и перехватываемое вашим приложением при помощи ресивера (увы, наверное это будет стоить денег не говоря уже о необходимости наличия связи на борту устройства и потребности знать его номер) либо периодически опрашивайте внешний ресурс (да да да - это будет жрать батарею, поэтому не нужно молотить запросы каждые 5 с - вполне хватит запрашивать раз в 5 минут - не лопнет пользователь от того что узнает что его лайнули на 5 минут позже)
0
3 / 3 / 0
Регистрация: 19.07.2016
Сообщений: 15
28.10.2016, 11:01 19
Цитата Сообщение от vxg Посмотреть сообщение
судя по вашему посту вы вообще не знакомы со всем этим и то что вы читаете не укладывается у вас в голове

ваши глаза читают но разум ваш спит - периодические запросы не нужны и я нигде не писал о них - есть ресивер, когда придут новые данные телефон сам проснется и сам вызовет ваш ресивер (при необходимости запустив ваше приложение - только не путайте приложение с тем что вы видите на экране ) известив тем самым вашу программу об интересующим вас событии (обновлении данных).

выпрямите руки и все получится

RTFM - все там есть

то у вас не проходит запрос из за отсутствия авторизации и нет инструментов что бы обеспечить авторизацию то вдруг ВНЕЗАПНО все работает как описано но вот незадача - нужен ресивер - вы не хотите писать ресивер? в этом все дело?

Боже, нет даже сил это слышать - не нужно делать все время запросы если нисходящий поток данных обеспечивается системой GCM или Firebase. если же вы хотите использовать свой путь то либо шлите на устройство data SMS пробуждающее его и перехватываемое вашим приложением при помощи ресивера (увы, наверное это будет стоить денег не говоря уже о необходимости наличия связи на борту устройства и потребности знать его номер) либо периодически опрашивайте внешний ресурс (да да да - это будет жрать батарею, поэтому не нужно молотить запросы каждые 5 с - вполне хватит запрашивать раз в 5 минут - не лопнет пользователь от того что узнает что его лайнули на 5 минут позже)
Ок, возможно я туплю, но вопрос надо решить.
RTFM - это конечно сильно. Нопомнило преподавателя в институте. Если подойти к ней с непонятным вопросом она всегда отвечала: "Читайте ГОСТы и СНиПы, там же все написано!".
GCM уже устарел и гугл настоятельно рекомендует использовать вместо него FCM. Не будем вспоминать о ветеранах.
Насчет работает-не работает с элементами внезапности. Я писал о своем собственноручно созданном сервисе, что он работает когда приложение запущено. То есть он отправляет запрос и получает ответ. Но он не работает когда приложение выключено. При чем тут ресивер, если база данных поднимает средний палец на запрос?
Внезапно, при отключенном приложении работает сервис от FCM о котором я писал выше (НЕ МОЙ СЕРВИС). Это грубо говоря коробка, которую ты внедряешь в свое приложение, фиг его знает как он там внутри фунциклирует. В этой коробке предлагается переписать единственный метод при приеме сообщения. Ну то есть как обработать принятые данные. И вот вы тут пишите:
не нужно делать все время запросы если нисходящий поток данных обеспечивается системой GCM или Firebase
Как он обеспечивается? Куда тыкать чтобы инициировать событие отправки из базы на устройство обновлений?
И я вовсе не ленюсь писать ресивер. Только зачем его писать если у меня, вроде как, уже есть ресивер, даже два (один в теле основного приложения, а второй в коробке от FCM).
0
Модератор
3386 / 2158 / 352
Регистрация: 13.01.2012
Сообщений: 8,375
28.10.2016, 11:17 20
Цитата Сообщение от Bi-do-mi Посмотреть сообщение
Я писал о своем собственноручно созданном сервисе, что он работает когда приложение запущено. То есть он отправляет запрос и получает ответ. Но он не работает когда приложение выключено.
то что вы не можете создать сервис который будет работать когда пользователь покинул приложение (не убил, а именно покинул да простят меня за этот бытовой термин) - ваши сложности не относящиеся к текущей теме. для общего развития - у меня (и у других людей читавших тот самый FM до достижения дзен) сервисы продолжают работать после того как пользователь покидает приложение. более того - если надо они работают даже если пользователь не открывал приложение (система сама поднимает их при наступлении нужного нам события вызывая наш ресивер в котором мы запускаем наш сервис, например, при загрузке устройства или при получении SMS или - ВОТ ОНО - при получении уведомления от Firebase).
Цитата Сообщение от Bi-do-mi Посмотреть сообщение
Как он обеспечивается? Куда тыкать чтобы инициировать событие отправки из базы на устройство обновлений?
как я нафантазировал выше по мотивам беглого чтения манов к Firebase вам нужно лишь послать запрос "окай, Firebase, на этом устройстве есть приложение которое хочет получать для пользователя *** с паролем *** уведомления при изменении данных *** в базе *** " и зарегистрировать свой ресивер (либо прописать ресивер в манифест если это возможно). думаю этого будет достаточно, однако, лично не проверял. просто описал минимальный набор действий которые ТЕХНИЧЕСКИ необходимы для такой штуки
0
28.10.2016, 11:17
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.10.2016, 11:17
Помогаю со студенческими работами здесь

Оповещение о новом сообщении
Пытаюсь сделать систему оповещения о новых сообщениях. Пока сделано с помощью перезагрузки...

Событие о новом сообщении
Доброго времени суток. Разрабатываю сайт ms sql, linq c#, iis, ms. Общение с пользователем ajax...

Уведомление о новом входящем сообщении
Ребят, подкиньте идеи, как организовать уведомление о новом входящем сообщении в виде: Мои...

как раскрутить приложение вконтакте?
Господа! Есть приложение http://vkontakte.ru/app1643300_3466634 (ugadaikino.ru) Требуется...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru