Равиль Зарипов (ZuBy)

[Статья] Настройка пуш уведомлении через сервис Firebase для ANDROID и IOS [Часть 2]

65 сообщений в этой теме

Ссылка: http://blog.rzaripov.kz/2017/02/firebase-android-ios-2.html

Автор: Зарипов Равиль @ZuBy

Описание: Настройка пуш уведомлении через сервис Firebase для ANDROID и IOS [Часть 2]

В предыдущей  части , я рассказывал как сделать настройку пуш уведомления в консоли Firebase, в этой я покажу код на Delphi и серверную часть на PHP

https://github.com/rzaripov1990/PUSHTestFCM

dante333, Anatoliy, Евгений Корепов и 5 другим понравилось это

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Почему в Ваших уроках не рассматриваться готовый сервер EMS от эмбаркадеро?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

И еще не понятна теория... Что же такое термин токен?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Честно даже никогда и не рассматривал этот вариант и не интересовался им. Статья нацелена на реализацию через Firebase, т.к. сервис содержит необходимый функционал для android + ios и web, это очень удобно и настройка проще для ios, не нужно генерить и держать сертификаты у себя на сервере.

Ingalime понравилось это

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
1 минуту назад, Ingalime сказал:

И еще не понятна теория... Что же такое термин токен?

Токен это идентификатор который генерирует системный сервис для конкретного девайса по каким-то критериям. Но не вечный, есть время жизни, но это невозможно проверить.

Ingalime понравилось это

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ваша статья все же расчитана на профи. Простым людям она не понятна... Сорри... :)

 

Цитата
Firebase объединил APNs + GCM, поэтому токены которые выдаются из FPushService для iOS не валидны для FCM, но у Google есть специальный инструмент для этого, у Android все отлично, токен валиден
 

Это о чем? Вы что-то писали о термине APNs в Вашей статье? Что это из Вашей статьи?

Цитата

У меня реализация на Laravel, но я не буду её выкладывать.

Что такое Laravel?

Не могли бы Вы потратить свое время и написать статью для людей которые ничего не знают о пуш уведомлениях. С нуля, подробно, доходчиво с теорией...

1. Что такое пуш.

2. Как он реализуется.

3. Что для этого надо

и т. д.

 

Спасибо.

 

Изменено пользователем Ingalime

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

@Ingalime спасибо за вопросы) 

1) Вот есть хорошее описание работы и терминов касательно APNs и GCM, тратить на это время и писать тоже самое не хотелось

2) Реализация серверной и клиентской части есть в статье

3) Что для этого нужно и как настроить есть в предыдущей статье

17 минут назад, Ingalime сказал:

Что такое Laravel?

Laravel - это PHP фреймфорк, но выложил код на "чистом" PHP, чтобы каждый мог быстро интегрировать в свой проект, не привязываясь к фреймворкам

Ingalime и Pax Beach понравилось это

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Большое спасибо!

Мечта любого дилетанта, как я, это статья, книга, где от А до Я есть ответ на поставленный вопрос: есть ли жизнь на Марсе или ее нет... Пуш это буржуазное проявление которое - и т.д.

Статья как замкнутый цикл, где есть ответы на заданную тему в ПОЛНОМ объеме для таких дилетантов как я. Такая статья - успех. Спасибо!

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
3 минуты назад, Ingalime сказал:

Большое спасибо!

Мечта любого дилетанта, как я, это статья, книга, где от А до Я есть ответ на поставленный вопрос: есть ли жизнь на Марсе или ее нет... Пуш это буржуазное проявление которое - и т.д.

Статья как замкнутый цикл, где есть ответы на заданную тему в ПОЛНОМ объеме для таких дилетантов как я. Такая статья - успех. Спасибо!

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

Kitty понравилось это

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Тупо выполнила инструкции эмбаркадеро и получаю пуш  с сервиса https://www.kinvey.com/

Никаких проблем - просто сделала настройки в проекте согласно документации.  Все работает. Почему это работает - понятия не имею...

Но абсолютно ничего не понятно. Что такое токен, что вообще происходит и почему все это работает.

И вот тут Равиль хотелось бы ПОЛНУЮ статью, для простых смертных, которые начали писать для мобильных приложений... Полный замкнутый цикл...

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

хитрость именно в том, что kinvey - это готовый сервер. как Google Firebase или amazon_не_помню_как_его

по какому принципу его выбрала emro - загадка

если вы собираетесь полностью ВСЕ данные хранить на нём - тогда все норм.

а если вам нужен свой сервер со своими юзерами и другими вещами?

тогда нужно где-то соединять ваш логин-пароль и ID вашего телефона(токен) чтобы при регистрации ваш сервер мог послать пуш на ваш девайс

Равиль Зарипов (ZuBy) понравилось это

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

ems - тоже вещь в себе. эту штуку теперь развили до RAD server и продают за деньги и его и еще и клиентские лицензии.

за эти деньги какбе не очень нужен он. так что делать реализацию под EMS или RAD server имхо бессмысленно

Равиль Зарипов (ZuBy) понравилось это

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
24 минуты назад, Kitty сказал:

И вот тут Равиль хотелось бы ПОЛНУЮ статью, для простых смертных, которые начали писать для мобильных приложений... Полный замкнутый цикл...

Принцип работы Push на разных ОС не отличается

если коротко, не обращаем внимание на OS и термины (для ознакомления прошу сюда)

Цитата

Важно знать! Для того, чтобы уведомление отобразилось на экране устройства, само приложение не обязательно должно быть запущено – именно для реализации этого преимущества посредником здесь выступает OS. Кстати, такой подход позволяет экономить и заряд батареи смартфона (телефона), и трафик. 

  • Для получения Push-сообщений OS должна зарегистрировать мобильное приложение;
  • OS запрашивает у APNS идентификатор устройства (токен);
  • Приложение получает токен от сервера APNS;
  • Приложение отправляет токен обратно на сервер, чтобы далее сервер пользовался им для отправки Push-уведомлений;
  • При наступлении события, определённого разработчиком, сервер, используя токены, отправляет Push-сообщения через APNS;
  • APNS делает рассылку уведомлений в приложение.

Описание технологии GCM и APNs  хорошо расписаны на хабре, гораздо более профессионально. Я уж точно ничего нового не внесу.

Kitty понравилось это

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Цитата

если вы собираетесь полностью ВСЕ данные хранить на нём - тогда все норм.

Я не хочу хранить данные для никакого! Я хочу этому приложению посылать пуш. Теперь я хочу другому приложению посылать пуш. Все это работает в kinvey.com без единой строчки кода. Но статья Равиля не вносит ясности почему это происходит. Лично мне не понятно...

Изменено пользователем Kitty

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
1 час назад, Kitty сказал:

Я не хочу хранить данные для никакого! Я хочу этому приложению посылать пуш. Теперь я хочу другому приложению посылать пуш. Все это работает в kinvey.com без единой строчки кода. Но статья Равиля не вносит ясности почему это происходит. Лично мне не понятно...

Токен - это идентификатор который отправил сервер (APNs/GCM), он используется для связи приложения и серверной части. Кинвей на своей стороне хранит ваши токены, чтобы по ним отправить пуш. Иначе другого варианта нет. Это классно, если у вам не требуется делать выборку по определенным критериям.

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

Отослать пуши по критерию:

  • Обновление приложения на определенной платформе
  • Техническая информация по типу учетной записи (админ, модер, пользователь и тд..)
  • Поздравление с днем рождения, предоставление скидок
  • Уведомление о недостаточном балансе
  • и тд.. примеров масса

Я слабо представляю такую реализацию через сервис кинвей и подобным которые предоставляются из коробки в RAD.

Статья была написана, чтобы показать именно НАСТРОЙКУ через сервис Firebase, и никак не претендует на полное описание работы с пушами в целом.

Код на делфи был показан, чтобы убрать зависимость от сервисов из коробки

Код на PHP был показан, чтобы можно было реализовать функционал на своём сервере

Пару слов было сказано о правильном сохранении в БД, а вот бизнес логика уже у каждого приложения своя.

 

zairkz и Kitty понравилось это

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
В 26.02.2017 в 20:08, Kitty сказал:

Я не хочу хранить данные для никакого! Я хочу этому приложению посылать пуш. Теперь я хочу другому приложению посылать пуш. Все это работает в kinvey.com без единой строчки кода. Но статья Равиля не вносит ясности почему это происходит. Лично мне не понятно...

Kitty, а kinvey платный?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Цитата

Kitty, а kinvey платный?

Нет. Просто создала учётную запись и проект. На форму кинула компонент kinvey и заполнила его свойства в инспекторе объектов. 

Vitaldj понравилось это

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Насколько я помню,он бесплатен до определенного количества пользователей/запросов.Сам начинал с него,но потом перешел на тогда еще GCM + PHP push-сервер.И как говорится,"ни о чём не жалею" )).

Равиль Зарипов (ZuBy) понравилось это

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

все они имеют бесплатный лимит

вот написано. один админ, одно приложение, 1 GB. Но почти уверен, есть и ограничение на количество всяких пушей и обращений в день или в сек...

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Не совсем понятно, вот создала в панели второе приложение и все бесплатно... Видимо, что-то другое имеется в виду...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
В 28.02.2017 в 20:18, Kitty сказал:

Цены на оф. сайте https://www.kinvey.com/pricing/

Но толком не понятно... :)

Нажал там Start Building и получил 404 ошибку ) Этому сайту точно можно доверять? )

Спойлер

kinvey.png

 

Изменено пользователем Rusland

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Цитата

Нажал там Start Building и получил 404 ошибку ) Этому сайту точно можно доверять? )

Я не знаю или можно доверять этому сайту. Я доверяю эмбаркадеро которое для этого сервиса сделала отдельный компонент в палитре. А ошибок доступа 404 у меня не было... Вроде все работает...

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Не удалось соединить статью с компонентом TKinveyProvider и TPushEvents - не приходят пуши...:(

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
1 час назад, Ingalime сказал:

Не удалось соединить статью с компонентом TKinveyProvider и TPushEvents - не приходят пуши...:(

все правильно, разве было упоминание про kinvey? это совсем разные сервисы

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Гость
Эта тема закрыта для публикации сообщений.

  • Похожие публикации

    • Автор: Макс Войтенко
      var Keyboard: IFMXVirtualKeyboardService; begin if TPlatformServices.Current.SupportsPlatformService( IFMXVirtualKeyboardService, IInterface( Keyboard ) ) then if TVirtualKeyboardState.Visible in Keyboard.GetVirtualKeyBoardState then ShowMessage( 'клавиатура открыта' ) else ShowMessage( 'клавиатура скрыта' ); end; ТАК Я на шел для делфи. Но мне нужно для C++
    • Автор: Роман Фил
      Привет Всем уважаемые! 
      Пытаюсь сделать растягивание по содержимому компонента. Как это реализовано в мессенджерах типа WhatsApp если большой текст то растягивает (выделяется) по содержимому большое поле, если короткий то малое. 
        Text2.Text := Memo1.Lines.Strings[4];   text2.Height := canvas.TextHeight(Text2.Text); //по высоте строки меняется т.к. там и есть одна строка в TText просто переносится WordWrap визуально.   text2.Height:=canvas.TextWidth(text2.Text); //  - так чушь  Как это вообще реализовано кто нибудь сталкивался?

    • Автор: Роман Фил
      Привет ребят! Помогите кто знает, попытаюсь доходчиво объяснить - 
      имеется набор компонентов KernowSoftwareFMX - в нем использую TksTableView для вывода данных с Tmemo, в нем так же есть Image.
      В Tmemo с сервера грузится файл txt внутри которого строки с ссылками на изображения вида http://бла-бла/1.png
      Для загрузки использую FMX.Features.Bitmap.Helpers.pas - позволяет по прямой ссылке загружать изображение в TImage.
      что пытаюсь сделать?
      Нужно наполнять список TksTableView с Memo содержащий ссылки и в строках TksTableView - они же ListItem тоже самое что в ListView  и загружать в image каждой строки картинки по ссылкам memo.
       
      AItem.Image.Bitmap := Image4.MultiResBitmap.Bitmaps[1].LoadFromUrl(Memo1.Lines.Strings[i]); - так ругается [DCC Error] untMain.pas(92): E2010 Incompatible types: 'TBitmap' and 'procedure, untyped pointer or untyped parameter' AItem.Image.Bitmap := Image4.Bitmap.LoadFromUrl(Memo1.Lines.Strings[i]); - так тожн не работает Глюк в том что первым делом создаются строки . а потом грузятся по очереди картинки в Image4.
      Как заставить подгружать картинки в  TksTableView?
      Как ожидать хавершения загрузки каждой картинки в Image4 и после создавать AItem.Image.Bitmap?
       
       
       
    • Автор: Роман Фил
      Всем привет пытаюсь грузить файлы изображения с телефона Android на сервер методом post запроса. Для этого один из параметров запроса должен содержать полный путь к файлу. В ActionList есть стандартная опция TakePhotoFromLibraryAction - к с нее выдрать путь??? Куда он ей передается и передается ли вообще? я и справки толком не нахожу или я слепой?
       
      imgfile.Text:=TakePhotoFromLibraryAction1.????  
    • Автор: Rusland
      Приложение свернуто или закрыто.
      Отправляю один пуш, на телефоне в шторке появляется уведомление.
      Отправляю еще один, появляется второе уведомление и так далее. Сколько пушей, столько и уведомлений.
      Как сделать чтобы все уведомления собирались в одном уведомлении в шторке? (как делают telegram, whatsapp и т. п.)
    • Автор: Роман Фил
      Привет ребят, созрел такой вопрос который меня мучает ! Вобщем пытаюсь загрузить картинку по прямой слыке с сервера. Картинка не грузится, не сохраняется не отображается. 
      Конечная платформа - Андроид. Пишу на Delphi xe 10 seatle.
      Что я делаю? при нажатии на сам компонент TImage (созданный динамически), должна грузится картинка по адресу преждевременно записанное в hint (TImage) при создании вида (http://блаблабла.jpg)
      Раньше код ниже работал сейчас нет не пойму что не так. Почему стал ковырять? потому что форма встает колом при загрузке изображений.
       
      var s: string; fs: TFileStream; begin fs := TFileStream.Create(tpath.Combine(tpath.GetDownloadsPath, 'load.jpg'), fmCreate); NetHTTPClient1.Get((Sender as TImage).Hint, fs); fs.Free; (Sender as TImage).MultiResBitmap.Bitmaps[1].LoadFromFile (tpath.Combine(tpath.GetDownloadsPath, 'load.jpg')); подключал еще pas нашел на этом форуме FMX.Features.Bitmap.Helpers.pas
      (Sender as TImage).MultiResBitmap.Bitmaps[1].LoadFromUrl ((Sender as TImage).Hint); как проще сделать посоветуете чтоб и грузилось и форма не висла?
    • Автор: Роман Фил
      ПРивет, есть ли возможность узнать как то номер сроки в memo на delphi FMX в memo при нажатии на текст в поле memo?

      для windows на vlc можно memo.CaretPos.Y либо через WinAPi заголовки. Как такое делать в FireMonkey FMX для андроид ума не приложу. Может кто делал, поделится опытом?
    • Автор: Роман Фил
      Привет ребята! Вобщем есть текст в Memo с которого нужно брать строки с конца файла т.е. memo.lines.count-1 в цикле, 
      после этого создавая отельно динамически компоненты,  заносить текстовые  строки с memo в эти созданные динамически компоненты, ниже пример:
      procedure TVKBaseForm.Button2Click(Sender: TObject); var rec: TRectangle; txt: Ttext; i: word; // - можно и integer сути не поменяет begin for i := Memo1.Lines.Count - 1 downto 0 do begin rec := TRectangle.Create(Self); rec.Parent := MainLayout1; rec.Height := 15; rec.Align := TAlignLayout.Top; txt := Ttext.Create(Self); txt.Parent := rec; txt.Align := TAlignLayout.Client; txt.Text := Memo1.Lines.Strings[i]; end; end; Работает, но не правильно. Почему выдает не правильный порядок при выводе? почему создает сначала первый файл? Почему создает не все? Может есть какая-то синхронизация? 
      Пробовал так же
      A: integer; begin A := 1; // Присваеваем единицу While A <> Memo1.Lines.Count - 1 do begin A := A + 1; s := Memo1.Lines.Strings[A]; Application.ProcessMessages; rec := TRectangle.Create(Self); rec.Parent := MainLayout1; rec.Height := 15; rec.Align := TAlignLayout.Top; txt := Ttext.Create(Self); txt.Parent := rec; txt.Align := TAlignLayout.Client; txt.Text := s; Помогите разобраться
    • Автор: Роман Фил
      Доброе время суток .
      Я только начал знакомится с потоками , не судите меня строго .
      Вот код . Смысл которого через отдельный поток загружать текст с сервера и отображать в memo. Что я делаю? На сервере из вне имеется файлкоторый по api запросам пополняется. Его нужно в потоке постоянно выводить в memo. подгружать каждый раз. При использовании на win вес работает, на андроид не качает и не сздает файл в чем может быть проблема?
      type ThreadHTTP = class(TThread) private public Stream: TMemoryStream; i: integer; procedure Execute; override; procedure ShowResult; end; {$R *.fmx} procedure TForm1.Button1Click(Sender: TObject); begin Timer1.Enabled := true; end; procedure TForm1.Timer1Timer(Sender: TObject); var MyHTTP: ThreadHTTP; begin ProgressBar1.Value := 0; MyHTTP := ThreadHTTP.Create(False); end; { ThreadHTTP } procedure ThreadHTTP.Execute; var j: integer; begin inherited; i := 0; j := 0; Stream := TMemoryStream.Create; Form1.IdHTTP1.Get('http://сайт/base.txt', Stream); Form1.ProgressBar1.Max := Stream.Size; while j <= Stream.Size do begin inc(i); Synchronize(ShowResult); inc(j); Form1.ProgressBar1.Value := Form1.ProgressBar1.Value + 1; end; Stream.SaveToFile(tpath.getdownloadspath + '/base.txt'); Form1.Memo1.Lines.LoadFromFile(tpath.getdownloadspath + '/base.txt'); Stream.Free; end; procedure ThreadHTTP.ShowResult; begin Form1.Label1.Text := IntToStr(i) + ' kbs'; end;  
  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу