Создать свой собственный сервис push-уведомлений без fcm, pusher,

Я хочу создать поставщика системы уведомлений, который не основан на службах Google или аналогичных. На самом деле, я хочу получить информацию об общей архитектуре и необходимой функциональности Android SDK.

Самое странное для меня - понять, как отправить уведомление на устройство Android.

Я имею в виду, как я могу определить устройство Android, на котором установлено мое приложение, из миллионов и миллионов других устройств Android в Интернете?

И как мне отправить ему информацию? Должен ли я использовать сокеты для этого или подобных вещей?

2 ответа

Простой ответ: ВЫ НЕ МОЖЕТЕ

Прежде всего, я должен исправить ваш вопрос, толкатель и FCM вообще не в одной группе! вы можете создать что-то вроде pusher, oneSignal и т.д., но вы не можете создать что-то вроде FCM/APNS

вы должны понять три простых, но важных предложения ниже:

  1. когда вы хотите вытащить что-либо из place_1(например, api) в place_2(например, browser_client), у вас больше всего есть идентификатор place_1_resource (который обычно является унифицированным указателем ресурсов api)
  2. когда вы хотите переместить что-либо с места_1(например, notification_central_server) на place_2(cellphone_client), у вас больше всего есть идентификатор place_2_resource
  3. Вы должны знать разницу между реальным толчком сервера с сервера-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, в ваших разработках, но я настоятельно рекомендую вам эти статьи и книги, потому что я думаю, вы недостаточно научились

  1. Википедия технологии push
  2. история о парне, который пытается создать свой собственный сервис push-уведомлений
  3. Push Technology: полное руководство - издание 2020 г.
  4. Приложения Data Push с HTML5 SSE

Короткий, прямой ответ

Вы не можете (по крайней мере, пока вы не создадите свой собственный ПЗУ)

TL;DR, почему?

Прежде чем создавать свой собственный сервер push-уведомлений, вам сначала нужно узнать, как он работает внутри Android. Всякий раз, когда вы/ваш сервер отправляете push-уведомление клиенту Android, SDK обрабатывает его и показывает вам уведомление. Но когда ваше приложение не работает (или его убивают), ваше приложение не может ответить на него, поскольку оно не было запущено. В таком случае ваше уведомление отправляется в системную службу, известную как служба Google Play. Чтобы это даже работало, вам сначала нужно связать свое приложение с сервисом Google Play , и это то, что делает FCM.. FCM SDK регистрирует ваше приложение в службе операционной системы при первой инициализации. Эта служба FCM открыта для порта, который прослушивает входящее сообщение с сервера, и когда он получает сообщение, он публикует уведомление от имени вашего приложения, содержащее данные. Затем доставляется в ваше приложение, когда пользователь щелкает по нему, а затем, наконец, ваше приложение обрабатывает данные (или push-сообщение).

Таким образом, для того, чтобы ваш сервер мог общаться с клиентом, сначала ему необходимо связаться со службой FCM , и для этого FCM предоставляет вам токен, который идентифицирует приложение для регистрации во внутренней службе Google Play.

Более того, упрощенный рабочий процесс выглядит следующим образом:

  • Сервер отправить--->---> ,
    • Если ваше приложение работает, оно напрямую обрабатывается клиентским SDK Итак, -->Your app
    • Если нет, то его доставляет сам сервис с помощью Итак,-->--->| Опубликовать уведомление

Совершенно невозможно, Обходной путь?

Нет ничего невозможного, потому что абсолютно невозможного не существует . Говоря «невозможно», обычно означает «почти невозможно». (Это похоже на математику, где мы также говорим, что она стремится к бесконечности , потому что этого еще никто не достиг).

Чтобы заставить его работать, вам нужно каким-то образом связать свое приложение с сервисом Google Play , и вы не можете этого сделать, потому что Google не предоставил для этого никакого прямого API. Единственный возможный способ - использовать FCM ;-) (Опять не повезло). Таким образом, единственный возможный способ — создать собственное пользовательское ПЗУ с пользовательской службой push, которая действует как клиент для вашего сервера Push и как сервер для вашего клиента Push (который является вашим приложением).

Поскольку вышеописанный вариант имеет тенденцию к невозможности , вам нужно выбрать обходной путь.

Лучшие из худших обходных путей: -
  1. Чтобы сделать вредоносный SDK. Вредоносный, поскольку ему необходимо, чтобы приложение работало в фоновом режиме со службой, подключенной кконечная точка вашего сервера. (Сложнее в новых версиях Android).
  2. Используйте базу данных, в которой сохраняются ваши push-уведомления, и ваше приложение периодически проверяет их, используя.

Надеюсь, вы уловили суть.

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