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

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

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

Для kinvey только нужен ключ сервера и идентификатор отправителя. Все это получаем из статьи...

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


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

Заработало! Забыла присвоить в инспекторе объектов одно из свойств компонента kinvey...

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


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

Подскажите, пожалуйста на тарифе free kinvey я могу использовать если не больше 1000 пушей в месяц на один проект?

Это тут написано, но не до конца понятно, какие еще ограничения free kinvey .

https://www.kinvey.com/wp-content/uploads/2016/11/Kinvey-Pricing-112016-2.pdf

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


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

Active users of the app. Note a user is active for the month if the app made at least one request for the user during that month.

Это количество запросов к сервису.если 200 пользователей сделают по 5 запросов,все,лимит исчерпан.Например запрос авторизации.

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

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


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

Я планирую раз в неделю посылать пуш из панели kinvey и все, больше ничего от kinvey мне не надо. Значит в месяц я шлю 4 пуша. Значит в моем распоряжении 250 пользователей? 4*250=1000. Правильно?

 

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

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


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

Мне тоже не понятно - сколько можно пушей в месяц на free тарифе kinvey для одного приложения в месяц? Гуру растолкуйте таблицу цен. :)

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


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

При отправке пуша из консоли kinvey,API Calls (обращение к API сервиса) не защитывается,что правильно,ведь запроса от пользователя мы не получаем.То есть,теоретически,вы имеете "безлимитку" на пуши. Все таки Kinvey это не совсем "про пуши",сервис имеет гораздо больше функций и применений,а пуши это можно сказать бонус.Если пользоваться чисто пушами,то единственный запрос от пользователя будет приходить при первом запуске приложения,для получения пары ID/токен.Так что вариант с Kinvey,особенно при небольшом количестве пользователей,имеет право на существование).Но и тут не все так гладко.Kitty в соседней теме описала про дублирование уведомлений.

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

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


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

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

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

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


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

