Перейти к содержанию
Fire Monkey от А до Я
  • 0

Отправка пуша из консоли firebase


Kitty

Вопрос

Прежде чем создавать свой PHP сервер, хочу протестировать свое приложение отправкой пуша из консоли firebase.

Иду по этой статье: Firebase Cloud Messaging with Delphi 10.1 Berlin update 2

У автора в статье все нормально, а у меня нет...

Весь код:

//H
#include <System.PushNotification.hpp>

private:	// User declarations
     TPushService * APushService;
     TPushServiceConnection * AServiceConnection;

//***********************************************
//CPP
#if defined(__ANDROID__)
#include <FMX.PushNotification.Android.hpp>

namespace Fmx {
 namespace Pushnotification {
   namespace Android {
	_INIT_UNIT(Fmx_Pushnotification_Android);
   }
 }
} 

#endif

#if defined(__APPLE__) && (defined(__arm__) || defined(__arm64__))
#include <FMX.PushNotification.IOS.hpp>

namespace Fmx {
 namespace Pushnotification {
  namespace Ios {
	_INIT_UNIT(Fmx_Pushnotification_Ios);
   }
  }
}

#endif

void __fastcall TForm1::FormShow(TObject *Sender) {
	APushService = nullptr;
	AServiceConnection = nullptr;

	String ADeviceID = "";
	String ADeviceToken = "";

	#if defined(__ANDROID__)
		APushService = TPushServiceManager::Instance->GetServiceByName(TPushService_TServiceNames_GCM);
		if (APushService)
			 APushService->AppProps[TPushService_TAppPropNames_GCMAppID] = FAndroidServerKey;
	#endif
	#if defined(__APPLE__) && (defined(__arm__) || defined(__arm64__))
		APushService = TPushServiceManager::Instance->GetServiceByName(TPushService_TServiceNames_APS);
	#endif

	if (APushService) {
		AServiceConnection = new TPushServiceConnection(APushService);
		AServiceConnection->OnChange = &OnServiceConnectionChange;
		AServiceConnection->OnReceiveNotification = &OnReceiveNotificationEvent;
		AServiceConnection->Active = true;
	}

}

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

	// ShowMessage(ANotification->Json->ToString());

	String MessageText = "";
	// Получаем текст сообщения в зависимости от платформы
	#if defined(__ANDROID__)
		MessageText = ANotification->DataObject->GetValue("message")->Value();
	#endif
	#if defined(__APPLE__) && (defined(__arm__) || defined(__arm64__))
		MessageText = ANotification->DataObject->GetValue("alert")->Value();
	#endif
	if (MessageText != "")
		ShowNotification(MessageText, 0); //объявлен в файле pas

}

Отправляю пуш из консоли firebase. Спустя несколько минут пуш приходит на телефон. Видно название приложения, а сам текст пуша пустой. При нажатии на пуш в шторке получаем:

segmentation fault 11 на строке:

MessageText = ANotification->DataObject->GetValue("message")->Value();

Где может быть ошибка получения пуша из консоли firebase? У автора на картинках все гуд...

 

Ссылка на комментарий

Рекомендуемые сообщения

  • 0
  • Модераторы

это уже обсуждали, нужно заполнить расширенные настройки и добавить поле message, даже вроде в статье я об этом упомянул

Ссылка на комментарий
  • 0

Заполняю в консоли поле Текст сообщения и Название сообщения.

В дополнительных параметрах есть Заголовок и Ключ-Значение тоже все заполнено. Не помогло.

Как добавить поле message?

 

Ссылка на комментарий
  • 1
В 10.04.2017 в 01:48, Kitty сказал:

ак добавить поле message?

Это вопрос только Android и из-за того что используется совместно FCM и GCM.

Необходимо продублировать заголовок и сообщение в пользовательские данные:

  • message - мое сообщение
  • title - мой заголовок
Ссылка на комментарий
  • 0

Я не понимаю где надо дублировать заголовок и сообщение в пользовательских данных, поэтому и прошу помочь в этом в этом вопросе. Где в консоли 

  • message - мое сообщение
  • title - мой заголовок

Где это???

