• 0
Kitty

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

Вопрос

Прежде чем создавать свой 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? У автора на картинках все гуд...

 

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


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

13 ответов на этот вопрос

  • 0

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

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

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


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

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

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

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

 

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


Ссылка на сообщение
Поделиться на других сайтах
  • 0
В 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% совпадание, аккуратней там придется набирать текст!!!!

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

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


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

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

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

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

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

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

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

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

 

 

Изменено пользователем Kitty
Rusland и ENERGY понравилось это

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


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

Delete

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

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


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

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

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

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


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

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

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

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

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


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

Войти

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


Войти сейчас

  • Сейчас на странице   0 пользователей

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