Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
 
S4nchez
3 / 3 / 1
Регистрация: 25.08.2015
Сообщений: 56
#1

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

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

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

Просто, если циклично посылать запрос, то это и на батарею плохо влияет и на расход трафика.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.09.2016, 16:40     Как приложение Вконтакте узнаёт о новом сообщении?
Посмотрите здесь:
Приложение не может пройти авторизацию вконтакте Android
Падает приложение для публикации вконтакте Android
Android Одно приложение вконтакте работает, а второе нет
Как на новом планшете снести андроид и поставить нормальный виндовс, как минимум ХР Android
Android Как создать выдвигающееся слева меню (как в приложении вконтакте)?
Android Как сделать, чтобы данные, введенные в EditText, сохранялись и пополнялись в новом активити?
Android Как распарсить JSON c Вконтакте API
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Pablito
2419 / 1864 / 583
Регистрация: 12.05.2014
Сообщений: 6,603
Завершенные тесты: 1
27.09.2016, 16:59     Как приложение Вконтакте узнаёт о новом сообщении? #2
https://firebase.google.com/docs/clo...android/client
klim76
20 / 14 / 2
Регистрация: 10.06.2016
Сообщений: 135
27.09.2016, 17:02     Как приложение Вконтакте узнаёт о новом сообщении? #3
оффтоп:
Цитата Сообщение от S4nchez Посмотреть сообщение
как, например, приложение Вконтакте узнаёт о новом сообщение?
последнее время оно очень очень очень плохо об этом узнает
CoolMind
27.09.2016, 17:30
  #4

Не по теме:

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

S4nchez
3 / 3 / 1
Регистрация: 25.08.2015
Сообщений: 56
27.09.2016, 17:30  [ТС]     Как приложение Вконтакте узнаёт о новом сообщении? #5
т.е. эта технология называется Push уведомления?
Pablito
2419 / 1864 / 583
Регистрация: 12.05.2014
Сообщений: 6,603
Завершенные тесты: 1
27.09.2016, 17:54     Как приложение Вконтакте узнаёт о новом сообщении? #6
почитать по ссылке не?
fraley
103 / 103 / 37
Регистрация: 24.05.2015
Сообщений: 313
27.09.2016, 19:05     Как приложение Вконтакте узнаёт о новом сообщении? #7
Цитата Сообщение от CoolMind Посмотреть сообщение
Кстати, да, чаще всего при включении экрана.
Если андроид 6-ой, то это похоже на работу doze mode.
Bi-do-mi
3 / 3 / 0
Регистрация: 19.07.2016
Сообщений: 15
27.10.2016, 12:15     Как приложение Вконтакте узнаёт о новом сообщении? #8
Ходил я по ссылке. Понял что Firebase Cloud Messaging позволяет с консоли строчить сообщения конкретным пользователям. Вопрос не в этом. Вопрос в том, как реализовать запрос на сервер и получить ответ, особенно когда приложение выключено. Я пробовал сделать это с помощью отложенного сервиса, работающего в фоне. Но в классе сервиса, похоже нельзя создать GoogleApiClient, который необходим для принятия запросов сервером.
Pablito
2419 / 1864 / 583
Регистрация: 12.05.2014
Сообщений: 6,603
Завершенные тесты: 1
27.10.2016, 12:17     Как приложение Вконтакте узнаёт о новом сообщении? #9
Цитата Сообщение от Bi-do-mi Посмотреть сообщение
создать GoogleApiClient
причем тут GoogleApiClient вообще?
Bi-do-mi
3 / 3 / 0
Регистрация: 19.07.2016
Сообщений: 15
27.10.2016, 12:20     Как приложение Вконтакте узнаёт о новом сообщении? #10
Ну наверно непричем, новичок не разбираюсь. Но если нет толкового ответа, зачем флудить?
Pablito
2419 / 1864 / 583
Регистрация: 12.05.2014
Сообщений: 6,603
Завершенные тесты: 1
27.10.2016, 12:25     Как приложение Вконтакте узнаёт о новом сообщении? #11
если ты новичек и пришел сюда с вопросами то не умничай и не рассказывай мне что делать
на конкретные вопросы всегда будут нормальные ответы