Своим путем, чтобы добраться до сообщения из FCM сделала такой код. Работает, но это не то, чтобы хотелось:


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

    String JsonMemberName;
	String JsonMemberValue;
    std::unique_ptr<TJSONValue> LJSONValue(TJSONObject::ParseJSONValue(ANotification->Json->ToString()));
	TJSONObject *LJSONObject = dynamic_cast<TJSONObject*>(LJSONValue.get());
	if(LJSONObject != NULL)
	 {
	  TJSONPair * JSONPair;
	  for (int i = 0; i < LJSONObject->Count; i++)
		{
         JSONPair = LJSONObject->Pairs[i];
		 if(JSONPair != NULL)
			{
			 JsonMemberName = JSONPair->JsonString->Value();
			 JsonMemberValue = JSONPair->JsonValue->ToString();
			 if(JsonMemberName == L"gcm.notification.body")
				 {
				  ShowMessage(JsonMemberValue);
				 }

            }
		}
	 }
}

 

 

Ссылка на комментарий
  • 0
void __fastcall TForm1::OnReceiveNotificationEvent(TObject *Sender,
	TPushServiceNotification* const ANotification) {

    String JsonMemberName;
	String JsonMemberValue;
    std::unique_ptr<TJSONValue> LJSONValue(TJSONObject::ParseJSONValue(ANotification->Json->ToString()));
	TJSONObject *LJSONObject = dynamic_cast<TJSONObject*>(LJSONValue.get());
	if(LJSONObject != NULL)
	 {
	  TJSONPair * JSONPair;
	  for (int i = 0; i < LJSONObject->Count; i++)
		{
         JSONPair = LJSONObject->Pairs[i];
		 if(JSONPair != NULL)
			{
			 JsonMemberName = JSONPair->JsonString->Value();
			 JsonMemberValue = JSONPair->JsonValue->ToString();
			 if(JsonMemberName == L"gcm.notification.body")
				 {
				  ShowMessage(JsonMemberValue);
				 }

            }
		}
	 }

 if(JsonMemberValue != "" )
  {
	ShowNotification(JsonMemberValue, 0);
  }
      
 }     
procedure ShowNotification(MessageText : string; BadgeNumber : integer);
var
  NotificationC: TNotificationCenter;
  Notification: TNotification;
begin

  // Создаём центр уведомлений и уведомление для отправки
  NotificationC := TNotificationCenter.Create(nil);
  Notification := NotificationC.CreateNotification;

  try
    // Если центр уведомлений поддерживается системой
    if NotificationC.Supported then
    begin
      // Устанавливаем текст сообщения
      Notification.AlertBody := MessageText;
      // Включаем звук при выводе сообщение
      Notification.EnableSound := true;
      // Устанавливаем цифру на иконке приложения
      Notification.Number := BadgeNumber;
      NotificationC.ApplicationIconBadgeNumber := BadgeNumber;
      // Выводим сообщение из приложения
      NotificationC.PresentNotification(Notification);
    end;
  finally
    // Очищаем переменные
    Notification.DisposeOf;
    NotificationC.Free;
    NotificationC.DisposeOf;
  end;
end;

end.

 

В ShowMessage вижу нормальное сообщение, а  шторке вижу название пакета, а не само сообщение.. :(

Изменено пользователем Kitty
Ссылка на комментарий
  • 0
  • Модераторы
25 минут назад, Kitty сказал:

ГДЕ?

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

Ссылка на комментарий
  • 0

Я могу предоставить вам доступ по TeamViewer. Нет у меня в консоли message и title, что и показано в картинке выше.

Изменено пользователем Kitty
Ссылка на комментарий
  • 0
  • Модераторы
3 минуты назад, Kitty сказал:

Я могу предоставить вам доступ по TeamViewer. Нет у меня в консоли message и title, что и показано в картинке выше.

а написать самой уже никак? на крайний случай, смотрите внимательно на картинку которую скинул выше

должно быть 100% совпадание, аккуратней там придется набирать текст!!!!

Ссылка на комментарий
  • 0
Цитата

а написать самой уже никак?

Спасибо получилось.

Для таких не умных как я, которые не понимают, что в консоли FCM надо писать самой:

1. Откройте дополнительные параметры в консоли FCM .

2. В первом поле КЛЮЧ принудительно самостоятельно напечатайте "mеssage" без ошибок в первом поле. В поле напротив напишите текст сообщения.

3. При этом появиться дополнительные поля ввода ниже.

4. В первом новом поле ниже напишите принудительно title без ошибок и напротив в значении ваш текст...

 

 

Изменено пользователем Kitty
Ссылка на комментарий
  • 0

М-да... Видимо женский мозг реально по другому устроен... Я тоже весь форум перечитала и никак не могла понять где эти пресловутые message и title!

Ларчик просто открывался, аж стыдно... :)

Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...