• 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, даже вроде в статье я об этом упомянул

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


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

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


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

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

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

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

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

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

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

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

 

 

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

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


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

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

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

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


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

Для публикации сообщений создайте учётную запись или авторизуйтесь

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

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти


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

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