Цитата Сообщение от Bi-do-mi Посмотреть сообщение
Ходил я по ссылке. Понял что Firebase Cloud Messaging позволяет с консоли строчить сообщения конкретным пользователям. Вопрос не в этом.
это не вопрос, а утверждение, причем выводы сделаны неверные
Цитата Сообщение от Bi-do-mi Посмотреть сообщение
Вопрос в том, как реализовать запрос на сервер и получить ответ, особенно когда приложение выключено.
это делается с помощью сервиса
Цитата Сообщение от Bi-do-mi Посмотреть сообщение
Я пробовал сделать это с помощью отложенного сервиса, работающего в фоне. Но в классе сервиса, похоже нельзя создать GoogleApiClient, который необходим для принятия запросов сервером.
тут тоже нет вопроса, плюс непонятно что за сервер там, на который надо делать запрос
Bi-do-mi
3 / 3 / 0
Регистрация: 19.07.2016
Сообщений: 15
27.10.2016, 12:30     Как приложение Вконтакте узнаёт о новом сообщении? #12
И то, что написано выше ты хочешь назвать ответами? Я скорее назову это загоном для "опытных" павлинов, которые самоутверждаются за счет новичков. Расслабься и просто пройди мимо.
vxg
27.10.2016, 12:40
  #13
 Комментарий модератора 
Bi-do-mi, Паблито, возвращаемся к теме, обсудить форму розы ветров можно за чашкой чая
shavuz
99 / 105 / 19
Регистрация: 29.01.2014
Сообщений: 527
27.10.2016, 13:14     Как приложение Вконтакте узнаёт о новом сообщении? #14
все аппликации которые получают уведомления в фоне, в той или иной мере работают через сервисы гугла, то что вы хотите реализовать это немного по другому, сервис (стики) должен держать в себе какой то "таймер", и каждый промежуток времени посылать запрос на сервер , через API сервера и получать ответ, читайте ретрофит. но это не то же самое что вы просили сделать в первичном вопросе. обьясните подробней flow чтоб мы поняли что вы хотите конкретно
Bi-do-mi
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 узнает и получит новое сообщение из базы если приложение НЕ запущено. Уверен этот велосипед, который я тут уже три дня изобретаю, уже давно существует. И да! Новички приходят сюда для того, чтобы на их глупые вопросы давали умные ответы, но никак не наоборот.
vxg
Модератор
3117 / 1919 / 208
Регистрация: 13.01.2012
Сообщений: 7,349
28.10.2016, 06:34     Как приложение Вконтакте узнаёт о новом сообщении? #16
Bi-do-mi, лично я это не использовал но на 99% уверен что работает это так
- вариант внесения данных номер один - пользователь пишет в нашем приложении например сообщение, приложение кладёт его в базу, класс обслуживающий базу сам отправляет сообщение наверх (база ведь реально находится там и положить в базу равносильно отправке)
- вариант внесения данных номер два - нечто (например наш сайт) размещает например новость напрямую в базе используя её API
- вариант внесения данных номер три - например администратор размешает например уведомление напрямую в базе используя консоль
- что происходит после этого - база сама рассылает данные на устройства и они появляются в нашем приложении - как? - при запуске (при первом запуске или при запуске происходящем в ходе загрузки устройства благодаря наличию у нашего приложения ресивера события загрузки) наше приложение например посылает наверх запрос в котором указывает идентификатор базы (теперь наверху знают что на этом устройстве стоит именно эта база и нужно посылать на это устройство данные изменившиеся именно в этой базе, возможно даже указывается какие именно данные мы хотим получать, возможно даже указывается имя и пароль пользователя для проверки его полномочий, возможно даже разные пользователи имеют право изъявить желание получать только разрешенные им наборы данных) после чего приложение регистрирует ресивер который будет вызываться системой при получении данных сверху: данные приходят (как я понимаю даже на спящий телефон на манер GCM - об этом позаботились аффилированные лица) --> система вызывает ресивер --> наше приложение в той или иной форме использует полученные данные
Bi-do-mi
3 / 3 / 0
Регистрация: 19.07.2016
Сообщений: 15
28.10.2016, 09:04     Как приложение Вконтакте узнаёт о новом сообщении? #17
Спасибо за ответ. Но, судя по терминологии ответа, вы мало знакомы с внутренней архитектурой построения кода андроид-приложения и его взаимодействия с Firebase. С посылом данных на сервер нет никаких проблем. Это делается буквально в две-три строчки. А вот с получением данных вы только что описали вариант с созданием фонового сервиса, который периодически делает запросы в базу данных. Глубоко уважаемый Паблито тоже указывал на то, что это делается с помощью сервиса. Как я писал выше, я пробовал реализовать свой собственно выдуманный, но он не работает в условиях, когда приложение выключено (а сервис при этом работает). Я думаю, что он не может получить доступ к базе потому, что для принятия запроса база требует запрос, исходящий от авторизованного пользователя. В моем случае авторизация происходит через существующий гугл - аккаунт. И происходит это в теле основного приложения, который в это время спит. И я не знаю как пройти авторизацию в условиях только фонового сервиса. Там нет для этого инструментов.
Ок, почитал я FCM. Там предлагают свой вариант сервиса под названием FirebaseMessagingService. Он прекрасно принимает уведомления, высланные из консоли FCM, когда приложение выключено. Но совершенно не ясно как посылать нужные обновленные данные из базы данных на устройство АВТОМАТИЧЕСКИ (не из консоли FCM). Тут я должен сказать, что Firebase умеет автоматически скидывать на устройство обновленные данные с сервера, но только при условии, что приложение на устройстве включено и подписано (прослушивает) на эти конкретные данные.
Если все таки реализовать свой сервис, каким-то чудом авторизоваться, то возникает еще один вопрос. В случае с Вконтакте сообщения приходят практически мгновенно после отправки. Для такого быстродействия нужно чтобы фоновый сервис все время прослушивал (делал) запросы в базу. Но это сразу посадит аккумулятор устройства и не даст даже уйти в глубокий сон.
Вот такие дела. Надеюсь я четко сформулировал вопрос.
vxg
Модератор
3117 / 1919 / 208
Регистрация: 13.01.2012
Сообщений: 7,349
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 минут позже)
Bi-do-mi
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).
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.10.2016, 11:17     Как приложение Вконтакте узнаёт о новом сообщении?
Еще ссылки по теме:
Как загружать картинки на стену Вконтакте? Android
Android Как получить список сообщений вконтакте?
Как посмотреть логи мобильного приложения Вконтакте? Android
Android Service в новом процессе
Android Handlers в новом потоке

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

