Создать свой собственный сервис push-уведомлений без fcm, pusher,
Я хочу создать поставщика системы уведомлений, который не основан на службах Google или аналогичных. На самом деле, я хочу получить информацию об общей архитектуре и необходимой функциональности Android SDK.
Самое странное для меня - понять, как отправить уведомление на устройство Android.
Я имею в виду, как я могу определить устройство Android, на котором установлено мое приложение, из миллионов и миллионов других устройств Android в Интернете?
И как мне отправить ему информацию? Должен ли я использовать сокеты для этого или подобных вещей?
2 ответа
Простой ответ: ВЫ НЕ МОЖЕТЕ
Прежде всего, я должен исправить ваш вопрос, толкатель и FCM вообще не в одной группе! вы можете создать что-то вроде pusher, oneSignal и т.д., но вы не можете создать что-то вроде FCM/APNS
вы должны понять три простых, но важных предложения ниже:
- когда вы хотите вытащить что-либо из place_1(например, api) в place_2(например, browser_client), у вас больше всего есть идентификатор place_1_resource (который обычно является унифицированным указателем ресурсов api)
- когда вы хотите переместить что-либо с места_1(например, notification_central_server) на place_2(cellphone_client), у вас больше всего есть идентификатор place_2_resource
- Вы должны знать разницу между реальным толчком сервера с сервера-PUSH, как технологии, как долго таскание или... и вы должны знать, что то, что предполагается в этой концепции является реальным сервером толчок не любой вид вытягивать с нажимом куртка!
если у вас нет идентификатора для мобильного телефона, который вы хотите отправить ему уведомление, ваш сервер не знает, куда отправить это уведомление, поэтому нам нужен resource_identifier_like для мобильных телефонов, который на самом деле является device_token_like, и у вас есть только один подход, чтобы получить это device_token_like, и это FCM/APNS
FCM похож на DNS-сервер, содержащий все идентификаторы каждого устройства Android, которое поддерживает Google (почти каждое устройство Android), а APNS - то же самое, но для устройств Apple.
note1: даже если ваше приложение может получить соответствующее устройство device_token_like, оно не может использоваться для push-уведомлений, если оно не зарегистрировано в FCM/APNS
поэтому, когда вы получите идентификатор device_token_like нужного вам Clinet_device, теперь вы можете использовать разные подходы для отправки sth на это Clinet_device. существует несколько подходов, таких как SSE, Webpush, HTTP_server_push, Pushlet и т. д., но ни один из этих подходов не поддерживается материнскими компаниями этих устройств, единственный подход, который полностью поддерживается и является стандартным, - это тот же подход, который предлагают официальные веб-сайты FCM/APNS
например, иранская корпорация под названием najva использует webpush для отправки уведомлений из-за санкций США, но метод webPush хорошо работает в браузерах и устройствах Android, но они даже не появились на устройствах Apple
Наконец, я должен сказать, что восхищаюсь вашим любопытством к тому, чтобы меньше использовать что-либо из преимуществ компании, таких как FCM/APNS, в ваших разработках, но я настоятельно рекомендую вам эти статьи и книги, потому что я думаю, вы недостаточно научились
Короткий, прямой ответ
Вы не можете (по крайней мере, пока вы не создадите свой собственный ПЗУ)
TL;DR, почему?
Прежде чем создавать свой собственный сервер push-уведомлений, вам сначала нужно узнать, как он работает внутри Android. Всякий раз, когда вы/ваш сервер отправляете push-уведомление клиенту Android, SDK обрабатывает его и показывает вам уведомление. Но когда ваше приложение не работает (или его убивают), ваше приложение не может ответить на него, поскольку оно не было запущено. В таком случае ваше уведомление отправляется в системную службу, известную как служба Google Play. Чтобы это даже работало, вам сначала нужно связать свое приложение с сервисом Google Play , и это то, что делает FCM.. FCM SDK регистрирует ваше приложение в службе операционной системы при первой инициализации. Эта служба FCM открыта для порта, который прослушивает входящее сообщение с сервера, и когда он получает сообщение, он публикует уведомление от имени вашего приложения, содержащее данные. Затем доставляется в ваше приложение, когда пользователь щелкает по нему, а затем, наконец, ваше приложение обрабатывает данные (или push-сообщение).
Таким образом, для того, чтобы ваш сервер мог общаться с клиентом, сначала ему необходимо связаться со службой FCM , и для этого FCM предоставляет вам токен, который идентифицирует приложение для регистрации во внутренней службе Google Play.
Более того, упрощенный рабочий процесс выглядит следующим образом:
- Сервер отправить
---> ---> , - Если ваше приложение работает, оно напрямую обрабатывается клиентским SDK Итак, -->
Your app
- Если нет, то его доставляет сам сервис с помощью Итак,
--> --->| Опубликовать уведомление
- Если ваше приложение работает, оно напрямую обрабатывается клиентским SDK Итак, -->
Совершенно невозможно, Обходной путь?
Нет ничего невозможного, потому что абсолютно невозможного не существует . Говоря «невозможно», обычно означает «почти невозможно». (Это похоже на математику, где мы также говорим, что она стремится к бесконечности , потому что этого еще никто не достиг).
Чтобы заставить его работать, вам нужно каким-то образом связать свое приложение с сервисом Google Play , и вы не можете этого сделать, потому что Google не предоставил для этого никакого прямого API. Единственный возможный способ - использовать FCM ;-) (Опять не повезло). Таким образом, единственный возможный способ — создать собственное пользовательское ПЗУ с пользовательской службой push, которая действует как клиент для вашего сервера Push и как сервер для вашего клиента Push (который является вашим приложением).
Поскольку вышеописанный вариант имеет тенденцию к невозможности , вам нужно выбрать обходной путь.
Лучшие из худших обходных путей: -
- Чтобы сделать вредоносный SDK. Вредоносный, поскольку ему необходимо, чтобы приложение работало в фоновом режиме со службой, подключенной к
конечная точка вашего сервера. (Сложнее в новых версиях Android). - Используйте базу данных, в которой сохраняются ваши push-уведомления, и ваше приложение периодически проверяет их, используя
.
Надеюсь, вы уловили суть.