Со статьей не удалось разобраться - не хватает знаний... :(

У kinvey проблема с дубляжами. 

Вот тут написано, что студия поддерживает сервис App42: 

App42 ссылка

Однако в Берлине нет компонентов для App42. Значит уже не поддерживаеться App42?

Просто в  App42 аж миллион пушей в месяц: Тарифы ссылка

 

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


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

Добавил тестовый проект и серверную часть, статью по ссылке обновил

https://github.com/rzaripov1990/PUSHTestFCM

Rusland, Евгений Корепов и Kitty понравилось это

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


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

Бинго!

Похоже счастье наступило! И вопрос с Вашего позволения...

Нужно ли делать проверку на наличие интернета и если да то куда лучше вставить код проверки? В PushServiceRegister???

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


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

Бинго!

Похоже счастье наступило! И вопрос с Вашего позволения...

Нужно ли делать проверку на наличие интернета и если да то куда лучше вставить код проверки? В PushServiceRegister???

да в PushServiceRegister, т.к. без интернета у вас не будет токена

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


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

Здравствуйте! Не могу понять, откуда нужно взять значение свойства AndroidPush.GCMAppID компонента KinveyProvider ?

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


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

Здравствуйте! Не могу понять, откуда нужно взять значение свойства AndroidPush.GCMAppID компонента KinveyProvider ?

читаем внимательно, kinvey тут не используется

http://blog.rzaripov.kz/2017/02/firebase-android-ios.html

http://blog.rzaripov.kz/2017/02/firebase-android-ios-2.html

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

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


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

Подскажите, пожалуйста, в чем может быть дело? В базе вижу одну запись.

Отправила пуш в строке браузера ({"status":"OK"}) и код ниже почему-то отработал два раза и я получила два одинаковых друг за другом ShowMessage? :o

void __fastcall TForm1::OnReceiveNotificationEvent(TObject *Sender,
	TPushServiceNotification* const ANotification)
{

 const String FCMSignature = L"gcm.notification.body";
 const String GCMSignature = L"message";
 const String APNsSignature = L"alert";
 String aText = "";
 TJSONValue * aObj;

	#if defined(__ANDROID__)
		aObj = ANotification->DataObject->GetValue(GCMSignature);
		if(aObj != NULL)
		   {
			aText = aObj->Value();
		   }
		   else
			  {
			   aText = ANotification->DataObject->GetValue(FCMSignature)->Value();
              }
	#endif

	#if defined(__APPLE__) && (defined(__arm__) || defined(__arm64__))
	  aObj = ANotification->DataObject->GetValue(APNsSignature);
	  if (aObj != NULL)
	   {
		aText = aObj->Value();
	   }
     #endif

 ShowMessage(aText);

}

А если приложение выгрузить и послать пуш, то в шторке одно уведомление как и положено...

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

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


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

Если при открытом приложение срабатывает два раза OnReceiveNotificationEvent, может заменить ShowMessage тоже на сообщение в шторку? Вторая сработка чистит первую и со стороны вроде работает для пользователя:

void __fastcall TForm1::OnReceiveNotificationEvent(TObject *Sender,
	TPushServiceNotification* const ANotification)
{

 ClearAllNotification();

 const String FCMSignature = L"gcm.notification.body";
 const String GCMSignature = L"message";
 const String APNsSignature = L"alert";
 String aText = "";
 TJSONValue * aObj;

	#if defined(__ANDROID__)
		aObj = ANotification->DataObject->GetValue(GCMSignature);
		if(aObj != NULL)
		   {
			aText = aObj->Value();
		   }
		   else
			  {
			   aText = ANotification->DataObject->GetValue(FCMSignature)->Value();
              }
	#endif

	#if defined(__APPLE__) && (defined(__arm__) || defined(__arm64__))
	  aObj = ANotification->DataObject->GetValue(APNsSignature);
	  if (aObj != NULL)
	   {
		aText = aObj->Value();
	   }
     #endif

 //ShowMessage(aText);

 //шлем Notification
 if (NotificationCenter1->Supported() && aText != "")
  {
   TNotification * myNotification = NotificationCenter1->CreateNotification();

	__try
	{
     NotificationCenter1->CancelAll();
	 myNotification->AlertBody = aText;
	 NotificationCenter1->PresentNotification(myNotification);
	}
	__finally
			{
			 myNotification->DisposeOf();
			}
  }

}

 

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


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

Что-то не получается перенос строк в пуш уведомлении. Сделала как в последнем посте темы:

перенос строк

А строки в этом проекте не переносятся.

А еще вопрос, можно послать пуш без заголовка?

Спасибо.

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


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

Что-то не получается перенос строк в пуш уведомлении. Сделала как в последнем посте темы:

перенос строк

А строки в этом проекте не переносятся.

а что конкретно сделала? подключила fmx.jar?

 

2 минуты назад, Kitty сказал:

А еще вопрос, можно послать пуш без заголовка?

можно, если заголовка нет, там будет отображаться название приложения

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

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


Ссылка на сообщение
Поделиться на других сайтах
2 минуты назад, Равиль Зарипов (ZuBy) сказал:

а что конкретно сделала? подключила fmx.jar?

 

можно, если заголовка нет, там будет отображаться название приложения

А как правильно сформировать ссылку?

{"status":"ERROR","text":"Параметр `title` не передан"}

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


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

файл api.php

} elseif ($method == "sendPush") {
	# если параметры не переданы, то отдаем ошибку
	# if (empty($title)) msgErr("Параметр `title` не передан"); // убрать
	if (!isset($title)) $title = ''; // вставить
	...

 

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

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


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

а чтобы не править файлы, можно было отправить в title название приложения

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

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


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

Удалось разбить перенос строк в уведомлении. Однако теперь заголовок игнорируется и выводиться всегда название приложения. Так и должно быть? Спасибо.

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


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

А сейчас заголовок нормально пришел...

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


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

В общем все нормально и заголовок и перенос текста работает. Видимо один раз был сбой, но это совсем не проблема.

Спасибо за статью! Все работает и пуши живут теперь и в билдере. :D

P.S.

На будущее по возможности напишите понятную статью, а как обойти ограничение на 1000 пользователей. :)

А так все работает. Только отменила ShowMessage(aText) на посылку Notification, а то два подряд ShowMessage не очень. :)

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


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

И снова наш любимый ios для домохозяек...:)
Нормально запустить дебаг не получается так как все время: Session ended
Однако с помощью лейбл имеем такое:

FDeviceToken = FPushService->DeviceTokenValue[TPushService_TDeviceTokenNames_DeviceToken];
//добавлено для теста
Label1->Text = L"Что тут? " + FDeviceToken;
и видим что FDeviceToken пустой.

Куда копать? Спасибо.

 

 

 

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


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

Создайте аккаунт или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!


Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.


Войти сейчас

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

    • Автор: Pax Beach
      Мне нужно сделать снимок экрана из своего приложения в приложении DirectX (в игре).
      По-быстрому накидал приложение, исходники здесь: MakeScreenshot-Forum.zip

      1. по нажатию единственной кнопки будет выполнена серия из 16 снимков экрана. Если запущен Скайп, то фотографироваться будет содержимое его окна.
      2. По нажатии CTRL+ALT+F9 будет сделан единичный снимок
      3. Label внизу показывает сколько миллисекунд затрачено на вывод снимка
      4. В комментах так же вы найдете, как работать со снимками через буфер обмена.
       
      Работа выполняется через GetDC(NULL);
      Windows 10 x64. Снимки делаются. И DirectX тоже нормально фотографируется.
      НО! только в оконных приложениях.
      Если приложение DirectX полноэкранное, то на всех снимках одна и та же картинка с первого снимка.
      То есть изменение буфера экрана в приложении ни как не отражается на снимках.
       
      Что нужно? Необходимо делать снимки конкретного приложения через интерфейс DirectX, а точнее, я так понимаю, через DirectShow. Тогда не будет разницы в окне оно или на полный экран.
      Помогите плиз, знающие люди, с решением этой задачи.
      Гарантирую вам от сообщества большой почет, от меня огромный респект, если это принесет доход, то еще и очень приятный бонус.
       
      Ссылки теме:
      1. DIRECTX FOR DELPHI
      2. unofficial version of DelphiX
      3. DirectX для начинающих
      4. MinHook - The Minimalistic x86/x64 API Hooking Library
      5. Various methods for capturing the screen
      6. Вывод графики на рабочий стол Windows с использованием оверлеев DirectX
      7. Project JEDI
      8. Реализация перехвата вызовов API — исчерпывающе про внедрение DLL, если разобраться, + это на Delphi
      UPD:
      9. Серия видео уроков Пишем D3D-хук — все понятно, только в Delphi перенести нужно.
      UPD 2:
      Научился рисовать в Direct3D и ловить интерфейс IDirect3DDevice9. Теперь делаю DLL ловушку для реализации снимков.
       
    • Автор: msp888
      Если Wi-Fi на телефоне работает в режиме клиента (подключается к внешней точке доступа), то как с ним работать понятно.
      Если же Wi-Fi на телефоне (ОС Android) работает в режиме персональной точки доступа, то как из программы получить свой ip-адрес и другие параметры сети.
      Кто знает, помогите, желательно исходный код на Delphi.
    • Автор: msp888
      Если Wi-Fi на телефоне работает в режиме клиента (подключается к внешней точке доступа), то как с ним работать понятно.
      Если же Wi-Fi на телефоне (ОС Android) работает в режиме персональной точки доступа, то как из программы получить свой ip-адрес и другие параметры сети.
      Кто знает, помогите, желательно исходный код на Delphi.
       
    • Автор: AliZairov
      Привет. Я сделал macos установку web installer с Delphi Berlin.

      Программа дает .bpl ошибка открытия файла.

    • Автор: denprox
      Доброго времени суток! Пытаюсь сделать мини аналог Paint'a с помощью FMX. Необходимо реализовать всего 2 компонента: Кисть и Заливка. С кистью вроде пока сложностей нет, а вот с заливкой не ясно. В VCL было как-то так: 
      .Canvas.FloodFill(x, y, bmp.Canvas.Pixels[x,y], fsSurface); В документации нашел описание различных видов заливок, но все они заливают какую то заданную область. Мне же необходимо заливать область одного цвета.  
      Есть ли у кого примеры реализации подобной задачи ?
    • Автор: AlexG
      Привет, друзья!
      Подскажите - как, с максимально возможной скоростью, определить отсутствие изображения как такового в TBitmap?
      Т.е. - есть TBitmap. Он либо заполнен изображением (картинка), либо он - абсолютно черный прямоугольник.
      Каким способом можно узнать - что в нем именно изображение? Т.е. - НЕ абсолютно черный прямоугольник...
      И определить это нужно "мгновенно" (условно выражаясь).
      Заранее всем благодарен за участие!
      P.S. Варианты типа того что ниже - не предлагать)) Хотелось бы что-то "побыстрее"! Еще раз спасибо!
      function IsBitmapEmpty(Bmp: TBitmap): Boolean; var X, Y : Integer; BmpData: TBitmapData; yAddr : Integer; AlphaCount : integer; begin Result := False; try AlphaCount := 0; Bmp.Map(TMapAccess.Read, BmpData); for Y := 0 to Bmp.Height div 2 do begin YAddr := Y * Bmp.Height; for X := 0 to Bmp.Width - 1 do if (PAlphaColorArray(BmpData.Data)^[YAddr + X] <> TAlphaColorRec.Null) and (PAlphaColorArray(BmpData.Data)^[YAddr + X] <> TAlphaColorRec.Black) then begin inc(AlphaCount); Break; end; if AlphaCount > 0 then Break; end; finally Bmp.Unmap(BmpData); Result := AlphaCount = 0; end; end;  
    • Автор: Равиль Зарипов (ZuBy)
      Ссылка: http://blog.rzaripov.kz/2017/02/firebase-android-ios.html
      Автор: Зарипов Равиль @ZuBy
      Описание: Настройка пуш уведомлении через сервис Firebase для ANDROID и IOS
  • Сейчас на странице   0 пользователей

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