Или воспользуйтесь поиском по форуму:
vxg
Модератор
3117 / 1919 / 208
Регистрация: 13.01.2012
Сообщений: 7,349
28.10.2016, 11:17     Как приложение Вконтакте узнаёт о новом сообщении? #20
Цитата Сообщение от Bi-do-mi Посмотреть сообщение
Я писал о своем собственноручно созданном сервисе, что он работает когда приложение запущено. То есть он отправляет запрос и получает ответ. Но он не работает когда приложение выключено.
то что вы не можете создать сервис который будет работать когда пользователь покинул приложение (не убил, а именно покинул да простят меня за этот бытовой термин) - ваши сложности не относящиеся к текущей теме. для общего развития - у меня (и у других людей читавших тот самый FM до достижения дзен) сервисы продолжают работать после того как пользователь покидает приложение. более того - если надо они работают даже если пользователь не открывал приложение (система сама поднимает их при наступлении нужного нам события вызывая наш ресивер в котором мы запускаем наш сервис, например, при загрузке устройства или при получении SMS или - ВОТ ОНО - при получении уведомления от Firebase).
Цитата Сообщение от Bi-do-mi Посмотреть сообщение
Как он обеспечивается? Куда тыкать чтобы инициировать событие отправки из базы на устройство обновлений?
как я нафантазировал выше по мотивам беглого чтения манов к Firebase вам нужно лишь послать запрос "окай, Firebase, на этом устройстве есть приложение которое хочет получать для пользователя *** с паролем *** уведомления при изменении данных *** в базе *** " и зарегистрировать свой ресивер (либо прописать ресивер в манифест если это возможно). думаю этого будет достаточно, однако, лично не проверял. просто описал минимальный набор действий которые ТЕХНИЧЕСКИ необходимы для такой штуки
Yandex
Объявления
28.10.2016, 11:17     Как приложение Вконтакте узнаёт о новом сообщении?
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru