Kitty Опубликовано 9 апреля, 2017 Поделиться Опубликовано 9 апреля, 2017 Прежде чем создавать свой 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 Модераторы Равиль Зарипов (ZuBy) Опубликовано 9 апреля, 2017 Модераторы Поделиться Опубликовано 9 апреля, 2017 это уже обсуждали, нужно заполнить расширенные настройки и добавить поле message, даже вроде в статье я об этом упомянул Kitty 1 Цитата Ссылка на комментарий
0 Kitty Опубликовано 9 апреля, 2017 Автор Поделиться Опубликовано 9 апреля, 2017 Заполняю в консоли поле Текст сообщения и Название сообщения. В дополнительных параметрах есть Заголовок и Ключ-Значение тоже все заполнено. Не помогло. Как добавить поле message? Цитата Ссылка на комментарий
1 dmokrushin123 Опубликовано 11 апреля, 2017 Поделиться Опубликовано 11 апреля, 2017 В 10.04.2017 в 01:48, Kitty сказал: ак добавить поле message? Это вопрос только Android и из-за того что используется совместно FCM и GCM. Необходимо продублировать заголовок и сообщение в пользовательские данные: message - мое сообщение title - мой заголовок Alex Bozhko 1 Цитата Ссылка на комментарий
0 Kitty Опубликовано 11 апреля, 2017 Автор Поделиться Опубликовано 11 апреля, 2017 Я не понимаю где надо дублировать заголовок и сообщение в пользовательских данных, поэтому и прошу помочь в этом в этом вопросе. Где в консоли 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 Kitty Опубликовано 11 апреля, 2017 Автор Поделиться Опубликовано 11 апреля, 2017 (изменено) 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 вижу нормальное сообщение, а шторке вижу название пакета, а не само сообщение.. Изменено 11 апреля, 2017 пользователем Kitty Цитата Ссылка на комментарий
0 Модераторы Равиль Зарипов (ZuBy) Опубликовано 11 апреля, 2017 Модераторы Поделиться Опубликовано 11 апреля, 2017 Цитата Ссылка на комментарий
0 Kitty Опубликовано 11 апреля, 2017 Автор Поделиться Опубликовано 11 апреля, 2017 ГДЕ? Цитата Ссылка на комментарий
0 Модераторы Равиль Зарипов (ZuBy) Опубликовано 11 апреля, 2017 Модераторы Поделиться Опубликовано 11 апреля, 2017 25 минут назад, Kitty сказал: ГДЕ? блин вы издеваетесь? я уже и текстом написал и картинка, что еще? видео записать? Цитата Ссылка на комментарий
0 Kitty Опубликовано 11 апреля, 2017 Автор Поделиться Опубликовано 11 апреля, 2017 (изменено) Я могу предоставить вам доступ по TeamViewer. Нет у меня в консоли message и title, что и показано в картинке выше. Изменено 11 апреля, 2017 пользователем Kitty Цитата Ссылка на комментарий
0 Модераторы Равиль Зарипов (ZuBy) Опубликовано 11 апреля, 2017 Модераторы Поделиться Опубликовано 11 апреля, 2017 3 минуты назад, Kitty сказал: Я могу предоставить вам доступ по TeamViewer. Нет у меня в консоли message и title, что и показано в картинке выше. а написать самой уже никак? на крайний случай, смотрите внимательно на картинку которую скинул выше должно быть 100% совпадание, аккуратней там придется набирать текст!!!! Kitty 1 Цитата Ссылка на комментарий
0 Kitty Опубликовано 11 апреля, 2017 Автор Поделиться Опубликовано 11 апреля, 2017 (изменено) Цитата а написать самой уже никак? Спасибо получилось. Для таких не умных как я, которые не понимают, что в консоли FCM надо писать самой: 1. Откройте дополнительные параметры в консоли FCM . 2. В первом поле КЛЮЧ принудительно самостоятельно напечатайте "mеssage" без ошибок в первом поле. В поле напротив напишите текст сообщения. 3. При этом появиться дополнительные поля ввода ниже. 4. В первом новом поле ниже напишите принудительно title без ошибок и напротив в значении ваш текст... Изменено 12 апреля, 2017 пользователем Kitty ENERGY и Rusland 2 Цитата Ссылка на комментарий
0 Kitty Опубликовано 11 апреля, 2017 Автор Поделиться Опубликовано 11 апреля, 2017 (изменено) Delete Изменено 12 апреля, 2017 пользователем Kitty Цитата Ссылка на комментарий
0 Ingalime Опубликовано 12 апреля, 2017 Поделиться Опубликовано 12 апреля, 2017 М-да... Видимо женский мозг реально по другому устроен... Я тоже весь форум перечитала и никак не могла понять где эти пресловутые message и title! Ларчик просто открывался, аж стыдно... Цитата Ссылка на комментарий
Вопрос
Kitty
Прежде чем создавать свой PHP сервер, хочу протестировать свое приложение отправкой пуша из консоли firebase.
Иду по этой статье: Firebase Cloud Messaging with Delphi 10.1 Berlin update 2
У автора в статье все нормально, а у меня нет...
Весь код:
Отправляю пуш из консоли firebase. Спустя несколько минут пуш приходит на телефон. Видно название приложения, а сам текст пуша пустой. При нажатии на пуш в шторке получаем:
segmentation fault 11 на строке:
MessageText = ANotification->DataObject->GetValue("message")->Value();
Где может быть ошибка получения пуша из консоли firebase? У автора на картинках все гуд...
Ссылка на комментарий
13 ответов на этот вопрос
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.